prepare.c.svn-base
上传用户:sunhongbo
上传日期:2022-01-25
资源大小:3010k
文件大小:25k
源码类别:

数据库系统

开发平台:

C/C++

  1. /*
  2. ** 2005 May 25
  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. ** This file contains the implementation of the sqlite3_prepare()
  13. ** interface, and routines that contribute to loading the database schema
  14. ** from disk.
  15. **
  16. ** $Id: prepare.c,v 1.83 2008/04/03 14:36:26 danielk1977 Exp $
  17. */
  18. #include "sqliteInt.h"
  19. #include <ctype.h>
  20. /*
  21. ** Fill the InitData structure with an error message that indicates
  22. ** that the database is corrupt.
  23. */
  24. static void corruptSchema(
  25.   InitData *pData,     /* Initialization context */
  26.   const char *zObj,    /* Object being parsed at the point of error */
  27.   const char *zExtra   /* Error information */
  28. ){
  29.   if( !pData->db->mallocFailed ){
  30.     if( zObj==0 ) zObj = "?";
  31.     sqlite3SetString(pData->pzErrMsg, "malformed database schema (",  zObj, ")",
  32.        zExtra!=0 && zExtra[0]!=0 ? " - " : (char*)0, zExtra, (char*)0);
  33.   }
  34.   pData->rc = SQLITE_CORRUPT;
  35. }
  36. /*
  37. ** This is the callback routine for the code that initializes the
  38. ** database.  See sqlite3Init() below for additional information.
  39. ** This routine is also called from the OP_ParseSchema opcode of the VDBE.
  40. **
  41. ** Each callback contains the following information:
  42. **
  43. **     argv[0] = name of thing being created
  44. **     argv[1] = root page number for table or index. 0 for trigger or view.
  45. **     argv[2] = SQL text for the CREATE statement.
  46. **
  47. */
  48. int sqlite3InitCallback(void *pInit, int argc, char **argv, char **azColName){
  49.   InitData *pData = (InitData*)pInit;
  50.   sqlite3 *db = pData->db;
  51.   int iDb = pData->iDb;
  52.   assert( sqlite3_mutex_held(db->mutex) );
  53.   pData->rc = SQLITE_OK;
  54.   DbClearProperty(db, iDb, DB_Empty);
  55.   if( db->mallocFailed ){
  56.     corruptSchema(pData, argv[0], 0);
  57.     return SQLITE_NOMEM;
  58.   }
  59.   assert( argc==3 );
  60.   if( argv==0 ) return 0;   /* Might happen if EMPTY_RESULT_CALLBACKS are on */
  61.   if( argv[1]==0 ){
  62.     corruptSchema(pData, argv[0], 0);
  63.     return 1;
  64.   }
  65.   assert( iDb>=0 && iDb<db->nDb );
  66.   if( argv[2] && argv[2][0] ){
  67.     /* Call the parser to process a CREATE TABLE, INDEX or VIEW.
  68.     ** But because db->init.busy is set to 1, no VDBE code is generated
  69.     ** or executed.  All the parser does is build the internal data
  70.     ** structures that describe the table, index, or view.
  71.     */
  72.     char *zErr;
  73.     int rc;
  74.     assert( db->init.busy );
  75.     db->init.iDb = iDb;
  76.     db->init.newTnum = atoi(argv[1]);
  77.     rc = sqlite3_exec(db, argv[2], 0, 0, &zErr);
  78.     db->init.iDb = 0;
  79.     assert( rc!=SQLITE_OK || zErr==0 );
  80.     if( SQLITE_OK!=rc ){
  81.       pData->rc = rc;
  82.       if( rc==SQLITE_NOMEM ){
  83.         db->mallocFailed = 1;
  84.       }else if( rc!=SQLITE_INTERRUPT ){
  85.         corruptSchema(pData, argv[0], zErr);
  86.       }
  87.       sqlite3_free(zErr);
  88.       return 1;
  89.     }
  90.   }else if( argv[0]==0 ){
  91.     corruptSchema(pData, 0, 0);
  92.   }else{
  93.     /* If the SQL column is blank it means this is an index that
  94.     ** was created to be the PRIMARY KEY or to fulfill a UNIQUE
  95.     ** constraint for a CREATE TABLE.  The index should have already
  96.     ** been created when we processed the CREATE TABLE.  All we have
  97.     ** to do here is record the root page number for that index.
  98.     */
  99.     Index *pIndex;
  100.     pIndex = sqlite3FindIndex(db, argv[0], db->aDb[iDb].zName);
  101.     if( pIndex==0 || pIndex->tnum!=0 ){
  102.       /* This can occur if there exists an index on a TEMP table which
  103.       ** has the same name as another index on a permanent index.  Since
  104.       ** the permanent table is hidden by the TEMP table, we can also
  105.       ** safely ignore the index on the permanent table.
  106.       */
  107.       /* Do Nothing */;
  108.     }else{
  109.       pIndex->tnum = atoi(argv[1]);
  110.     }
  111.   }
  112.   return 0;
  113. }
  114. /*
  115. ** Attempt to read the database schema and initialize internal
  116. ** data structures for a single database file.  The index of the
  117. ** database file is given by iDb.  iDb==0 is used for the main
  118. ** database.  iDb==1 should never be used.  iDb>=2 is used for
  119. ** auxiliary databases.  Return one of the SQLITE_ error codes to
  120. ** indicate success or failure.
  121. */
  122. static int sqlite3InitOne(sqlite3 *db, int iDb, char **pzErrMsg){
  123.   int rc;
  124.   BtCursor *curMain;
  125.   int size;
  126.   Table *pTab;
  127.   Db *pDb;
  128.   char const *azArg[4];
  129.   int meta[10];
  130.   InitData initData;
  131.   char const *zMasterSchema;
  132.   char const *zMasterName = SCHEMA_TABLE(iDb);
  133.   /*
  134.   ** The master database table has a structure like this
  135.   */
  136.   static const char master_schema[] = 
  137.      "CREATE TABLE sqlite_master(n"
  138.      "  type text,n"
  139.      "  name text,n"
  140.      "  tbl_name text,n"
  141.      "  rootpage integer,n"
  142.      "  sql textn"
  143.      ")"
  144.   ;
  145. #ifndef SQLITE_OMIT_TEMPDB
  146.   static const char temp_master_schema[] = 
  147.      "CREATE TEMP TABLE sqlite_temp_master(n"
  148.      "  type text,n"
  149.      "  name text,n"
  150.      "  tbl_name text,n"
  151.      "  rootpage integer,n"
  152.      "  sql textn"
  153.      ")"
  154.   ;
  155. #else
  156.   #define temp_master_schema 0
  157. #endif
  158.   assert( iDb>=0 && iDb<db->nDb );
  159.   assert( db->aDb[iDb].pSchema );
  160.   assert( sqlite3_mutex_held(db->mutex) );
  161.   assert( iDb==1 || sqlite3BtreeHoldsMutex(db->aDb[iDb].pBt) );
  162.   /* zMasterSchema and zInitScript are set to point at the master schema
  163.   ** and initialisation script appropriate for the database being
  164.   ** initialised. zMasterName is the name of the master table.
  165.   */
  166.   if( !OMIT_TEMPDB && iDb==1 ){
  167.     zMasterSchema = temp_master_schema;
  168.   }else{
  169.     zMasterSchema = master_schema;
  170.   }
  171.   zMasterName = SCHEMA_TABLE(iDb);
  172.   /* Construct the schema tables.  */
  173.   azArg[0] = zMasterName;
  174.   azArg[1] = "1";
  175.   azArg[2] = zMasterSchema;
  176.   azArg[3] = 0;
  177.   initData.db = db;
  178.   initData.iDb = iDb;
  179.   initData.pzErrMsg = pzErrMsg;
  180.   (void)sqlite3SafetyOff(db);
  181.   rc = sqlite3InitCallback(&initData, 3, (char **)azArg, 0);
  182.   (void)sqlite3SafetyOn(db);
  183.   if( rc ){
  184.     rc = initData.rc;
  185.     goto error_out;
  186.   }
  187.   pTab = sqlite3FindTable(db, zMasterName, db->aDb[iDb].zName);
  188.   if( pTab ){
  189.     pTab->readOnly = 1;
  190.   }
  191.   /* Create a cursor to hold the database open
  192.   */
  193.   pDb = &db->aDb[iDb];
  194.   if( pDb->pBt==0 ){
  195.     if( !OMIT_TEMPDB && iDb==1 ){
  196.       DbSetProperty(db, 1, DB_SchemaLoaded);
  197.     }
  198.     return SQLITE_OK;
  199.   }
  200.   curMain = sqlite3MallocZero(sqlite3BtreeCursorSize());
  201.   if( !curMain ){
  202.     rc = SQLITE_NOMEM;
  203.     goto error_out;
  204.   }
  205.   sqlite3BtreeEnter(pDb->pBt);
  206.   rc = sqlite3BtreeCursor(pDb->pBt, MASTER_ROOT, 0, 0, curMain);
  207.   if( rc!=SQLITE_OK && rc!=SQLITE_EMPTY ){
  208.     sqlite3SetString(pzErrMsg, sqlite3ErrStr(rc), (char*)0);
  209.     goto leave_error_out;
  210.   }
  211.   /* Get the database meta information.
  212.   **
  213.   ** Meta values are as follows:
  214.   **    meta[0]   Schema cookie.  Changes with each schema change.
  215.   **    meta[1]   File format of schema layer.
  216.   **    meta[2]   Size of the page cache.
  217.   **    meta[3]   Use freelist if 0.  Autovacuum if greater than zero.
  218.   **    meta[4]   Db text encoding. 1:UTF-8 2:UTF-16LE 3:UTF-16BE
  219.   **    meta[5]   The user cookie. Used by the application.
  220.   **    meta[6]   Incremental-vacuum flag.
  221.   **    meta[7]
  222.   **    meta[8]
  223.   **    meta[9]
  224.   **
  225.   ** Note: The #defined SQLITE_UTF* symbols in sqliteInt.h correspond to
  226.   ** the possible values of meta[4].
  227.   */
  228.   if( rc==SQLITE_OK ){
  229.     int i;
  230.     for(i=0; rc==SQLITE_OK && i<sizeof(meta)/sizeof(meta[0]); i++){
  231.       rc = sqlite3BtreeGetMeta(pDb->pBt, i+1, (u32 *)&meta[i]);
  232.     }
  233.     if( rc ){
  234.       sqlite3SetString(pzErrMsg, sqlite3ErrStr(rc), (char*)0);
  235.       goto leave_error_out;
  236.     }
  237.   }else{
  238.     memset(meta, 0, sizeof(meta));
  239.   }
  240.   pDb->pSchema->schema_cookie = meta[0];
  241.   /* If opening a non-empty database, check the text encoding. For the
  242.   ** main database, set sqlite3.enc to the encoding of the main database.
  243.   ** For an attached db, it is an error if the encoding is not the same
  244.   ** as sqlite3.enc.
  245.   */
  246.   if( meta[4] ){  /* text encoding */
  247.     if( iDb==0 ){
  248.       /* If opening the main database, set ENC(db). */
  249.       ENC(db) = (u8)meta[4];
  250.       db->pDfltColl = sqlite3FindCollSeq(db, SQLITE_UTF8, "BINARY", 6, 0);
  251.     }else{
  252.       /* If opening an attached database, the encoding much match ENC(db) */
  253.       if( meta[4]!=ENC(db) ){
  254.         sqlite3SetString(pzErrMsg, "attached databases must use the same"
  255.             " text encoding as main database", (char*)0);
  256.         rc = SQLITE_ERROR;
  257.         goto leave_error_out;
  258.       }
  259.     }
  260.   }else{
  261.     DbSetProperty(db, iDb, DB_Empty);
  262.   }
  263.   pDb->pSchema->enc = ENC(db);
  264.   size = meta[2];
  265.   if( size==0 ){ size = SQLITE_DEFAULT_CACHE_SIZE; }
  266.   if( size<0 ) size = -size;
  267.   pDb->pSchema->cache_size = size;
  268.   sqlite3BtreeSetCacheSize(pDb->pBt, pDb->pSchema->cache_size);
  269.   /*
  270.   ** file_format==1    Version 3.0.0.
  271.   ** file_format==2    Version 3.1.3.  // ALTER TABLE ADD COLUMN
  272.   ** file_format==3    Version 3.1.4.  // ditto but with non-NULL defaults
  273.   ** file_format==4    Version 3.3.0.  // DESC indices.  Boolean constants
  274.   */
  275.   pDb->pSchema->file_format = meta[1];
  276.   if( pDb->pSchema->file_format==0 ){
  277.     pDb->pSchema->file_format = 1;
  278.   }
  279.   if( pDb->pSchema->file_format>SQLITE_MAX_FILE_FORMAT ){
  280.     sqlite3SetString(pzErrMsg, "unsupported file format", (char*)0);
  281.     rc = SQLITE_ERROR;
  282.     goto leave_error_out;
  283.   }
  284.   /* Ticket #2804:  When we open a database in the newer file format,
  285.   ** clear the legacy_file_format pragma flag so that a VACUUM will
  286.   ** not downgrade the database and thus invalidate any descending
  287.   ** indices that the user might have created.
  288.   */
  289.   if( iDb==0 && meta[1]>=4 ){
  290.     db->flags &= ~SQLITE_LegacyFileFmt;
  291.   }
  292.   /* Read the schema information out of the schema tables
  293.   */
  294.   assert( db->init.busy );
  295.   if( rc==SQLITE_EMPTY ){
  296.     /* For an empty database, there is nothing to read */
  297.     rc = SQLITE_OK;
  298.   }else{
  299.     char *zSql;
  300.     zSql = sqlite3MPrintf(db, 
  301.         "SELECT name, rootpage, sql FROM '%q'.%s",
  302.         db->aDb[iDb].zName, zMasterName);
  303.     (void)sqlite3SafetyOff(db);
  304. #ifndef SQLITE_OMIT_AUTHORIZATION
  305.     {
  306.       int (*xAuth)(void*,int,const char*,const char*,const char*,const char*);
  307.       xAuth = db->xAuth;
  308.       db->xAuth = 0;
  309. #endif
  310.       rc = sqlite3_exec(db, zSql, sqlite3InitCallback, &initData, 0);
  311. #ifndef SQLITE_OMIT_AUTHORIZATION
  312.       db->xAuth = xAuth;
  313.     }
  314. #endif
  315.     if( rc==SQLITE_ABORT ) rc = initData.rc;
  316.     (void)sqlite3SafetyOn(db);
  317.     sqlite3_free(zSql);
  318. #ifndef SQLITE_OMIT_ANALYZE
  319.     if( rc==SQLITE_OK ){
  320.       sqlite3AnalysisLoad(db, iDb);
  321.     }
  322. #endif
  323.   }
  324.   if( db->mallocFailed ){
  325.     /* sqlite3SetString(pzErrMsg, "out of memory", (char*)0); */
  326.     rc = SQLITE_NOMEM;
  327.     sqlite3ResetInternalSchema(db, 0);
  328.   }
  329.   if( rc==SQLITE_OK || (db->flags&SQLITE_RecoveryMode)){
  330.     /* Black magic: If the SQLITE_RecoveryMode flag is set, then consider
  331.     ** the schema loaded, even if errors occured. In this situation the 
  332.     ** current sqlite3_prepare() operation will fail, but the following one
  333.     ** will attempt to compile the supplied statement against whatever subset
  334.     ** of the schema was loaded before the error occured. The primary
  335.     ** purpose of this is to allow access to the sqlite_master table
  336.     ** even when its contents have been corrupted.
  337.     */
  338.     DbSetProperty(db, iDb, DB_SchemaLoaded);
  339.     rc = SQLITE_OK;
  340.   }
  341.   /* Jump here for an error that occurs after successfully allocating
  342.   ** curMain and calling sqlite3BtreeEnter(). For an error that occurs
  343.   ** before that point, jump to error_out.
  344.   */
  345. leave_error_out:
  346.   sqlite3BtreeCloseCursor(curMain);
  347.   sqlite3_free(curMain);
  348.   sqlite3BtreeLeave(pDb->pBt);
  349. error_out:
  350.   if( rc==SQLITE_NOMEM || rc==SQLITE_IOERR_NOMEM ){
  351.     db->mallocFailed = 1;
  352.   }
  353.   return rc;
  354. }
  355. /*
  356. ** Initialize all database files - the main database file, the file
  357. ** used to store temporary tables, and any additional database files
  358. ** created using ATTACH statements.  Return a success code.  If an
  359. ** error occurs, write an error message into *pzErrMsg.
  360. **
  361. ** After a database is initialized, the DB_SchemaLoaded bit is set
  362. ** bit is set in the flags field of the Db structure. If the database
  363. ** file was of zero-length, then the DB_Empty flag is also set.
  364. */
  365. int sqlite3Init(sqlite3 *db, char **pzErrMsg){
  366.   int i, rc;
  367.   int commit_internal = !(db->flags&SQLITE_InternChanges);
  368.   
  369.   assert( sqlite3_mutex_held(db->mutex) );
  370.   if( db->init.busy ) return SQLITE_OK;
  371.   rc = SQLITE_OK;
  372.   db->init.busy = 1;
  373.   for(i=0; rc==SQLITE_OK && i<db->nDb; i++){
  374.     if( DbHasProperty(db, i, DB_SchemaLoaded) || i==1 ) continue;
  375.     rc = sqlite3InitOne(db, i, pzErrMsg);
  376.     if( rc ){
  377.       sqlite3ResetInternalSchema(db, i);
  378.     }
  379.   }
  380.   /* Once all the other databases have been initialised, load the schema
  381.   ** for the TEMP database. This is loaded last, as the TEMP database
  382.   ** schema may contain references to objects in other databases.
  383.   */
  384. #ifndef SQLITE_OMIT_TEMPDB
  385.   if( rc==SQLITE_OK && db->nDb>1 && !DbHasProperty(db, 1, DB_SchemaLoaded) ){
  386.     rc = sqlite3InitOne(db, 1, pzErrMsg);
  387.     if( rc ){
  388.       sqlite3ResetInternalSchema(db, 1);
  389.     }
  390.   }
  391. #endif
  392.   db->init.busy = 0;
  393.   if( rc==SQLITE_OK && commit_internal ){
  394.     sqlite3CommitInternalChanges(db);
  395.   }
  396.   return rc; 
  397. }
  398. /*
  399. ** This routine is a no-op if the database schema is already initialised.
  400. ** Otherwise, the schema is loaded. An error code is returned.
  401. */
  402. int sqlite3ReadSchema(Parse *pParse){
  403.   int rc = SQLITE_OK;
  404.   sqlite3 *db = pParse->db;
  405.   assert( sqlite3_mutex_held(db->mutex) );
  406.   if( !db->init.busy ){
  407.     rc = sqlite3Init(db, &pParse->zErrMsg);
  408.   }
  409.   if( rc!=SQLITE_OK ){
  410.     pParse->rc = rc;
  411.     pParse->nErr++;
  412.   }
  413.   return rc;
  414. }
  415. /*
  416. ** Check schema cookies in all databases.  If any cookie is out
  417. ** of date, return 0.  If all schema cookies are current, return 1.
  418. */
  419. static int schemaIsValid(sqlite3 *db){
  420.   int iDb;
  421.   int rc;
  422.   BtCursor *curTemp;
  423.   int cookie;
  424.   int allOk = 1;
  425.   curTemp = (BtCursor *)sqlite3_malloc(sqlite3BtreeCursorSize());
  426.   if( curTemp ){
  427.     assert( sqlite3_mutex_held(db->mutex) );
  428.     for(iDb=0; allOk && iDb<db->nDb; iDb++){
  429.       Btree *pBt;
  430.       pBt = db->aDb[iDb].pBt;
  431.       if( pBt==0 ) continue;
  432.       memset(curTemp, 0, sqlite3BtreeCursorSize());
  433.       rc = sqlite3BtreeCursor(pBt, MASTER_ROOT, 0, 0, curTemp);
  434.       if( rc==SQLITE_OK ){
  435.         rc = sqlite3BtreeGetMeta(pBt, 1, (u32 *)&cookie);
  436.         if( rc==SQLITE_OK && cookie!=db->aDb[iDb].pSchema->schema_cookie ){
  437.           allOk = 0;
  438.         }
  439.         sqlite3BtreeCloseCursor(curTemp);
  440.       }
  441.       if( rc==SQLITE_NOMEM || rc==SQLITE_IOERR_NOMEM ){
  442.         db->mallocFailed = 1;
  443.       }
  444.     }
  445.     sqlite3_free(curTemp);
  446.   }else{
  447.     allOk = 0;
  448.     db->mallocFailed = 1;
  449.   }
  450.   return allOk;
  451. }
  452. /*
  453. ** Convert a schema pointer into the iDb index that indicates
  454. ** which database file in db->aDb[] the schema refers to.
  455. **
  456. ** If the same database is attached more than once, the first
  457. ** attached database is returned.
  458. */
  459. int sqlite3SchemaToIndex(sqlite3 *db, Schema *pSchema){
  460.   int i = -1000000;
  461.   /* If pSchema is NULL, then return -1000000. This happens when code in 
  462.   ** expr.c is trying to resolve a reference to a transient table (i.e. one
  463.   ** created by a sub-select). In this case the return value of this 
  464.   ** function should never be used.
  465.   **
  466.   ** We return -1000000 instead of the more usual -1 simply because using
  467.   ** -1000000 as incorrectly using -1000000 index into db->aDb[] is much 
  468.   ** more likely to cause a segfault than -1 (of course there are assert()
  469.   ** statements too, but it never hurts to play the odds).
  470.   */
  471.   assert( sqlite3_mutex_held(db->mutex) );
  472.   if( pSchema ){
  473.     for(i=0; i<db->nDb; i++){
  474.       if( db->aDb[i].pSchema==pSchema ){
  475.         break;
  476.       }
  477.     }
  478.     assert( i>=0 &&i>=0 &&  i<db->nDb );
  479.   }
  480.   return i;
  481. }
  482. /*
  483. ** Compile the UTF-8 encoded SQL statement zSql into a statement handle.
  484. */
  485. static int sqlite3Prepare(
  486.   sqlite3 *db,              /* Database handle. */
  487.   const char *zSql,         /* UTF-8 encoded SQL statement. */
  488.   int nBytes,               /* Length of zSql in bytes. */
  489.   int saveSqlFlag,          /* True to copy SQL text into the sqlite3_stmt */
  490.   sqlite3_stmt **ppStmt,    /* OUT: A pointer to the prepared statement */
  491.   const char **pzTail       /* OUT: End of parsed string */
  492. ){
  493.   Parse sParse;
  494.   char *zErrMsg = 0;
  495.   int rc = SQLITE_OK;
  496.   int i;
  497.   assert( ppStmt );
  498.   *ppStmt = 0;
  499.   if( sqlite3SafetyOn(db) ){
  500.     return SQLITE_MISUSE;
  501.   }
  502.   assert( !db->mallocFailed );
  503.   assert( sqlite3_mutex_held(db->mutex) );
  504.   /* If any attached database schemas are locked, do not proceed with
  505.   ** compilation. Instead return SQLITE_LOCKED immediately.
  506.   */
  507.   for(i=0; i<db->nDb; i++) {
  508.     Btree *pBt = db->aDb[i].pBt;
  509.     if( pBt ){
  510.       int rc;
  511.       rc = sqlite3BtreeSchemaLocked(pBt);
  512.       if( rc ){
  513.         const char *zDb = db->aDb[i].zName;
  514.         sqlite3Error(db, SQLITE_LOCKED, "database schema is locked: %s", zDb);
  515.         (void)sqlite3SafetyOff(db);
  516.         return SQLITE_LOCKED;
  517.       }
  518.     }
  519.   }
  520.   
  521.   memset(&sParse, 0, sizeof(sParse));
  522.   sParse.db = db;
  523.   if( nBytes>=0 && zSql[nBytes-1]!=0 ){
  524.     char *zSqlCopy;
  525.     int mxLen = db->aLimit[SQLITE_LIMIT_SQL_LENGTH];
  526.     if( nBytes>mxLen ){
  527.       sqlite3Error(db, SQLITE_TOOBIG, "statement too long");
  528.       (void)sqlite3SafetyOff(db);
  529.       return SQLITE_TOOBIG;
  530.     }
  531.     zSqlCopy = sqlite3DbStrNDup(db, zSql, nBytes);
  532.     if( zSqlCopy ){
  533.       sqlite3RunParser(&sParse, zSqlCopy, &zErrMsg);
  534.       sqlite3_free(zSqlCopy);
  535.       sParse.zTail = &zSql[sParse.zTail-zSqlCopy];
  536.     }else{
  537.       sParse.zTail = &zSql[nBytes];
  538.     }
  539.   }else{
  540.     sqlite3RunParser(&sParse, zSql, &zErrMsg);
  541.   }
  542.   if( db->mallocFailed ){
  543.     sParse.rc = SQLITE_NOMEM;
  544.   }
  545.   if( sParse.rc==SQLITE_DONE ) sParse.rc = SQLITE_OK;
  546.   if( sParse.checkSchema && !schemaIsValid(db) ){
  547.     sParse.rc = SQLITE_SCHEMA;
  548.   }
  549.   if( sParse.rc==SQLITE_SCHEMA ){
  550.     sqlite3ResetInternalSchema(db, 0);
  551.   }
  552.   if( db->mallocFailed ){
  553.     sParse.rc = SQLITE_NOMEM;
  554.   }
  555.   if( pzTail ){
  556.     *pzTail = sParse.zTail;
  557.   }
  558.   rc = sParse.rc;
  559. #ifndef SQLITE_OMIT_EXPLAIN
  560.   if( rc==SQLITE_OK && sParse.pVdbe && sParse.explain ){
  561.     if( sParse.explain==2 ){
  562.       sqlite3VdbeSetNumCols(sParse.pVdbe, 3);
  563.       sqlite3VdbeSetColName(sParse.pVdbe, 0, COLNAME_NAME, "order", P4_STATIC);
  564.       sqlite3VdbeSetColName(sParse.pVdbe, 1, COLNAME_NAME, "from", P4_STATIC);
  565.       sqlite3VdbeSetColName(sParse.pVdbe, 2, COLNAME_NAME, "detail", P4_STATIC);
  566.     }else{
  567.       sqlite3VdbeSetNumCols(sParse.pVdbe, 8);
  568.       sqlite3VdbeSetColName(sParse.pVdbe, 0, COLNAME_NAME, "addr", P4_STATIC);
  569.       sqlite3VdbeSetColName(sParse.pVdbe, 1, COLNAME_NAME, "opcode", P4_STATIC);
  570.       sqlite3VdbeSetColName(sParse.pVdbe, 2, COLNAME_NAME, "p1", P4_STATIC);
  571.       sqlite3VdbeSetColName(sParse.pVdbe, 3, COLNAME_NAME, "p2", P4_STATIC);
  572.       sqlite3VdbeSetColName(sParse.pVdbe, 4, COLNAME_NAME, "p3", P4_STATIC);
  573.       sqlite3VdbeSetColName(sParse.pVdbe, 5, COLNAME_NAME, "p4", P4_STATIC);
  574.       sqlite3VdbeSetColName(sParse.pVdbe, 6, COLNAME_NAME, "p5", P4_STATIC);
  575.       sqlite3VdbeSetColName(sParse.pVdbe, 7, COLNAME_NAME, "comment",P4_STATIC);
  576.     }
  577.   }
  578. #endif
  579.   if( sqlite3SafetyOff(db) ){
  580.     rc = SQLITE_MISUSE;
  581.   }
  582.   if( saveSqlFlag ){
  583.     sqlite3VdbeSetSql(sParse.pVdbe, zSql, sParse.zTail - zSql);
  584.   }
  585.   if( rc!=SQLITE_OK || db->mallocFailed ){
  586.     sqlite3_finalize((sqlite3_stmt*)sParse.pVdbe);
  587.     assert(!(*ppStmt));
  588.   }else{
  589.     *ppStmt = (sqlite3_stmt*)sParse.pVdbe;
  590.   }
  591.   if( zErrMsg ){
  592.     sqlite3Error(db, rc, "%s", zErrMsg);
  593.     sqlite3_free(zErrMsg);
  594.   }else{
  595.     sqlite3Error(db, rc, 0);
  596.   }
  597.   rc = sqlite3ApiExit(db, rc);
  598.   assert( (rc&db->errMask)==rc );
  599.   return rc;
  600. }
  601. static int sqlite3LockAndPrepare(
  602.   sqlite3 *db,              /* Database handle. */
  603.   const char *zSql,         /* UTF-8 encoded SQL statement. */
  604.   int nBytes,               /* Length of zSql in bytes. */
  605.   int saveSqlFlag,          /* True to copy SQL text into the sqlite3_stmt */
  606.   sqlite3_stmt **ppStmt,    /* OUT: A pointer to the prepared statement */
  607.   const char **pzTail       /* OUT: End of parsed string */
  608. ){
  609.   int rc;
  610.   if( !sqlite3SafetyCheckOk(db) ){
  611.     return SQLITE_MISUSE;
  612.   }
  613.   sqlite3_mutex_enter(db->mutex);
  614.   sqlite3BtreeEnterAll(db);
  615.   rc = sqlite3Prepare(db, zSql, nBytes, saveSqlFlag, ppStmt, pzTail);
  616.   sqlite3BtreeLeaveAll(db);
  617.   sqlite3_mutex_leave(db->mutex);
  618.   return rc;
  619. }
  620. /*
  621. ** Rerun the compilation of a statement after a schema change.
  622. ** Return true if the statement was recompiled successfully.
  623. ** Return false if there is an error of some kind.
  624. */
  625. int sqlite3Reprepare(Vdbe *p){
  626.   int rc;
  627.   sqlite3_stmt *pNew;
  628.   const char *zSql;
  629.   sqlite3 *db;
  630.   assert( sqlite3_mutex_held(sqlite3VdbeDb(p)->mutex) );
  631.   zSql = sqlite3_sql((sqlite3_stmt *)p);
  632.   assert( zSql!=0 );  /* Reprepare only called for prepare_v2() statements */
  633.   db = sqlite3VdbeDb(p);
  634.   assert( sqlite3_mutex_held(db->mutex) );
  635.   rc = sqlite3LockAndPrepare(db, zSql, -1, 0, &pNew, 0);
  636.   if( rc ){
  637.     if( rc==SQLITE_NOMEM ){
  638.       db->mallocFailed = 1;
  639.     }
  640.     assert( pNew==0 );
  641.     return 0;
  642.   }else{
  643.     assert( pNew!=0 );
  644.   }
  645.   sqlite3VdbeSwap((Vdbe*)pNew, p);
  646.   sqlite3_transfer_bindings(pNew, (sqlite3_stmt*)p);
  647.   sqlite3VdbeResetStepResult((Vdbe*)pNew);
  648.   sqlite3VdbeFinalize((Vdbe*)pNew);
  649.   return 1;
  650. }
  651. /*
  652. ** Two versions of the official API.  Legacy and new use.  In the legacy
  653. ** version, the original SQL text is not saved in the prepared statement
  654. ** and so if a schema change occurs, SQLITE_SCHEMA is returned by
  655. ** sqlite3_step().  In the new version, the original SQL text is retained
  656. ** and the statement is automatically recompiled if an schema change
  657. ** occurs.
  658. */
  659. int sqlite3_prepare(
  660.   sqlite3 *db,              /* Database handle. */
  661.   const char *zSql,         /* UTF-8 encoded SQL statement. */
  662.   int nBytes,               /* Length of zSql in bytes. */
  663.   sqlite3_stmt **ppStmt,    /* OUT: A pointer to the prepared statement */
  664.   const char **pzTail       /* OUT: End of parsed string */
  665. ){
  666.   int rc;
  667.   rc = sqlite3LockAndPrepare(db,zSql,nBytes,0,ppStmt,pzTail);
  668.   assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 );  /* VERIFY: F13021 */
  669.   return rc;
  670. }
  671. int sqlite3_prepare_v2(
  672.   sqlite3 *db,              /* Database handle. */
  673.   const char *zSql,         /* UTF-8 encoded SQL statement. */
  674.   int nBytes,               /* Length of zSql in bytes. */
  675.   sqlite3_stmt **ppStmt,    /* OUT: A pointer to the prepared statement */
  676.   const char **pzTail       /* OUT: End of parsed string */
  677. ){
  678.   int rc;
  679.   rc = sqlite3LockAndPrepare(db,zSql,nBytes,1,ppStmt,pzTail);
  680.   assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 );  /* VERIFY: F13021 */
  681.   return rc;
  682. }
  683. #ifndef SQLITE_OMIT_UTF16
  684. /*
  685. ** Compile the UTF-16 encoded SQL statement zSql into a statement handle.
  686. */
  687. static int sqlite3Prepare16(
  688.   sqlite3 *db,              /* Database handle. */ 
  689.   const void *zSql,         /* UTF-8 encoded SQL statement. */
  690.   int nBytes,               /* Length of zSql in bytes. */
  691.   int saveSqlFlag,          /* True to save SQL text into the sqlite3_stmt */
  692.   sqlite3_stmt **ppStmt,    /* OUT: A pointer to the prepared statement */
  693.   const void **pzTail       /* OUT: End of parsed string */
  694. ){
  695.   /* This function currently works by first transforming the UTF-16
  696.   ** encoded string to UTF-8, then invoking sqlite3_prepare(). The
  697.   ** tricky bit is figuring out the pointer to return in *pzTail.
  698.   */
  699.   char *zSql8;
  700.   const char *zTail8 = 0;
  701.   int rc = SQLITE_OK;
  702.   if( !sqlite3SafetyCheckOk(db) ){
  703.     return SQLITE_MISUSE;
  704.   }
  705.   sqlite3_mutex_enter(db->mutex);
  706.   zSql8 = sqlite3Utf16to8(db, zSql, nBytes);
  707.   if( zSql8 ){
  708.     rc = sqlite3LockAndPrepare(db, zSql8, -1, saveSqlFlag, ppStmt, &zTail8);
  709.   }
  710.   if( zTail8 && pzTail ){
  711.     /* If sqlite3_prepare returns a tail pointer, we calculate the
  712.     ** equivalent pointer into the UTF-16 string by counting the unicode
  713.     ** characters between zSql8 and zTail8, and then returning a pointer
  714.     ** the same number of characters into the UTF-16 string.
  715.     */
  716.     int chars_parsed = sqlite3Utf8CharLen(zSql8, zTail8-zSql8);
  717.     *pzTail = (u8 *)zSql + sqlite3Utf16ByteLen(zSql, chars_parsed);
  718.   }
  719.   sqlite3_free(zSql8); 
  720.   rc = sqlite3ApiExit(db, rc);
  721.   sqlite3_mutex_leave(db->mutex);
  722.   return rc;
  723. }
  724. /*
  725. ** Two versions of the official API.  Legacy and new use.  In the legacy
  726. ** version, the original SQL text is not saved in the prepared statement
  727. ** and so if a schema change occurs, SQLITE_SCHEMA is returned by
  728. ** sqlite3_step().  In the new version, the original SQL text is retained
  729. ** and the statement is automatically recompiled if an schema change
  730. ** occurs.
  731. */
  732. int sqlite3_prepare16(
  733.   sqlite3 *db,              /* Database handle. */ 
  734.   const void *zSql,         /* UTF-8 encoded SQL statement. */
  735.   int nBytes,               /* Length of zSql in bytes. */
  736.   sqlite3_stmt **ppStmt,    /* OUT: A pointer to the prepared statement */
  737.   const void **pzTail       /* OUT: End of parsed string */
  738. ){
  739.   int rc;
  740.   rc = sqlite3Prepare16(db,zSql,nBytes,0,ppStmt,pzTail);
  741.   assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 );  /* VERIFY: F13021 */
  742.   return rc;
  743. }
  744. int sqlite3_prepare16_v2(
  745.   sqlite3 *db,              /* Database handle. */ 
  746.   const void *zSql,         /* UTF-8 encoded SQL statement. */
  747.   int nBytes,               /* Length of zSql in bytes. */
  748.   sqlite3_stmt **ppStmt,    /* OUT: A pointer to the prepared statement */
  749.   const void **pzTail       /* OUT: End of parsed string */
  750. ){
  751.   int rc;
  752.   rc = sqlite3Prepare16(db,zSql,nBytes,1,ppStmt,pzTail);
  753.   assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 );  /* VERIFY: F13021 */
  754.   return rc;
  755. }
  756. #endif /* SQLITE_OMIT_UTF16 */