Home | History | Annotate | Download | only in src
      1 /*
      2 ** 2001 September 15
      3 **
      4 ** The author disclaims copyright to this source code.  In place of
      5 ** a legal notice, here is a blessing:
      6 **
      7 **    May you do good and not evil.
      8 **    May you find forgiveness for yourself and forgive others.
      9 **    May you share freely, never taking more than you give.
     10 **
     11 *************************************************************************
     12 ** Main file for the SQLite library.  The routines in this file
     13 ** implement the programmer interface to the library.  Routines in
     14 ** other files are for internal use by SQLite and should not be
     15 ** accessed by users of the library.
     16 */
     17 
     18 #include "sqliteInt.h"
     19 
     20 /*
     21 ** Execute SQL code.  Return one of the SQLITE_ success/failure
     22 ** codes.  Also write an error message into memory obtained from
     23 ** malloc() and make *pzErrMsg point to that message.
     24 **
     25 ** If the SQL is a query, then for each row in the query result
     26 ** the xCallback() function is called.  pArg becomes the first
     27 ** argument to xCallback().  If xCallback=NULL then no callback
     28 ** is invoked, even for queries.
     29 */
     30 int sqlite3_exec(
     31   sqlite3 *db,                /* The database on which the SQL executes */
     32   const char *zSql,           /* The SQL to be executed */
     33   sqlite3_callback xCallback, /* Invoke this callback routine */
     34   void *pArg,                 /* First argument to xCallback() */
     35   char **pzErrMsg             /* Write error messages here */
     36 ){
     37   int rc = SQLITE_OK;         /* Return code */
     38   const char *zLeftover;      /* Tail of unprocessed SQL */
     39   sqlite3_stmt *pStmt = 0;    /* The current SQL statement */
     40   char **azCols = 0;          /* Names of result columns */
     41   int nRetry = 0;             /* Number of retry attempts */
     42   int callbackIsInit;         /* True if callback data is initialized */
     43 
     44   if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT;
     45   if( zSql==0 ) zSql = "";
     46 
     47   sqlite3_mutex_enter(db->mutex);
     48   sqlite3Error(db, SQLITE_OK, 0);
     49   while( (rc==SQLITE_OK || (rc==SQLITE_SCHEMA && (++nRetry)<2)) && zSql[0] ){
     50     int nCol;
     51     char **azVals = 0;
     52 
     53     pStmt = 0;
     54     rc = sqlite3_prepare(db, zSql, -1, &pStmt, &zLeftover);
     55     assert( rc==SQLITE_OK || pStmt==0 );
     56     if( rc!=SQLITE_OK ){
     57       continue;
     58     }
     59     if( !pStmt ){
     60       /* this happens for a comment or white-space */
     61       zSql = zLeftover;
     62       continue;
     63     }
     64 
     65     callbackIsInit = 0;
     66     nCol = sqlite3_column_count(pStmt);
     67 
     68     while( 1 ){
     69       int i;
     70       rc = sqlite3_step(pStmt);
     71 
     72       /* Invoke the callback function if required */
     73       if( xCallback && (SQLITE_ROW==rc ||
     74           (SQLITE_DONE==rc && !callbackIsInit
     75                            && db->flags&SQLITE_NullCallback)) ){
     76         if( !callbackIsInit ){
     77           azCols = sqlite3DbMallocZero(db, 2*nCol*sizeof(const char*) + 1);
     78           if( azCols==0 ){
     79             goto exec_out;
     80           }
     81           for(i=0; i<nCol; i++){
     82             azCols[i] = (char *)sqlite3_column_name(pStmt, i);
     83             /* sqlite3VdbeSetColName() installs column names as UTF8
     84             ** strings so there is no way for sqlite3_column_name() to fail. */
     85             assert( azCols[i]!=0 );
     86           }
     87           callbackIsInit = 1;
     88         }
     89         if( rc==SQLITE_ROW ){
     90           azVals = &azCols[nCol];
     91           for(i=0; i<nCol; i++){
     92             azVals[i] = (char *)sqlite3_column_text(pStmt, i);
     93             if( !azVals[i] && sqlite3_column_type(pStmt, i)!=SQLITE_NULL ){
     94               db->mallocFailed = 1;
     95               goto exec_out;
     96             }
     97           }
     98         }
     99         if( xCallback(pArg, nCol, azVals, azCols) ){
    100           rc = SQLITE_ABORT;
    101           sqlite3VdbeFinalize((Vdbe *)pStmt);
    102           pStmt = 0;
    103           sqlite3Error(db, SQLITE_ABORT, 0);
    104           goto exec_out;
    105         }
    106       }
    107 
    108       if( rc!=SQLITE_ROW ){
    109         rc = sqlite3VdbeFinalize((Vdbe *)pStmt);
    110         pStmt = 0;
    111         if( rc!=SQLITE_SCHEMA ){
    112           nRetry = 0;
    113           zSql = zLeftover;
    114           while( sqlite3Isspace(zSql[0]) ) zSql++;
    115         }
    116         break;
    117       }
    118     }
    119 
    120     sqlite3DbFree(db, azCols);
    121     azCols = 0;
    122   }
    123 
    124 exec_out:
    125   if( pStmt ) sqlite3VdbeFinalize((Vdbe *)pStmt);
    126   sqlite3DbFree(db, azCols);
    127 
    128   rc = sqlite3ApiExit(db, rc);
    129   if( rc!=SQLITE_OK && ALWAYS(rc==sqlite3_errcode(db)) && pzErrMsg ){
    130     int nErrMsg = 1 + sqlite3Strlen30(sqlite3_errmsg(db));
    131     *pzErrMsg = sqlite3Malloc(nErrMsg);
    132     if( *pzErrMsg ){
    133       memcpy(*pzErrMsg, sqlite3_errmsg(db), nErrMsg);
    134     }else{
    135       rc = SQLITE_NOMEM;
    136       sqlite3Error(db, SQLITE_NOMEM, 0);
    137     }
    138   }else if( pzErrMsg ){
    139     *pzErrMsg = 0;
    140   }
    141 
    142   assert( (rc&db->errMask)==rc );
    143   sqlite3_mutex_leave(db->mutex);
    144   return rc;
    145 }
    146