modernc.org/cc@v1.0.1/v2/testdata/_sqlite/src/prepare.c (about)

     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  #include "sqliteInt.h"
    17  
    18  /*
    19  ** Fill the InitData structure with an error message that indicates
    20  ** that the database is corrupt.
    21  */
    22  static void corruptSchema(
    23    InitData *pData,     /* Initialization context */
    24    const char *zObj,    /* Object being parsed at the point of error */
    25    const char *zExtra   /* Error information */
    26  ){
    27    sqlite3 *db = pData->db;
    28    if( !db->mallocFailed && (db->flags & SQLITE_WriteSchema)==0 ){
    29      char *z;
    30      if( zObj==0 ) zObj = "?";
    31      z = sqlite3MPrintf(db, "malformed database schema (%s)", zObj);
    32      if( zExtra ) z = sqlite3MPrintf(db, "%z - %s", z, zExtra);
    33      sqlite3DbFree(db, *pData->pzErrMsg);
    34      *pData->pzErrMsg = z;
    35    }
    36    pData->rc = db->mallocFailed ? SQLITE_NOMEM_BKPT : SQLITE_CORRUPT_BKPT;
    37  }
    38  
    39  /*
    40  ** This is the callback routine for the code that initializes the
    41  ** database.  See sqlite3Init() below for additional information.
    42  ** This routine is also called from the OP_ParseSchema opcode of the VDBE.
    43  **
    44  ** Each callback contains the following information:
    45  **
    46  **     argv[0] = name of thing being created
    47  **     argv[1] = root page number for table or index. 0 for trigger or view.
    48  **     argv[2] = SQL text for the CREATE statement.
    49  **
    50  */
    51  int sqlite3InitCallback(void *pInit, int argc, char **argv, char **NotUsed){
    52    InitData *pData = (InitData*)pInit;
    53    sqlite3 *db = pData->db;
    54    int iDb = pData->iDb;
    55  
    56    assert( argc==3 );
    57    UNUSED_PARAMETER2(NotUsed, argc);
    58    assert( sqlite3_mutex_held(db->mutex) );
    59    DbClearProperty(db, iDb, DB_Empty);
    60    if( db->mallocFailed ){
    61      corruptSchema(pData, argv[0], 0);
    62      return 1;
    63    }
    64  
    65    assert( iDb>=0 && iDb<db->nDb );
    66    if( argv==0 ) return 0;   /* Might happen if EMPTY_RESULT_CALLBACKS are on */
    67    if( argv[1]==0 ){
    68      corruptSchema(pData, argv[0], 0);
    69    }else if( sqlite3_strnicmp(argv[2],"create ",7)==0 ){
    70      /* Call the parser to process a CREATE TABLE, INDEX or VIEW.
    71      ** But because db->init.busy is set to 1, no VDBE code is generated
    72      ** or executed.  All the parser does is build the internal data
    73      ** structures that describe the table, index, or view.
    74      */
    75      int rc;
    76      u8 saved_iDb = db->init.iDb;
    77      sqlite3_stmt *pStmt;
    78      TESTONLY(int rcp);            /* Return code from sqlite3_prepare() */
    79  
    80      assert( db->init.busy );
    81      db->init.iDb = iDb;
    82      db->init.newTnum = sqlite3Atoi(argv[1]);
    83      db->init.orphanTrigger = 0;
    84      TESTONLY(rcp = ) sqlite3_prepare(db, argv[2], -1, &pStmt, 0);
    85      rc = db->errCode;
    86      assert( (rc&0xFF)==(rcp&0xFF) );
    87      db->init.iDb = saved_iDb;
    88      assert( saved_iDb==0 || (db->mDbFlags & DBFLAG_Vacuum)!=0 );
    89      if( SQLITE_OK!=rc ){
    90        if( db->init.orphanTrigger ){
    91          assert( iDb==1 );
    92        }else{
    93          pData->rc = rc;
    94          if( rc==SQLITE_NOMEM ){
    95            sqlite3OomFault(db);
    96          }else if( rc!=SQLITE_INTERRUPT && (rc&0xFF)!=SQLITE_LOCKED ){
    97            corruptSchema(pData, argv[0], sqlite3_errmsg(db));
    98          }
    99        }
   100      }
   101      sqlite3_finalize(pStmt);
   102    }else if( argv[0]==0 || (argv[2]!=0 && argv[2][0]!=0) ){
   103      corruptSchema(pData, argv[0], 0);
   104    }else{
   105      /* If the SQL column is blank it means this is an index that
   106      ** was created to be the PRIMARY KEY or to fulfill a UNIQUE
   107      ** constraint for a CREATE TABLE.  The index should have already
   108      ** been created when we processed the CREATE TABLE.  All we have
   109      ** to do here is record the root page number for that index.
   110      */
   111      Index *pIndex;
   112      pIndex = sqlite3FindIndex(db, argv[0], db->aDb[iDb].zDbSName);
   113      if( pIndex==0 ){
   114        /* This can occur if there exists an index on a TEMP table which
   115        ** has the same name as another index on a permanent index.  Since
   116        ** the permanent table is hidden by the TEMP table, we can also
   117        ** safely ignore the index on the permanent table.
   118        */
   119        /* Do Nothing */;
   120      }else if( sqlite3GetInt32(argv[1], &pIndex->tnum)==0 ){
   121        corruptSchema(pData, argv[0], "invalid rootpage");
   122      }
   123    }
   124    return 0;
   125  }
   126  
   127  /*
   128  ** Attempt to read the database schema and initialize internal
   129  ** data structures for a single database file.  The index of the
   130  ** database file is given by iDb.  iDb==0 is used for the main
   131  ** database.  iDb==1 should never be used.  iDb>=2 is used for
   132  ** auxiliary databases.  Return one of the SQLITE_ error codes to
   133  ** indicate success or failure.
   134  */
   135  static int sqlite3InitOne(sqlite3 *db, int iDb, char **pzErrMsg){
   136    int rc;
   137    int i;
   138  #ifndef SQLITE_OMIT_DEPRECATED
   139    int size;
   140  #endif
   141    Db *pDb;
   142    char const *azArg[4];
   143    int meta[5];
   144    InitData initData;
   145    const char *zMasterName;
   146    int openedTransaction = 0;
   147  
   148    assert( iDb>=0 && iDb<db->nDb );
   149    assert( db->aDb[iDb].pSchema );
   150    assert( sqlite3_mutex_held(db->mutex) );
   151    assert( iDb==1 || sqlite3BtreeHoldsMutex(db->aDb[iDb].pBt) );
   152  
   153    db->init.busy = 1;
   154  
   155    /* Construct the in-memory representation schema tables (sqlite_master or
   156    ** sqlite_temp_master) by invoking the parser directly.  The appropriate
   157    ** table name will be inserted automatically by the parser so we can just
   158    ** use the abbreviation "x" here.  The parser will also automatically tag
   159    ** the schema table as read-only. */
   160    azArg[0] = zMasterName = SCHEMA_TABLE(iDb);
   161    azArg[1] = "1";
   162    azArg[2] = "CREATE TABLE x(type text,name text,tbl_name text,"
   163                              "rootpage int,sql text)";
   164    azArg[3] = 0;
   165    initData.db = db;
   166    initData.iDb = iDb;
   167    initData.rc = SQLITE_OK;
   168    initData.pzErrMsg = pzErrMsg;
   169    sqlite3InitCallback(&initData, 3, (char **)azArg, 0);
   170    if( initData.rc ){
   171      rc = initData.rc;
   172      goto error_out;
   173    }
   174  
   175    /* Create a cursor to hold the database open
   176    */
   177    pDb = &db->aDb[iDb];
   178    if( pDb->pBt==0 ){
   179      assert( iDb==1 );
   180      DbSetProperty(db, 1, DB_SchemaLoaded);
   181      rc = SQLITE_OK;
   182      goto error_out;
   183    }
   184  
   185    /* If there is not already a read-only (or read-write) transaction opened
   186    ** on the b-tree database, open one now. If a transaction is opened, it 
   187    ** will be closed before this function returns.  */
   188    sqlite3BtreeEnter(pDb->pBt);
   189    if( !sqlite3BtreeIsInReadTrans(pDb->pBt) ){
   190      rc = sqlite3BtreeBeginTrans(pDb->pBt, 0);
   191      if( rc!=SQLITE_OK ){
   192        sqlite3SetString(pzErrMsg, db, sqlite3ErrStr(rc));
   193        goto initone_error_out;
   194      }
   195      openedTransaction = 1;
   196    }
   197  
   198    /* Get the database meta information.
   199    **
   200    ** Meta values are as follows:
   201    **    meta[0]   Schema cookie.  Changes with each schema change.
   202    **    meta[1]   File format of schema layer.
   203    **    meta[2]   Size of the page cache.
   204    **    meta[3]   Largest rootpage (auto/incr_vacuum mode)
   205    **    meta[4]   Db text encoding. 1:UTF-8 2:UTF-16LE 3:UTF-16BE
   206    **    meta[5]   User version
   207    **    meta[6]   Incremental vacuum mode
   208    **    meta[7]   unused
   209    **    meta[8]   unused
   210    **    meta[9]   unused
   211    **
   212    ** Note: The #defined SQLITE_UTF* symbols in sqliteInt.h correspond to
   213    ** the possible values of meta[4].
   214    */
   215    for(i=0; i<ArraySize(meta); i++){
   216      sqlite3BtreeGetMeta(pDb->pBt, i+1, (u32 *)&meta[i]);
   217    }
   218    pDb->pSchema->schema_cookie = meta[BTREE_SCHEMA_VERSION-1];
   219  
   220    /* If opening a non-empty database, check the text encoding. For the
   221    ** main database, set sqlite3.enc to the encoding of the main database.
   222    ** For an attached db, it is an error if the encoding is not the same
   223    ** as sqlite3.enc.
   224    */
   225    if( meta[BTREE_TEXT_ENCODING-1] ){  /* text encoding */
   226      if( iDb==0 ){
   227  #ifndef SQLITE_OMIT_UTF16
   228        u8 encoding;
   229        /* If opening the main database, set ENC(db). */
   230        encoding = (u8)meta[BTREE_TEXT_ENCODING-1] & 3;
   231        if( encoding==0 ) encoding = SQLITE_UTF8;
   232        ENC(db) = encoding;
   233  #else
   234        ENC(db) = SQLITE_UTF8;
   235  #endif
   236      }else{
   237        /* If opening an attached database, the encoding much match ENC(db) */
   238        if( meta[BTREE_TEXT_ENCODING-1]!=ENC(db) ){
   239          sqlite3SetString(pzErrMsg, db, "attached databases must use the same"
   240              " text encoding as main database");
   241          rc = SQLITE_ERROR;
   242          goto initone_error_out;
   243        }
   244      }
   245    }else{
   246      DbSetProperty(db, iDb, DB_Empty);
   247    }
   248    pDb->pSchema->enc = ENC(db);
   249  
   250    if( pDb->pSchema->cache_size==0 ){
   251  #ifndef SQLITE_OMIT_DEPRECATED
   252      size = sqlite3AbsInt32(meta[BTREE_DEFAULT_CACHE_SIZE-1]);
   253      if( size==0 ){ size = SQLITE_DEFAULT_CACHE_SIZE; }
   254      pDb->pSchema->cache_size = size;
   255  #else
   256      pDb->pSchema->cache_size = SQLITE_DEFAULT_CACHE_SIZE;
   257  #endif
   258      sqlite3BtreeSetCacheSize(pDb->pBt, pDb->pSchema->cache_size);
   259    }
   260  
   261    /*
   262    ** file_format==1    Version 3.0.0.
   263    ** file_format==2    Version 3.1.3.  // ALTER TABLE ADD COLUMN
   264    ** file_format==3    Version 3.1.4.  // ditto but with non-NULL defaults
   265    ** file_format==4    Version 3.3.0.  // DESC indices.  Boolean constants
   266    */
   267    pDb->pSchema->file_format = (u8)meta[BTREE_FILE_FORMAT-1];
   268    if( pDb->pSchema->file_format==0 ){
   269      pDb->pSchema->file_format = 1;
   270    }
   271    if( pDb->pSchema->file_format>SQLITE_MAX_FILE_FORMAT ){
   272      sqlite3SetString(pzErrMsg, db, "unsupported file format");
   273      rc = SQLITE_ERROR;
   274      goto initone_error_out;
   275    }
   276  
   277    /* Ticket #2804:  When we open a database in the newer file format,
   278    ** clear the legacy_file_format pragma flag so that a VACUUM will
   279    ** not downgrade the database and thus invalidate any descending
   280    ** indices that the user might have created.
   281    */
   282    if( iDb==0 && meta[BTREE_FILE_FORMAT-1]>=4 ){
   283      db->flags &= ~SQLITE_LegacyFileFmt;
   284    }
   285  
   286    /* Read the schema information out of the schema tables
   287    */
   288    assert( db->init.busy );
   289    {
   290      char *zSql;
   291      zSql = sqlite3MPrintf(db, 
   292          "SELECT name, rootpage, sql FROM \"%w\".%s ORDER BY rowid",
   293          db->aDb[iDb].zDbSName, zMasterName);
   294  #ifndef SQLITE_OMIT_AUTHORIZATION
   295      {
   296        sqlite3_xauth xAuth;
   297        xAuth = db->xAuth;
   298        db->xAuth = 0;
   299  #endif
   300        rc = sqlite3_exec(db, zSql, sqlite3InitCallback, &initData, 0);
   301  #ifndef SQLITE_OMIT_AUTHORIZATION
   302        db->xAuth = xAuth;
   303      }
   304  #endif
   305      if( rc==SQLITE_OK ) rc = initData.rc;
   306      sqlite3DbFree(db, zSql);
   307  #ifndef SQLITE_OMIT_ANALYZE
   308      if( rc==SQLITE_OK ){
   309        sqlite3AnalysisLoad(db, iDb);
   310      }
   311  #endif
   312    }
   313    if( db->mallocFailed ){
   314      rc = SQLITE_NOMEM_BKPT;
   315      sqlite3ResetAllSchemasOfConnection(db);
   316    }
   317    if( rc==SQLITE_OK || (db->flags&SQLITE_WriteSchema)){
   318      /* Black magic: If the SQLITE_WriteSchema flag is set, then consider
   319      ** the schema loaded, even if errors occurred. In this situation the 
   320      ** current sqlite3_prepare() operation will fail, but the following one
   321      ** will attempt to compile the supplied statement against whatever subset
   322      ** of the schema was loaded before the error occurred. The primary
   323      ** purpose of this is to allow access to the sqlite_master table
   324      ** even when its contents have been corrupted.
   325      */
   326      DbSetProperty(db, iDb, DB_SchemaLoaded);
   327      rc = SQLITE_OK;
   328    }
   329  
   330    /* Jump here for an error that occurs after successfully allocating
   331    ** curMain and calling sqlite3BtreeEnter(). For an error that occurs
   332    ** before that point, jump to error_out.
   333    */
   334  initone_error_out:
   335    if( openedTransaction ){
   336      sqlite3BtreeCommit(pDb->pBt);
   337    }
   338    sqlite3BtreeLeave(pDb->pBt);
   339  
   340  error_out:
   341    if( rc ){
   342      if( rc==SQLITE_NOMEM || rc==SQLITE_IOERR_NOMEM ){
   343        sqlite3OomFault(db);
   344      }
   345      sqlite3ResetOneSchema(db, iDb);
   346    }
   347    db->init.busy = 0;
   348    return rc;
   349  }
   350  
   351  /*
   352  ** Initialize all database files - the main database file, the file
   353  ** used to store temporary tables, and any additional database files
   354  ** created using ATTACH statements.  Return a success code.  If an
   355  ** error occurs, write an error message into *pzErrMsg.
   356  **
   357  ** After a database is initialized, the DB_SchemaLoaded bit is set
   358  ** bit is set in the flags field of the Db structure. If the database
   359  ** file was of zero-length, then the DB_Empty flag is also set.
   360  */
   361  int sqlite3Init(sqlite3 *db, char **pzErrMsg){
   362    int i, rc;
   363    int commit_internal = !(db->mDbFlags&DBFLAG_SchemaChange);
   364    
   365    assert( sqlite3_mutex_held(db->mutex) );
   366    assert( sqlite3BtreeHoldsMutex(db->aDb[0].pBt) );
   367    assert( db->init.busy==0 );
   368    ENC(db) = SCHEMA_ENC(db);
   369    assert( db->nDb>0 );
   370    /* Do the main schema first */
   371    if( !DbHasProperty(db, 0, DB_SchemaLoaded) ){
   372      rc = sqlite3InitOne(db, 0, pzErrMsg);
   373      if( rc ) return rc;
   374    }
   375    /* All other schemas after the main schema. The "temp" schema must be last */
   376    for(i=db->nDb-1; i>0; i--){
   377      if( !DbHasProperty(db, i, DB_SchemaLoaded) ){
   378        rc = sqlite3InitOne(db, i, pzErrMsg);
   379        if( rc ) return rc;
   380      }
   381    }
   382    if( commit_internal ){
   383      sqlite3CommitInternalChanges(db);
   384    }
   385    return SQLITE_OK;
   386  }
   387  
   388  /*
   389  ** This routine is a no-op if the database schema is already initialized.
   390  ** Otherwise, the schema is loaded. An error code is returned.
   391  */
   392  int sqlite3ReadSchema(Parse *pParse){
   393    int rc = SQLITE_OK;
   394    sqlite3 *db = pParse->db;
   395    assert( sqlite3_mutex_held(db->mutex) );
   396    if( !db->init.busy ){
   397      rc = sqlite3Init(db, &pParse->zErrMsg);
   398    }
   399    if( rc!=SQLITE_OK ){
   400      pParse->rc = rc;
   401      pParse->nErr++;
   402    }
   403    return rc;
   404  }
   405  
   406  
   407  /*
   408  ** Check schema cookies in all databases.  If any cookie is out
   409  ** of date set pParse->rc to SQLITE_SCHEMA.  If all schema cookies
   410  ** make no changes to pParse->rc.
   411  */
   412  static void schemaIsValid(Parse *pParse){
   413    sqlite3 *db = pParse->db;
   414    int iDb;
   415    int rc;
   416    int cookie;
   417  
   418    assert( pParse->checkSchema );
   419    assert( sqlite3_mutex_held(db->mutex) );
   420    for(iDb=0; iDb<db->nDb; iDb++){
   421      int openedTransaction = 0;         /* True if a transaction is opened */
   422      Btree *pBt = db->aDb[iDb].pBt;     /* Btree database to read cookie from */
   423      if( pBt==0 ) continue;
   424  
   425      /* If there is not already a read-only (or read-write) transaction opened
   426      ** on the b-tree database, open one now. If a transaction is opened, it 
   427      ** will be closed immediately after reading the meta-value. */
   428      if( !sqlite3BtreeIsInReadTrans(pBt) ){
   429        rc = sqlite3BtreeBeginTrans(pBt, 0);
   430        if( rc==SQLITE_NOMEM || rc==SQLITE_IOERR_NOMEM ){
   431          sqlite3OomFault(db);
   432        }
   433        if( rc!=SQLITE_OK ) return;
   434        openedTransaction = 1;
   435      }
   436  
   437      /* Read the schema cookie from the database. If it does not match the 
   438      ** value stored as part of the in-memory schema representation,
   439      ** set Parse.rc to SQLITE_SCHEMA. */
   440      sqlite3BtreeGetMeta(pBt, BTREE_SCHEMA_VERSION, (u32 *)&cookie);
   441      assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
   442      if( cookie!=db->aDb[iDb].pSchema->schema_cookie ){
   443        sqlite3ResetOneSchema(db, iDb);
   444        pParse->rc = SQLITE_SCHEMA;
   445      }
   446  
   447      /* Close the transaction, if one was opened. */
   448      if( openedTransaction ){
   449        sqlite3BtreeCommit(pBt);
   450      }
   451    }
   452  }
   453  
   454  /*
   455  ** Convert a schema pointer into the iDb index that indicates
   456  ** which database file in db->aDb[] the schema refers to.
   457  **
   458  ** If the same database is attached more than once, the first
   459  ** attached database is returned.
   460  */
   461  int sqlite3SchemaToIndex(sqlite3 *db, Schema *pSchema){
   462    int i = -1000000;
   463  
   464    /* If pSchema is NULL, then return -1000000. This happens when code in 
   465    ** expr.c is trying to resolve a reference to a transient table (i.e. one
   466    ** created by a sub-select). In this case the return value of this 
   467    ** function should never be used.
   468    **
   469    ** We return -1000000 instead of the more usual -1 simply because using
   470    ** -1000000 as the incorrect index into db->aDb[] is much 
   471    ** more likely to cause a segfault than -1 (of course there are assert()
   472    ** statements too, but it never hurts to play the odds).
   473    */
   474    assert( sqlite3_mutex_held(db->mutex) );
   475    if( pSchema ){
   476      for(i=0; ALWAYS(i<db->nDb); i++){
   477        if( db->aDb[i].pSchema==pSchema ){
   478          break;
   479        }
   480      }
   481      assert( i>=0 && i<db->nDb );
   482    }
   483    return i;
   484  }
   485  
   486  /*
   487  ** Free all memory allocations in the pParse object
   488  */
   489  void sqlite3ParserReset(Parse *pParse){
   490    sqlite3 *db = pParse->db;
   491    sqlite3DbFree(db, pParse->aLabel);
   492    sqlite3ExprListDelete(db, pParse->pConstExpr);
   493    if( db ){
   494      assert( db->lookaside.bDisable >= pParse->disableLookaside );
   495      db->lookaside.bDisable -= pParse->disableLookaside;
   496    }
   497    pParse->disableLookaside = 0;
   498  }
   499  
   500  /*
   501  ** Compile the UTF-8 encoded SQL statement zSql into a statement handle.
   502  */
   503  static int sqlite3Prepare(
   504    sqlite3 *db,              /* Database handle. */
   505    const char *zSql,         /* UTF-8 encoded SQL statement. */
   506    int nBytes,               /* Length of zSql in bytes. */
   507    u32 prepFlags,            /* Zero or more SQLITE_PREPARE_* flags */
   508    Vdbe *pReprepare,         /* VM being reprepared */
   509    sqlite3_stmt **ppStmt,    /* OUT: A pointer to the prepared statement */
   510    const char **pzTail       /* OUT: End of parsed string */
   511  ){
   512    char *zErrMsg = 0;        /* Error message */
   513    int rc = SQLITE_OK;       /* Result code */
   514    int i;                    /* Loop counter */
   515    Parse sParse;             /* Parsing context */
   516  
   517    memset(&sParse, 0, PARSE_HDR_SZ);
   518    memset(PARSE_TAIL(&sParse), 0, PARSE_TAIL_SZ);
   519    sParse.pReprepare = pReprepare;
   520    assert( ppStmt && *ppStmt==0 );
   521    /* assert( !db->mallocFailed ); // not true with SQLITE_USE_ALLOCA */
   522    assert( sqlite3_mutex_held(db->mutex) );
   523  
   524    /* For a long-term use prepared statement avoid the use of
   525    ** lookaside memory.
   526    */
   527    if( prepFlags & SQLITE_PREPARE_PERSISTENT ){
   528      sParse.disableLookaside++;
   529      db->lookaside.bDisable++;
   530    }
   531  
   532    /* Check to verify that it is possible to get a read lock on all
   533    ** database schemas.  The inability to get a read lock indicates that
   534    ** some other database connection is holding a write-lock, which in
   535    ** turn means that the other connection has made uncommitted changes
   536    ** to the schema.
   537    **
   538    ** Were we to proceed and prepare the statement against the uncommitted
   539    ** schema changes and if those schema changes are subsequently rolled
   540    ** back and different changes are made in their place, then when this
   541    ** prepared statement goes to run the schema cookie would fail to detect
   542    ** the schema change.  Disaster would follow.
   543    **
   544    ** This thread is currently holding mutexes on all Btrees (because
   545    ** of the sqlite3BtreeEnterAll() in sqlite3LockAndPrepare()) so it
   546    ** is not possible for another thread to start a new schema change
   547    ** while this routine is running.  Hence, we do not need to hold 
   548    ** locks on the schema, we just need to make sure nobody else is 
   549    ** holding them.
   550    **
   551    ** Note that setting READ_UNCOMMITTED overrides most lock detection,
   552    ** but it does *not* override schema lock detection, so this all still
   553    ** works even if READ_UNCOMMITTED is set.
   554    */
   555    for(i=0; i<db->nDb; i++) {
   556      Btree *pBt = db->aDb[i].pBt;
   557      if( pBt ){
   558        assert( sqlite3BtreeHoldsMutex(pBt) );
   559        rc = sqlite3BtreeSchemaLocked(pBt);
   560        if( rc ){
   561          const char *zDb = db->aDb[i].zDbSName;
   562          sqlite3ErrorWithMsg(db, rc, "database schema is locked: %s", zDb);
   563          testcase( db->flags & SQLITE_ReadUncommit );
   564          goto end_prepare;
   565        }
   566      }
   567    }
   568  
   569    sqlite3VtabUnlockList(db);
   570  
   571    sParse.db = db;
   572    if( nBytes>=0 && (nBytes==0 || zSql[nBytes-1]!=0) ){
   573      char *zSqlCopy;
   574      int mxLen = db->aLimit[SQLITE_LIMIT_SQL_LENGTH];
   575      testcase( nBytes==mxLen );
   576      testcase( nBytes==mxLen+1 );
   577      if( nBytes>mxLen ){
   578        sqlite3ErrorWithMsg(db, SQLITE_TOOBIG, "statement too long");
   579        rc = sqlite3ApiExit(db, SQLITE_TOOBIG);
   580        goto end_prepare;
   581      }
   582      zSqlCopy = sqlite3DbStrNDup(db, zSql, nBytes);
   583      if( zSqlCopy ){
   584        sqlite3RunParser(&sParse, zSqlCopy, &zErrMsg);
   585        sParse.zTail = &zSql[sParse.zTail-zSqlCopy];
   586        sqlite3DbFree(db, zSqlCopy);
   587      }else{
   588        sParse.zTail = &zSql[nBytes];
   589      }
   590    }else{
   591      sqlite3RunParser(&sParse, zSql, &zErrMsg);
   592    }
   593    assert( 0==sParse.nQueryLoop );
   594  
   595    if( sParse.rc==SQLITE_DONE ) sParse.rc = SQLITE_OK;
   596    if( sParse.checkSchema ){
   597      schemaIsValid(&sParse);
   598    }
   599    if( db->mallocFailed ){
   600      sParse.rc = SQLITE_NOMEM_BKPT;
   601    }
   602    if( pzTail ){
   603      *pzTail = sParse.zTail;
   604    }
   605    rc = sParse.rc;
   606  
   607  #ifndef SQLITE_OMIT_EXPLAIN
   608    if( rc==SQLITE_OK && sParse.pVdbe && sParse.explain ){
   609      static const char * const azColName[] = {
   610         "addr", "opcode", "p1", "p2", "p3", "p4", "p5", "comment",
   611         "selectid", "order", "from", "detail"
   612      };
   613      int iFirst, mx;
   614      if( sParse.explain==2 ){
   615        sqlite3VdbeSetNumCols(sParse.pVdbe, 4);
   616        iFirst = 8;
   617        mx = 12;
   618      }else{
   619        sqlite3VdbeSetNumCols(sParse.pVdbe, 8);
   620        iFirst = 0;
   621        mx = 8;
   622      }
   623      for(i=iFirst; i<mx; i++){
   624        sqlite3VdbeSetColName(sParse.pVdbe, i-iFirst, COLNAME_NAME,
   625                              azColName[i], SQLITE_STATIC);
   626      }
   627    }
   628  #endif
   629  
   630    if( db->init.busy==0 ){
   631      sqlite3VdbeSetSql(sParse.pVdbe, zSql, (int)(sParse.zTail-zSql), prepFlags);
   632    }
   633    if( sParse.pVdbe && (rc!=SQLITE_OK || db->mallocFailed) ){
   634      sqlite3VdbeFinalize(sParse.pVdbe);
   635      assert(!(*ppStmt));
   636    }else{
   637      *ppStmt = (sqlite3_stmt*)sParse.pVdbe;
   638    }
   639  
   640    if( zErrMsg ){
   641      sqlite3ErrorWithMsg(db, rc, "%s", zErrMsg);
   642      sqlite3DbFree(db, zErrMsg);
   643    }else{
   644      sqlite3Error(db, rc);
   645    }
   646  
   647    /* Delete any TriggerPrg structures allocated while parsing this statement. */
   648    while( sParse.pTriggerPrg ){
   649      TriggerPrg *pT = sParse.pTriggerPrg;
   650      sParse.pTriggerPrg = pT->pNext;
   651      sqlite3DbFree(db, pT);
   652    }
   653  
   654  end_prepare:
   655  
   656    sqlite3ParserReset(&sParse);
   657    rc = sqlite3ApiExit(db, rc);
   658    assert( (rc&db->errMask)==rc );
   659    return rc;
   660  }
   661  static int sqlite3LockAndPrepare(
   662    sqlite3 *db,              /* Database handle. */
   663    const char *zSql,         /* UTF-8 encoded SQL statement. */
   664    int nBytes,               /* Length of zSql in bytes. */
   665    u32 prepFlags,            /* Zero or more SQLITE_PREPARE_* flags */
   666    Vdbe *pOld,               /* VM being reprepared */
   667    sqlite3_stmt **ppStmt,    /* OUT: A pointer to the prepared statement */
   668    const char **pzTail       /* OUT: End of parsed string */
   669  ){
   670    int rc;
   671  
   672  #ifdef SQLITE_ENABLE_API_ARMOR
   673    if( ppStmt==0 ) return SQLITE_MISUSE_BKPT;
   674  #endif
   675    *ppStmt = 0;
   676    if( !sqlite3SafetyCheckOk(db)||zSql==0 ){
   677      return SQLITE_MISUSE_BKPT;
   678    }
   679    sqlite3_mutex_enter(db->mutex);
   680    sqlite3BtreeEnterAll(db);
   681    rc = sqlite3Prepare(db, zSql, nBytes, prepFlags, pOld, ppStmt, pzTail);
   682    if( rc==SQLITE_SCHEMA ){
   683      sqlite3ResetOneSchema(db, -1);
   684      sqlite3_finalize(*ppStmt);
   685      rc = sqlite3Prepare(db, zSql, nBytes, prepFlags, pOld, ppStmt, pzTail);
   686    }
   687    sqlite3BtreeLeaveAll(db);
   688    sqlite3_mutex_leave(db->mutex);
   689    assert( rc==SQLITE_OK || *ppStmt==0 );
   690    return rc;
   691  }
   692  
   693  /*
   694  ** Rerun the compilation of a statement after a schema change.
   695  **
   696  ** If the statement is successfully recompiled, return SQLITE_OK. Otherwise,
   697  ** if the statement cannot be recompiled because another connection has
   698  ** locked the sqlite3_master table, return SQLITE_LOCKED. If any other error
   699  ** occurs, return SQLITE_SCHEMA.
   700  */
   701  int sqlite3Reprepare(Vdbe *p){
   702    int rc;
   703    sqlite3_stmt *pNew;
   704    const char *zSql;
   705    sqlite3 *db;
   706    u8 prepFlags;
   707  
   708    assert( sqlite3_mutex_held(sqlite3VdbeDb(p)->mutex) );
   709    zSql = sqlite3_sql((sqlite3_stmt *)p);
   710    assert( zSql!=0 );  /* Reprepare only called for prepare_v2() statements */
   711    db = sqlite3VdbeDb(p);
   712    assert( sqlite3_mutex_held(db->mutex) );
   713    prepFlags = sqlite3VdbePrepareFlags(p);
   714    rc = sqlite3LockAndPrepare(db, zSql, -1, prepFlags, p, &pNew, 0);
   715    if( rc ){
   716      if( rc==SQLITE_NOMEM ){
   717        sqlite3OomFault(db);
   718      }
   719      assert( pNew==0 );
   720      return rc;
   721    }else{
   722      assert( pNew!=0 );
   723    }
   724    sqlite3VdbeSwap((Vdbe*)pNew, p);
   725    sqlite3TransferBindings(pNew, (sqlite3_stmt*)p);
   726    sqlite3VdbeResetStepResult((Vdbe*)pNew);
   727    sqlite3VdbeFinalize((Vdbe*)pNew);
   728    return SQLITE_OK;
   729  }
   730  
   731  
   732  /*
   733  ** Two versions of the official API.  Legacy and new use.  In the legacy
   734  ** version, the original SQL text is not saved in the prepared statement
   735  ** and so if a schema change occurs, SQLITE_SCHEMA is returned by
   736  ** sqlite3_step().  In the new version, the original SQL text is retained
   737  ** and the statement is automatically recompiled if an schema change
   738  ** occurs.
   739  */
   740  int sqlite3_prepare(
   741    sqlite3 *db,              /* Database handle. */
   742    const char *zSql,         /* UTF-8 encoded SQL statement. */
   743    int nBytes,               /* Length of zSql in bytes. */
   744    sqlite3_stmt **ppStmt,    /* OUT: A pointer to the prepared statement */
   745    const char **pzTail       /* OUT: End of parsed string */
   746  ){
   747    int rc;
   748    rc = sqlite3LockAndPrepare(db,zSql,nBytes,0,0,ppStmt,pzTail);
   749    assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 );  /* VERIFY: F13021 */
   750    return rc;
   751  }
   752  int sqlite3_prepare_v2(
   753    sqlite3 *db,              /* Database handle. */
   754    const char *zSql,         /* UTF-8 encoded SQL statement. */
   755    int nBytes,               /* Length of zSql in bytes. */
   756    sqlite3_stmt **ppStmt,    /* OUT: A pointer to the prepared statement */
   757    const char **pzTail       /* OUT: End of parsed string */
   758  ){
   759    int rc;
   760    /* EVIDENCE-OF: R-37923-12173 The sqlite3_prepare_v2() interface works
   761    ** exactly the same as sqlite3_prepare_v3() with a zero prepFlags
   762    ** parameter.
   763    **
   764    ** Proof in that the 5th parameter to sqlite3LockAndPrepare is 0 */
   765    rc = sqlite3LockAndPrepare(db,zSql,nBytes,SQLITE_PREPARE_SAVESQL,0,
   766                               ppStmt,pzTail);
   767    assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 );
   768    return rc;
   769  }
   770  int sqlite3_prepare_v3(
   771    sqlite3 *db,              /* Database handle. */
   772    const char *zSql,         /* UTF-8 encoded SQL statement. */
   773    int nBytes,               /* Length of zSql in bytes. */
   774    unsigned int prepFlags,   /* Zero or more SQLITE_PREPARE_* flags */
   775    sqlite3_stmt **ppStmt,    /* OUT: A pointer to the prepared statement */
   776    const char **pzTail       /* OUT: End of parsed string */
   777  ){
   778    int rc;
   779    /* EVIDENCE-OF: R-56861-42673 sqlite3_prepare_v3() differs from
   780    ** sqlite3_prepare_v2() only in having the extra prepFlags parameter,
   781    ** which is a bit array consisting of zero or more of the
   782    ** SQLITE_PREPARE_* flags.
   783    **
   784    ** Proof by comparison to the implementation of sqlite3_prepare_v2()
   785    ** directly above. */
   786    rc = sqlite3LockAndPrepare(db,zSql,nBytes,
   787                   SQLITE_PREPARE_SAVESQL|(prepFlags&SQLITE_PREPARE_MASK),
   788                   0,ppStmt,pzTail);
   789    assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 );
   790    return rc;
   791  }
   792  
   793  
   794  #ifndef SQLITE_OMIT_UTF16
   795  /*
   796  ** Compile the UTF-16 encoded SQL statement zSql into a statement handle.
   797  */
   798  static int sqlite3Prepare16(
   799    sqlite3 *db,              /* Database handle. */ 
   800    const void *zSql,         /* UTF-16 encoded SQL statement. */
   801    int nBytes,               /* Length of zSql in bytes. */
   802    u32 prepFlags,            /* Zero or more SQLITE_PREPARE_* flags */
   803    sqlite3_stmt **ppStmt,    /* OUT: A pointer to the prepared statement */
   804    const void **pzTail       /* OUT: End of parsed string */
   805  ){
   806    /* This function currently works by first transforming the UTF-16
   807    ** encoded string to UTF-8, then invoking sqlite3_prepare(). The
   808    ** tricky bit is figuring out the pointer to return in *pzTail.
   809    */
   810    char *zSql8;
   811    const char *zTail8 = 0;
   812    int rc = SQLITE_OK;
   813  
   814  #ifdef SQLITE_ENABLE_API_ARMOR
   815    if( ppStmt==0 ) return SQLITE_MISUSE_BKPT;
   816  #endif
   817    *ppStmt = 0;
   818    if( !sqlite3SafetyCheckOk(db)||zSql==0 ){
   819      return SQLITE_MISUSE_BKPT;
   820    }
   821    if( nBytes>=0 ){
   822      int sz;
   823      const char *z = (const char*)zSql;
   824      for(sz=0; sz<nBytes && (z[sz]!=0 || z[sz+1]!=0); sz += 2){}
   825      nBytes = sz;
   826    }
   827    sqlite3_mutex_enter(db->mutex);
   828    zSql8 = sqlite3Utf16to8(db, zSql, nBytes, SQLITE_UTF16NATIVE);
   829    if( zSql8 ){
   830      rc = sqlite3LockAndPrepare(db, zSql8, -1, prepFlags, 0, ppStmt, &zTail8);
   831    }
   832  
   833    if( zTail8 && pzTail ){
   834      /* If sqlite3_prepare returns a tail pointer, we calculate the
   835      ** equivalent pointer into the UTF-16 string by counting the unicode
   836      ** characters between zSql8 and zTail8, and then returning a pointer
   837      ** the same number of characters into the UTF-16 string.
   838      */
   839      int chars_parsed = sqlite3Utf8CharLen(zSql8, (int)(zTail8-zSql8));
   840      *pzTail = (u8 *)zSql + sqlite3Utf16ByteLen(zSql, chars_parsed);
   841    }
   842    sqlite3DbFree(db, zSql8); 
   843    rc = sqlite3ApiExit(db, rc);
   844    sqlite3_mutex_leave(db->mutex);
   845    return rc;
   846  }
   847  
   848  /*
   849  ** Two versions of the official API.  Legacy and new use.  In the legacy
   850  ** version, the original SQL text is not saved in the prepared statement
   851  ** and so if a schema change occurs, SQLITE_SCHEMA is returned by
   852  ** sqlite3_step().  In the new version, the original SQL text is retained
   853  ** and the statement is automatically recompiled if an schema change
   854  ** occurs.
   855  */
   856  int sqlite3_prepare16(
   857    sqlite3 *db,              /* Database handle. */ 
   858    const void *zSql,         /* UTF-16 encoded SQL statement. */
   859    int nBytes,               /* Length of zSql in bytes. */
   860    sqlite3_stmt **ppStmt,    /* OUT: A pointer to the prepared statement */
   861    const void **pzTail       /* OUT: End of parsed string */
   862  ){
   863    int rc;
   864    rc = sqlite3Prepare16(db,zSql,nBytes,0,ppStmt,pzTail);
   865    assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 );  /* VERIFY: F13021 */
   866    return rc;
   867  }
   868  int sqlite3_prepare16_v2(
   869    sqlite3 *db,              /* Database handle. */ 
   870    const void *zSql,         /* UTF-16 encoded SQL statement. */
   871    int nBytes,               /* Length of zSql in bytes. */
   872    sqlite3_stmt **ppStmt,    /* OUT: A pointer to the prepared statement */
   873    const void **pzTail       /* OUT: End of parsed string */
   874  ){
   875    int rc;
   876    rc = sqlite3Prepare16(db,zSql,nBytes,SQLITE_PREPARE_SAVESQL,ppStmt,pzTail);
   877    assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 );  /* VERIFY: F13021 */
   878    return rc;
   879  }
   880  int sqlite3_prepare16_v3(
   881    sqlite3 *db,              /* Database handle. */ 
   882    const void *zSql,         /* UTF-16 encoded SQL statement. */
   883    int nBytes,               /* Length of zSql in bytes. */
   884    unsigned int prepFlags,   /* Zero or more SQLITE_PREPARE_* flags */
   885    sqlite3_stmt **ppStmt,    /* OUT: A pointer to the prepared statement */
   886    const void **pzTail       /* OUT: End of parsed string */
   887  ){
   888    int rc;
   889    rc = sqlite3Prepare16(db,zSql,nBytes,
   890           SQLITE_PREPARE_SAVESQL|(prepFlags&SQLITE_PREPARE_MASK),
   891           ppStmt,pzTail);
   892    assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 );  /* VERIFY: F13021 */
   893    return rc;
   894  }
   895  
   896  #endif /* SQLITE_OMIT_UTF16 */