extensions/sqlite/sqlite-source/build.c
author Matt Woodrow <pred@alliedmods.net>
Mon Aug 17 10:53:54 2009 +1200 (2009-08-17)
changeset 2771 ea849fc91a9b
parent 1952 b7aa2b626807
permissions -rw-r--r--
Forgot makefiles patch
     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 ** This file contains C code routines that are called by the SQLite parser
    13 ** when syntax rules are reduced.  The routines in this file handle the
    14 ** following kinds of SQL syntax:
    15 **
    16 **     CREATE TABLE
    17 **     DROP TABLE
    18 **     CREATE INDEX
    19 **     DROP INDEX
    20 **     creating ID lists
    21 **     BEGIN TRANSACTION
    22 **     COMMIT
    23 **     ROLLBACK
    24 **
    25 ** $Id$
    26 */
    27 #include "sqliteInt.h"
    28 #include <ctype.h>
    29 
    30 /*
    31 ** This routine is called when a new SQL statement is beginning to
    32 ** be parsed.  Initialize the pParse structure as needed.
    33 */
    34 void sqlite3BeginParse(Parse *pParse, int explainFlag){
    35   pParse->explain = explainFlag;
    36   pParse->nVar = 0;
    37 }
    38 
    39 #ifndef SQLITE_OMIT_SHARED_CACHE
    40 /*
    41 ** The TableLock structure is only used by the sqlite3TableLock() and
    42 ** codeTableLocks() functions.
    43 */
    44 struct TableLock {
    45   int iDb;             /* The database containing the table to be locked */
    46   int iTab;            /* The root page of the table to be locked */
    47   u8 isWriteLock;      /* True for write lock.  False for a read lock */
    48   const char *zName;   /* Name of the table */
    49 };
    50 
    51 /*
    52 ** Record the fact that we want to lock a table at run-time.  
    53 **
    54 ** The table to be locked has root page iTab and is found in database iDb.
    55 ** A read or a write lock can be taken depending on isWritelock.
    56 **
    57 ** This routine just records the fact that the lock is desired.  The
    58 ** code to make the lock occur is generated by a later call to
    59 ** codeTableLocks() which occurs during sqlite3FinishCoding().
    60 */
    61 void sqlite3TableLock(
    62   Parse *pParse,     /* Parsing context */
    63   int iDb,           /* Index of the database containing the table to lock */
    64   int iTab,          /* Root page number of the table to be locked */
    65   u8 isWriteLock,    /* True for a write lock */
    66   const char *zName  /* Name of the table to be locked */
    67 ){
    68   int i;
    69   int nBytes;
    70   TableLock *p;
    71 
    72   if( iDb<0 ){
    73     return;
    74   }
    75 
    76   for(i=0; i<pParse->nTableLock; i++){
    77     p = &pParse->aTableLock[i];
    78     if( p->iDb==iDb && p->iTab==iTab ){
    79       p->isWriteLock = (p->isWriteLock || isWriteLock);
    80       return;
    81     }
    82   }
    83 
    84   nBytes = sizeof(TableLock) * (pParse->nTableLock+1);
    85   pParse->aTableLock = 
    86       sqlite3DbReallocOrFree(pParse->db, pParse->aTableLock, nBytes);
    87   if( pParse->aTableLock ){
    88     p = &pParse->aTableLock[pParse->nTableLock++];
    89     p->iDb = iDb;
    90     p->iTab = iTab;
    91     p->isWriteLock = isWriteLock;
    92     p->zName = zName;
    93   }else{
    94     pParse->nTableLock = 0;
    95     pParse->db->mallocFailed = 1;
    96   }
    97 }
    98 
    99 /*
   100 ** Code an OP_TableLock instruction for each table locked by the
   101 ** statement (configured by calls to sqlite3TableLock()).
   102 */
   103 static void codeTableLocks(Parse *pParse){
   104   int i;
   105   Vdbe *pVdbe; 
   106 
   107   if( 0==(pVdbe = sqlite3GetVdbe(pParse)) ){
   108     return;
   109   }
   110 
   111   for(i=0; i<pParse->nTableLock; i++){
   112     TableLock *p = &pParse->aTableLock[i];
   113     int p1 = p->iDb;
   114     if( p->isWriteLock ){
   115       p1 = -1*(p1+1);
   116     }
   117     sqlite3VdbeOp3(pVdbe, OP_TableLock, p1, p->iTab, p->zName, P3_STATIC);
   118   }
   119 }
   120 #else
   121   #define codeTableLocks(x)
   122 #endif
   123 
   124 /*
   125 ** This routine is called after a single SQL statement has been
   126 ** parsed and a VDBE program to execute that statement has been
   127 ** prepared.  This routine puts the finishing touches on the
   128 ** VDBE program and resets the pParse structure for the next
   129 ** parse.
   130 **
   131 ** Note that if an error occurred, it might be the case that
   132 ** no VDBE code was generated.
   133 */
   134 void sqlite3FinishCoding(Parse *pParse){
   135   sqlite3 *db;
   136   Vdbe *v;
   137 
   138   db = pParse->db;
   139   if( db->mallocFailed ) return;
   140   if( pParse->nested ) return;
   141   if( !pParse->pVdbe ){
   142     if( pParse->rc==SQLITE_OK && pParse->nErr ){
   143       pParse->rc = SQLITE_ERROR;
   144       return;
   145     }
   146   }
   147 
   148   /* Begin by generating some termination code at the end of the
   149   ** vdbe program
   150   */
   151   v = sqlite3GetVdbe(pParse);
   152   if( v ){
   153     sqlite3VdbeAddOp(v, OP_Halt, 0, 0);
   154 
   155     /* The cookie mask contains one bit for each database file open.
   156     ** (Bit 0 is for main, bit 1 is for temp, and so forth.)  Bits are
   157     ** set for each database that is used.  Generate code to start a
   158     ** transaction on each used database and to verify the schema cookie
   159     ** on each used database.
   160     */
   161     if( pParse->cookieGoto>0 ){
   162       u32 mask;
   163       int iDb;
   164       sqlite3VdbeJumpHere(v, pParse->cookieGoto-1);
   165       for(iDb=0, mask=1; iDb<db->nDb; mask<<=1, iDb++){
   166         if( (mask & pParse->cookieMask)==0 ) continue;
   167         sqlite3VdbeUsesBtree(v, iDb);
   168         sqlite3VdbeAddOp(v, OP_Transaction, iDb, (mask & pParse->writeMask)!=0);
   169         sqlite3VdbeAddOp(v, OP_VerifyCookie, iDb, pParse->cookieValue[iDb]);
   170       }
   171 #ifndef SQLITE_OMIT_VIRTUALTABLE
   172       if( pParse->pVirtualLock ){
   173         char *vtab = (char *)pParse->pVirtualLock->pVtab;
   174         sqlite3VdbeOp3(v, OP_VBegin, 0, 0, vtab, P3_VTAB);
   175       }
   176 #endif
   177 
   178       /* Once all the cookies have been verified and transactions opened, 
   179       ** obtain the required table-locks. This is a no-op unless the 
   180       ** shared-cache feature is enabled.
   181       */
   182       codeTableLocks(pParse);
   183       sqlite3VdbeAddOp(v, OP_Goto, 0, pParse->cookieGoto);
   184     }
   185 
   186 #ifndef SQLITE_OMIT_TRACE
   187     /* Add a No-op that contains the complete text of the compiled SQL
   188     ** statement as its P3 argument.  This does not change the functionality
   189     ** of the program. 
   190     **
   191     ** This is used to implement sqlite3_trace().
   192     */
   193     sqlite3VdbeOp3(v, OP_Noop, 0, 0, pParse->zSql, pParse->zTail-pParse->zSql);
   194 #endif /* SQLITE_OMIT_TRACE */
   195   }
   196 
   197 
   198   /* Get the VDBE program ready for execution
   199   */
   200   if( v && pParse->nErr==0 && !db->mallocFailed ){
   201 #ifdef SQLITE_DEBUG
   202     FILE *trace = (db->flags & SQLITE_VdbeTrace)!=0 ? stdout : 0;
   203     sqlite3VdbeTrace(v, trace);
   204 #endif
   205     sqlite3VdbeMakeReady(v, pParse->nVar, pParse->nMem+3,
   206                          pParse->nTab+3, pParse->explain);
   207     pParse->rc = SQLITE_DONE;
   208     pParse->colNamesSet = 0;
   209   }else if( pParse->rc==SQLITE_OK ){
   210     pParse->rc = SQLITE_ERROR;
   211   }
   212   pParse->nTab = 0;
   213   pParse->nMem = 0;
   214   pParse->nSet = 0;
   215   pParse->nVar = 0;
   216   pParse->cookieMask = 0;
   217   pParse->cookieGoto = 0;
   218 }
   219 
   220 /*
   221 ** Run the parser and code generator recursively in order to generate
   222 ** code for the SQL statement given onto the end of the pParse context
   223 ** currently under construction.  When the parser is run recursively
   224 ** this way, the final OP_Halt is not appended and other initialization
   225 ** and finalization steps are omitted because those are handling by the
   226 ** outermost parser.
   227 **
   228 ** Not everything is nestable.  This facility is designed to permit
   229 ** INSERT, UPDATE, and DELETE operations against SQLITE_MASTER.  Use
   230 ** care if you decide to try to use this routine for some other purposes.
   231 */
   232 void sqlite3NestedParse(Parse *pParse, const char *zFormat, ...){
   233   va_list ap;
   234   char *zSql;
   235 # define SAVE_SZ  (sizeof(Parse) - offsetof(Parse,nVar))
   236   char saveBuf[SAVE_SZ];
   237 
   238   if( pParse->nErr ) return;
   239   assert( pParse->nested<10 );  /* Nesting should only be of limited depth */
   240   va_start(ap, zFormat);
   241   zSql = sqlite3VMPrintf(pParse->db, zFormat, ap);
   242   va_end(ap);
   243   if( zSql==0 ){
   244     pParse->db->mallocFailed = 1;
   245     return;   /* A malloc must have failed */
   246   }
   247   pParse->nested++;
   248   memcpy(saveBuf, &pParse->nVar, SAVE_SZ);
   249   memset(&pParse->nVar, 0, SAVE_SZ);
   250   sqlite3RunParser(pParse, zSql, 0);
   251   sqlite3_free(zSql);
   252   memcpy(&pParse->nVar, saveBuf, SAVE_SZ);
   253   pParse->nested--;
   254 }
   255 
   256 /*
   257 ** Locate the in-memory structure that describes a particular database
   258 ** table given the name of that table and (optionally) the name of the
   259 ** database containing the table.  Return NULL if not found.
   260 **
   261 ** If zDatabase is 0, all databases are searched for the table and the
   262 ** first matching table is returned.  (No checking for duplicate table
   263 ** names is done.)  The search order is TEMP first, then MAIN, then any
   264 ** auxiliary databases added using the ATTACH command.
   265 **
   266 ** See also sqlite3LocateTable().
   267 */
   268 Table *sqlite3FindTable(sqlite3 *db, const char *zName, const char *zDatabase){
   269   Table *p = 0;
   270   int i;
   271   assert( zName!=0 );
   272   for(i=OMIT_TEMPDB; i<db->nDb; i++){
   273     int j = (i<2) ? i^1 : i;   /* Search TEMP before MAIN */
   274     if( zDatabase!=0 && sqlite3StrICmp(zDatabase, db->aDb[j].zName) ) continue;
   275     p = sqlite3HashFind(&db->aDb[j].pSchema->tblHash, zName, strlen(zName)+1);
   276     if( p ) break;
   277   }
   278   return p;
   279 }
   280 
   281 /*
   282 ** Locate the in-memory structure that describes a particular database
   283 ** table given the name of that table and (optionally) the name of the
   284 ** database containing the table.  Return NULL if not found.  Also leave an
   285 ** error message in pParse->zErrMsg.
   286 **
   287 ** The difference between this routine and sqlite3FindTable() is that this
   288 ** routine leaves an error message in pParse->zErrMsg where
   289 ** sqlite3FindTable() does not.
   290 */
   291 Table *sqlite3LocateTable(Parse *pParse, const char *zName, const char *zDbase){
   292   Table *p;
   293 
   294   /* Read the database schema. If an error occurs, leave an error message
   295   ** and code in pParse and return NULL. */
   296   if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){
   297     return 0;
   298   }
   299 
   300   p = sqlite3FindTable(pParse->db, zName, zDbase);
   301   if( p==0 ){
   302     if( zDbase ){
   303       sqlite3ErrorMsg(pParse, "no such table: %s.%s", zDbase, zName);
   304     }else{
   305       sqlite3ErrorMsg(pParse, "no such table: %s", zName);
   306     }
   307     pParse->checkSchema = 1;
   308   }
   309   return p;
   310 }
   311 
   312 /*
   313 ** Locate the in-memory structure that describes 
   314 ** a particular index given the name of that index
   315 ** and the name of the database that contains the index.
   316 ** Return NULL if not found.
   317 **
   318 ** If zDatabase is 0, all databases are searched for the
   319 ** table and the first matching index is returned.  (No checking
   320 ** for duplicate index names is done.)  The search order is
   321 ** TEMP first, then MAIN, then any auxiliary databases added
   322 ** using the ATTACH command.
   323 */
   324 Index *sqlite3FindIndex(sqlite3 *db, const char *zName, const char *zDb){
   325   Index *p = 0;
   326   int i;
   327   for(i=OMIT_TEMPDB; i<db->nDb; i++){
   328     int j = (i<2) ? i^1 : i;  /* Search TEMP before MAIN */
   329     Schema *pSchema = db->aDb[j].pSchema;
   330     if( zDb && sqlite3StrICmp(zDb, db->aDb[j].zName) ) continue;
   331     assert( pSchema || (j==1 && !db->aDb[1].pBt) );
   332     if( pSchema ){
   333       p = sqlite3HashFind(&pSchema->idxHash, zName, strlen(zName)+1);
   334     }
   335     if( p ) break;
   336   }
   337   return p;
   338 }
   339 
   340 /*
   341 ** Reclaim the memory used by an index
   342 */
   343 static void freeIndex(Index *p){
   344   sqlite3_free(p->zColAff);
   345   sqlite3_free(p);
   346 }
   347 
   348 /*
   349 ** Remove the given index from the index hash table, and free
   350 ** its memory structures.
   351 **
   352 ** The index is removed from the database hash tables but
   353 ** it is not unlinked from the Table that it indexes.
   354 ** Unlinking from the Table must be done by the calling function.
   355 */
   356 static void sqliteDeleteIndex(Index *p){
   357   Index *pOld;
   358   const char *zName = p->zName;
   359 
   360   pOld = sqlite3HashInsert(&p->pSchema->idxHash, zName, strlen( zName)+1, 0);
   361   assert( pOld==0 || pOld==p );
   362   freeIndex(p);
   363 }
   364 
   365 /*
   366 ** For the index called zIdxName which is found in the database iDb,
   367 ** unlike that index from its Table then remove the index from
   368 ** the index hash table and free all memory structures associated
   369 ** with the index.
   370 */
   371 void sqlite3UnlinkAndDeleteIndex(sqlite3 *db, int iDb, const char *zIdxName){
   372   Index *pIndex;
   373   int len;
   374   Hash *pHash = &db->aDb[iDb].pSchema->idxHash;
   375 
   376   len = strlen(zIdxName);
   377   pIndex = sqlite3HashInsert(pHash, zIdxName, len+1, 0);
   378   if( pIndex ){
   379     if( pIndex->pTable->pIndex==pIndex ){
   380       pIndex->pTable->pIndex = pIndex->pNext;
   381     }else{
   382       Index *p;
   383       for(p=pIndex->pTable->pIndex; p && p->pNext!=pIndex; p=p->pNext){}
   384       if( p && p->pNext==pIndex ){
   385         p->pNext = pIndex->pNext;
   386       }
   387     }
   388     freeIndex(pIndex);
   389   }
   390   db->flags |= SQLITE_InternChanges;
   391 }
   392 
   393 /*
   394 ** Erase all schema information from the in-memory hash tables of
   395 ** a single database.  This routine is called to reclaim memory
   396 ** before the database closes.  It is also called during a rollback
   397 ** if there were schema changes during the transaction or if a
   398 ** schema-cookie mismatch occurs.
   399 **
   400 ** If iDb<=0 then reset the internal schema tables for all database
   401 ** files.  If iDb>=2 then reset the internal schema for only the
   402 ** single file indicated.
   403 */
   404 void sqlite3ResetInternalSchema(sqlite3 *db, int iDb){
   405   int i, j;
   406 
   407   assert( iDb>=0 && iDb<db->nDb );
   408   for(i=iDb; i<db->nDb; i++){
   409     Db *pDb = &db->aDb[i];
   410     if( pDb->pSchema ){
   411       sqlite3SchemaFree(pDb->pSchema);
   412     }
   413     if( iDb>0 ) return;
   414   }
   415   assert( iDb==0 );
   416   db->flags &= ~SQLITE_InternChanges;
   417 
   418   /* If one or more of the auxiliary database files has been closed,
   419   ** then remove them from the auxiliary database list.  We take the
   420   ** opportunity to do this here since we have just deleted all of the
   421   ** schema hash tables and therefore do not have to make any changes
   422   ** to any of those tables.
   423   */
   424   for(i=0; i<db->nDb; i++){
   425     struct Db *pDb = &db->aDb[i];
   426     if( pDb->pBt==0 ){
   427       if( pDb->pAux && pDb->xFreeAux ) pDb->xFreeAux(pDb->pAux);
   428       pDb->pAux = 0;
   429     }
   430   }
   431   for(i=j=2; i<db->nDb; i++){
   432     struct Db *pDb = &db->aDb[i];
   433     if( pDb->pBt==0 ){
   434       sqlite3_free(pDb->zName);
   435       pDb->zName = 0;
   436       continue;
   437     }
   438     if( j<i ){
   439       db->aDb[j] = db->aDb[i];
   440     }
   441     j++;
   442   }
   443   memset(&db->aDb[j], 0, (db->nDb-j)*sizeof(db->aDb[j]));
   444   db->nDb = j;
   445   if( db->nDb<=2 && db->aDb!=db->aDbStatic ){
   446     memcpy(db->aDbStatic, db->aDb, 2*sizeof(db->aDb[0]));
   447     sqlite3_free(db->aDb);
   448     db->aDb = db->aDbStatic;
   449   }
   450 }
   451 
   452 /*
   453 ** This routine is called when a commit occurs.
   454 */
   455 void sqlite3CommitInternalChanges(sqlite3 *db){
   456   db->flags &= ~SQLITE_InternChanges;
   457 }
   458 
   459 /*
   460 ** Clear the column names from a table or view.
   461 */
   462 static void sqliteResetColumnNames(Table *pTable){
   463   int i;
   464   Column *pCol;
   465   assert( pTable!=0 );
   466   if( (pCol = pTable->aCol)!=0 ){
   467     for(i=0; i<pTable->nCol; i++, pCol++){
   468       sqlite3_free(pCol->zName);
   469       sqlite3ExprDelete(pCol->pDflt);
   470       sqlite3_free(pCol->zType);
   471       sqlite3_free(pCol->zColl);
   472     }
   473     sqlite3_free(pTable->aCol);
   474   }
   475   pTable->aCol = 0;
   476   pTable->nCol = 0;
   477 }
   478 
   479 /*
   480 ** Remove the memory data structures associated with the given
   481 ** Table.  No changes are made to disk by this routine.
   482 **
   483 ** This routine just deletes the data structure.  It does not unlink
   484 ** the table data structure from the hash table.  Nor does it remove
   485 ** foreign keys from the sqlite.aFKey hash table.  But it does destroy
   486 ** memory structures of the indices and foreign keys associated with 
   487 ** the table.
   488 */
   489 void sqlite3DeleteTable(Table *pTable){
   490   Index *pIndex, *pNext;
   491   FKey *pFKey, *pNextFKey;
   492 
   493   if( pTable==0 ) return;
   494 
   495   /* Do not delete the table until the reference count reaches zero. */
   496   pTable->nRef--;
   497   if( pTable->nRef>0 ){
   498     return;
   499   }
   500   assert( pTable->nRef==0 );
   501 
   502   /* Delete all indices associated with this table
   503   */
   504   for(pIndex = pTable->pIndex; pIndex; pIndex=pNext){
   505     pNext = pIndex->pNext;
   506     assert( pIndex->pSchema==pTable->pSchema );
   507     sqliteDeleteIndex(pIndex);
   508   }
   509 
   510 #ifndef SQLITE_OMIT_FOREIGN_KEY
   511   /* Delete all foreign keys associated with this table.  The keys
   512   ** should have already been unlinked from the pSchema->aFKey hash table 
   513   */
   514   for(pFKey=pTable->pFKey; pFKey; pFKey=pNextFKey){
   515     pNextFKey = pFKey->pNextFrom;
   516     assert( sqlite3HashFind(&pTable->pSchema->aFKey,
   517                            pFKey->zTo, strlen(pFKey->zTo)+1)!=pFKey );
   518     sqlite3_free(pFKey);
   519   }
   520 #endif
   521 
   522   /* Delete the Table structure itself.
   523   */
   524   sqliteResetColumnNames(pTable);
   525   sqlite3_free(pTable->zName);
   526   sqlite3_free(pTable->zColAff);
   527   sqlite3SelectDelete(pTable->pSelect);
   528 #ifndef SQLITE_OMIT_CHECK
   529   sqlite3ExprDelete(pTable->pCheck);
   530 #endif
   531   sqlite3VtabClear(pTable);
   532   sqlite3_free(pTable);
   533 }
   534 
   535 /*
   536 ** Unlink the given table from the hash tables and the delete the
   537 ** table structure with all its indices and foreign keys.
   538 */
   539 void sqlite3UnlinkAndDeleteTable(sqlite3 *db, int iDb, const char *zTabName){
   540   Table *p;
   541   FKey *pF1, *pF2;
   542   Db *pDb;
   543 
   544   assert( db!=0 );
   545   assert( iDb>=0 && iDb<db->nDb );
   546   assert( zTabName && zTabName[0] );
   547   pDb = &db->aDb[iDb];
   548   p = sqlite3HashInsert(&pDb->pSchema->tblHash, zTabName, strlen(zTabName)+1,0);
   549   if( p ){
   550 #ifndef SQLITE_OMIT_FOREIGN_KEY
   551     for(pF1=p->pFKey; pF1; pF1=pF1->pNextFrom){
   552       int nTo = strlen(pF1->zTo) + 1;
   553       pF2 = sqlite3HashFind(&pDb->pSchema->aFKey, pF1->zTo, nTo);
   554       if( pF2==pF1 ){
   555         sqlite3HashInsert(&pDb->pSchema->aFKey, pF1->zTo, nTo, pF1->pNextTo);
   556       }else{
   557         while( pF2 && pF2->pNextTo!=pF1 ){ pF2=pF2->pNextTo; }
   558         if( pF2 ){
   559           pF2->pNextTo = pF1->pNextTo;
   560         }
   561       }
   562     }
   563 #endif
   564     sqlite3DeleteTable(p);
   565   }
   566   db->flags |= SQLITE_InternChanges;
   567 }
   568 
   569 /*
   570 ** Given a token, return a string that consists of the text of that
   571 ** token with any quotations removed.  Space to hold the returned string
   572 ** is obtained from sqliteMalloc() and must be freed by the calling
   573 ** function.
   574 **
   575 ** Tokens are often just pointers into the original SQL text and so
   576 ** are not \000 terminated and are not persistent.  The returned string
   577 ** is \000 terminated and is persistent.
   578 */
   579 char *sqlite3NameFromToken(sqlite3 *db, Token *pName){
   580   char *zName;
   581   if( pName ){
   582     zName = sqlite3DbStrNDup(db, (char*)pName->z, pName->n);
   583     sqlite3Dequote(zName);
   584   }else{
   585     zName = 0;
   586   }
   587   return zName;
   588 }
   589 
   590 /*
   591 ** Open the sqlite_master table stored in database number iDb for
   592 ** writing. The table is opened using cursor 0.
   593 */
   594 void sqlite3OpenMasterTable(Parse *p, int iDb){
   595   Vdbe *v = sqlite3GetVdbe(p);
   596   sqlite3TableLock(p, iDb, MASTER_ROOT, 1, SCHEMA_TABLE(iDb));
   597   sqlite3VdbeAddOp(v, OP_Integer, iDb, 0);
   598   sqlite3VdbeAddOp(v, OP_OpenWrite, 0, MASTER_ROOT);
   599   sqlite3VdbeAddOp(v, OP_SetNumColumns, 0, 5); /* sqlite_master has 5 columns */
   600 }
   601 
   602 /*
   603 ** The token *pName contains the name of a database (either "main" or
   604 ** "temp" or the name of an attached db). This routine returns the
   605 ** index of the named database in db->aDb[], or -1 if the named db 
   606 ** does not exist.
   607 */
   608 int sqlite3FindDb(sqlite3 *db, Token *pName){
   609   int i = -1;    /* Database number */
   610   int n;         /* Number of characters in the name */
   611   Db *pDb;       /* A database whose name space is being searched */
   612   char *zName;   /* Name we are searching for */
   613 
   614   zName = sqlite3NameFromToken(db, pName);
   615   if( zName ){
   616     n = strlen(zName);
   617     for(i=(db->nDb-1), pDb=&db->aDb[i]; i>=0; i--, pDb--){
   618       if( (!OMIT_TEMPDB || i!=1 ) && n==strlen(pDb->zName) && 
   619           0==sqlite3StrICmp(pDb->zName, zName) ){
   620         break;
   621       }
   622     }
   623     sqlite3_free(zName);
   624   }
   625   return i;
   626 }
   627 
   628 /* The table or view or trigger name is passed to this routine via tokens
   629 ** pName1 and pName2. If the table name was fully qualified, for example:
   630 **
   631 ** CREATE TABLE xxx.yyy (...);
   632 ** 
   633 ** Then pName1 is set to "xxx" and pName2 "yyy". On the other hand if
   634 ** the table name is not fully qualified, i.e.:
   635 **
   636 ** CREATE TABLE yyy(...);
   637 **
   638 ** Then pName1 is set to "yyy" and pName2 is "".
   639 **
   640 ** This routine sets the *ppUnqual pointer to point at the token (pName1 or
   641 ** pName2) that stores the unqualified table name.  The index of the
   642 ** database "xxx" is returned.
   643 */
   644 int sqlite3TwoPartName(
   645   Parse *pParse,      /* Parsing and code generating context */
   646   Token *pName1,      /* The "xxx" in the name "xxx.yyy" or "xxx" */
   647   Token *pName2,      /* The "yyy" in the name "xxx.yyy" */
   648   Token **pUnqual     /* Write the unqualified object name here */
   649 ){
   650   int iDb;                    /* Database holding the object */
   651   sqlite3 *db = pParse->db;
   652 
   653   if( pName2 && pName2->n>0 ){
   654     assert( !db->init.busy );
   655     *pUnqual = pName2;
   656     iDb = sqlite3FindDb(db, pName1);
   657     if( iDb<0 ){
   658       sqlite3ErrorMsg(pParse, "unknown database %T", pName1);
   659       pParse->nErr++;
   660       return -1;
   661     }
   662   }else{
   663     assert( db->init.iDb==0 || db->init.busy );
   664     iDb = db->init.iDb;
   665     *pUnqual = pName1;
   666   }
   667   return iDb;
   668 }
   669 
   670 /*
   671 ** This routine is used to check if the UTF-8 string zName is a legal
   672 ** unqualified name for a new schema object (table, index, view or
   673 ** trigger). All names are legal except those that begin with the string
   674 ** "sqlite_" (in upper, lower or mixed case). This portion of the namespace
   675 ** is reserved for internal use.
   676 */
   677 int sqlite3CheckObjectName(Parse *pParse, const char *zName){
   678   if( !pParse->db->init.busy && pParse->nested==0 
   679           && (pParse->db->flags & SQLITE_WriteSchema)==0
   680           && 0==sqlite3StrNICmp(zName, "sqlite_", 7) ){
   681     sqlite3ErrorMsg(pParse, "object name reserved for internal use: %s", zName);
   682     return SQLITE_ERROR;
   683   }
   684   return SQLITE_OK;
   685 }
   686 
   687 /*
   688 ** Begin constructing a new table representation in memory.  This is
   689 ** the first of several action routines that get called in response
   690 ** to a CREATE TABLE statement.  In particular, this routine is called
   691 ** after seeing tokens "CREATE" and "TABLE" and the table name. The isTemp
   692 ** flag is true if the table should be stored in the auxiliary database
   693 ** file instead of in the main database file.  This is normally the case
   694 ** when the "TEMP" or "TEMPORARY" keyword occurs in between
   695 ** CREATE and TABLE.
   696 **
   697 ** The new table record is initialized and put in pParse->pNewTable.
   698 ** As more of the CREATE TABLE statement is parsed, additional action
   699 ** routines will be called to add more information to this record.
   700 ** At the end of the CREATE TABLE statement, the sqlite3EndTable() routine
   701 ** is called to complete the construction of the new table record.
   702 */
   703 void sqlite3StartTable(
   704   Parse *pParse,   /* Parser context */
   705   Token *pName1,   /* First part of the name of the table or view */
   706   Token *pName2,   /* Second part of the name of the table or view */
   707   int isTemp,      /* True if this is a TEMP table */
   708   int isView,      /* True if this is a VIEW */
   709   int isVirtual,   /* True if this is a VIRTUAL table */
   710   int noErr        /* Do nothing if table already exists */
   711 ){
   712   Table *pTable;
   713   char *zName = 0; /* The name of the new table */
   714   sqlite3 *db = pParse->db;
   715   Vdbe *v;
   716   int iDb;         /* Database number to create the table in */
   717   Token *pName;    /* Unqualified name of the table to create */
   718 
   719   /* The table or view name to create is passed to this routine via tokens
   720   ** pName1 and pName2. If the table name was fully qualified, for example:
   721   **
   722   ** CREATE TABLE xxx.yyy (...);
   723   ** 
   724   ** Then pName1 is set to "xxx" and pName2 "yyy". On the other hand if
   725   ** the table name is not fully qualified, i.e.:
   726   **
   727   ** CREATE TABLE yyy(...);
   728   **
   729   ** Then pName1 is set to "yyy" and pName2 is "".
   730   **
   731   ** The call below sets the pName pointer to point at the token (pName1 or
   732   ** pName2) that stores the unqualified table name. The variable iDb is
   733   ** set to the index of the database that the table or view is to be
   734   ** created in.
   735   */
   736   iDb = sqlite3TwoPartName(pParse, pName1, pName2, &pName);
   737   if( iDb<0 ) return;
   738   if( !OMIT_TEMPDB && isTemp && iDb>1 ){
   739     /* If creating a temp table, the name may not be qualified */
   740     sqlite3ErrorMsg(pParse, "temporary table name must be unqualified");
   741     return;
   742   }
   743   if( !OMIT_TEMPDB && isTemp ) iDb = 1;
   744 
   745   pParse->sNameToken = *pName;
   746   zName = sqlite3NameFromToken(db, pName);
   747   if( zName==0 ) return;
   748   if( SQLITE_OK!=sqlite3CheckObjectName(pParse, zName) ){
   749     goto begin_table_error;
   750   }
   751   if( db->init.iDb==1 ) isTemp = 1;
   752 #ifndef SQLITE_OMIT_AUTHORIZATION
   753   assert( (isTemp & 1)==isTemp );
   754   {
   755     int code;
   756     char *zDb = db->aDb[iDb].zName;
   757     if( sqlite3AuthCheck(pParse, SQLITE_INSERT, SCHEMA_TABLE(isTemp), 0, zDb) ){
   758       goto begin_table_error;
   759     }
   760     if( isView ){
   761       if( !OMIT_TEMPDB && isTemp ){
   762         code = SQLITE_CREATE_TEMP_VIEW;
   763       }else{
   764         code = SQLITE_CREATE_VIEW;
   765       }
   766     }else{
   767       if( !OMIT_TEMPDB && isTemp ){
   768         code = SQLITE_CREATE_TEMP_TABLE;
   769       }else{
   770         code = SQLITE_CREATE_TABLE;
   771       }
   772     }
   773     if( !isVirtual && sqlite3AuthCheck(pParse, code, zName, 0, zDb) ){
   774       goto begin_table_error;
   775     }
   776   }
   777 #endif
   778 
   779   /* Make sure the new table name does not collide with an existing
   780   ** index or table name in the same database.  Issue an error message if
   781   ** it does. The exception is if the statement being parsed was passed
   782   ** to an sqlite3_declare_vtab() call. In that case only the column names
   783   ** and types will be used, so there is no need to test for namespace
   784   ** collisions.
   785   */
   786   if( !IN_DECLARE_VTAB ){
   787     if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){
   788       goto begin_table_error;
   789     }
   790     pTable = sqlite3FindTable(db, zName, db->aDb[iDb].zName);
   791     if( pTable ){
   792       if( !noErr ){
   793         sqlite3ErrorMsg(pParse, "table %T already exists", pName);
   794       }
   795       goto begin_table_error;
   796     }
   797     if( sqlite3FindIndex(db, zName, 0)!=0 && (iDb==0 || !db->init.busy) ){
   798       sqlite3ErrorMsg(pParse, "there is already an index named %s", zName);
   799       goto begin_table_error;
   800     }
   801   }
   802 
   803   pTable = sqlite3DbMallocZero(db, sizeof(Table));
   804   if( pTable==0 ){
   805     db->mallocFailed = 1;
   806     pParse->rc = SQLITE_NOMEM;
   807     pParse->nErr++;
   808     goto begin_table_error;
   809   }
   810   pTable->zName = zName;
   811   pTable->iPKey = -1;
   812   pTable->pSchema = db->aDb[iDb].pSchema;
   813   pTable->nRef = 1;
   814   if( pParse->pNewTable ) sqlite3DeleteTable(pParse->pNewTable);
   815   pParse->pNewTable = pTable;
   816 
   817   /* If this is the magic sqlite_sequence table used by autoincrement,
   818   ** then record a pointer to this table in the main database structure
   819   ** so that INSERT can find the table easily.
   820   */
   821 #ifndef SQLITE_OMIT_AUTOINCREMENT
   822   if( !pParse->nested && strcmp(zName, "sqlite_sequence")==0 ){
   823     pTable->pSchema->pSeqTab = pTable;
   824   }
   825 #endif
   826 
   827   /* Begin generating the code that will insert the table record into
   828   ** the SQLITE_MASTER table.  Note in particular that we must go ahead
   829   ** and allocate the record number for the table entry now.  Before any
   830   ** PRIMARY KEY or UNIQUE keywords are parsed.  Those keywords will cause
   831   ** indices to be created and the table record must come before the 
   832   ** indices.  Hence, the record number for the table must be allocated
   833   ** now.
   834   */
   835   if( !db->init.busy && (v = sqlite3GetVdbe(pParse))!=0 ){
   836     int lbl;
   837     int fileFormat;
   838     sqlite3BeginWriteOperation(pParse, 0, iDb);
   839 
   840 #ifndef SQLITE_OMIT_VIRTUALTABLE
   841     if( isVirtual ){
   842       sqlite3VdbeAddOp(v, OP_VBegin, 0, 0);
   843     }
   844 #endif
   845 
   846     /* If the file format and encoding in the database have not been set, 
   847     ** set them now.
   848     */
   849     sqlite3VdbeAddOp(v, OP_ReadCookie, iDb, 1);   /* file_format */
   850     sqlite3VdbeUsesBtree(v, iDb);
   851     lbl = sqlite3VdbeMakeLabel(v);
   852     sqlite3VdbeAddOp(v, OP_If, 0, lbl);
   853     fileFormat = (db->flags & SQLITE_LegacyFileFmt)!=0 ?
   854                   1 : SQLITE_MAX_FILE_FORMAT;
   855     sqlite3VdbeAddOp(v, OP_Integer, fileFormat, 0);
   856     sqlite3VdbeAddOp(v, OP_SetCookie, iDb, 1);
   857     sqlite3VdbeAddOp(v, OP_Integer, ENC(db), 0);
   858     sqlite3VdbeAddOp(v, OP_SetCookie, iDb, 4);
   859     sqlite3VdbeResolveLabel(v, lbl);
   860 
   861     /* This just creates a place-holder record in the sqlite_master table.
   862     ** The record created does not contain anything yet.  It will be replaced
   863     ** by the real entry in code generated at sqlite3EndTable().
   864     **
   865     ** The rowid for the new entry is left on the top of the stack.
   866     ** The rowid value is needed by the code that sqlite3EndTable will
   867     ** generate.
   868     */
   869 #if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE)
   870     if( isView || isVirtual ){
   871       sqlite3VdbeAddOp(v, OP_Integer, 0, 0);
   872     }else
   873 #endif
   874     {
   875       sqlite3VdbeAddOp(v, OP_CreateTable, iDb, 0);
   876     }
   877     sqlite3OpenMasterTable(pParse, iDb);
   878     sqlite3VdbeAddOp(v, OP_NewRowid, 0, 0);
   879     sqlite3VdbeAddOp(v, OP_Dup, 0, 0);
   880     sqlite3VdbeAddOp(v, OP_Null, 0, 0);
   881     sqlite3VdbeAddOp(v, OP_Insert, 0, OPFLAG_APPEND);
   882     sqlite3VdbeAddOp(v, OP_Close, 0, 0);
   883     sqlite3VdbeAddOp(v, OP_Pull, 1, 0);
   884   }
   885 
   886   /* Normal (non-error) return. */
   887   return;
   888 
   889   /* If an error occurs, we jump here */
   890 begin_table_error:
   891   sqlite3_free(zName);
   892   return;
   893 }
   894 
   895 /*
   896 ** This macro is used to compare two strings in a case-insensitive manner.
   897 ** It is slightly faster than calling sqlite3StrICmp() directly, but
   898 ** produces larger code.
   899 **
   900 ** WARNING: This macro is not compatible with the strcmp() family. It
   901 ** returns true if the two strings are equal, otherwise false.
   902 */
   903 #define STRICMP(x, y) (\
   904 sqlite3UpperToLower[*(unsigned char *)(x)]==   \
   905 sqlite3UpperToLower[*(unsigned char *)(y)]     \
   906 && sqlite3StrICmp((x)+1,(y)+1)==0 )
   907 
   908 /*
   909 ** Add a new column to the table currently being constructed.
   910 **
   911 ** The parser calls this routine once for each column declaration
   912 ** in a CREATE TABLE statement.  sqlite3StartTable() gets called
   913 ** first to get things going.  Then this routine is called for each
   914 ** column.
   915 */
   916 void sqlite3AddColumn(Parse *pParse, Token *pName){
   917   Table *p;
   918   int i;
   919   char *z;
   920   Column *pCol;
   921   if( (p = pParse->pNewTable)==0 ) return;
   922   if( p->nCol+1>SQLITE_MAX_COLUMN ){
   923     sqlite3ErrorMsg(pParse, "too many columns on %s", p->zName);
   924     return;
   925   }
   926   z = sqlite3NameFromToken(pParse->db, pName);
   927   if( z==0 ) return;
   928   for(i=0; i<p->nCol; i++){
   929     if( STRICMP(z, p->aCol[i].zName) ){
   930       sqlite3ErrorMsg(pParse, "duplicate column name: %s", z);
   931       sqlite3_free(z);
   932       return;
   933     }
   934   }
   935   if( (p->nCol & 0x7)==0 ){
   936     Column *aNew;
   937     aNew = sqlite3DbRealloc(pParse->db,p->aCol,(p->nCol+8)*sizeof(p->aCol[0]));
   938     if( aNew==0 ){
   939       sqlite3_free(z);
   940       return;
   941     }
   942     p->aCol = aNew;
   943   }
   944   pCol = &p->aCol[p->nCol];
   945   memset(pCol, 0, sizeof(p->aCol[0]));
   946   pCol->zName = z;
   947  
   948   /* If there is no type specified, columns have the default affinity
   949   ** 'NONE'. If there is a type specified, then sqlite3AddColumnType() will
   950   ** be called next to set pCol->affinity correctly.
   951   */
   952   pCol->affinity = SQLITE_AFF_NONE;
   953   p->nCol++;
   954 }
   955 
   956 /*
   957 ** This routine is called by the parser while in the middle of
   958 ** parsing a CREATE TABLE statement.  A "NOT NULL" constraint has
   959 ** been seen on a column.  This routine sets the notNull flag on
   960 ** the column currently under construction.
   961 */
   962 void sqlite3AddNotNull(Parse *pParse, int onError){
   963   Table *p;
   964   int i;
   965   if( (p = pParse->pNewTable)==0 ) return;
   966   i = p->nCol-1;
   967   if( i>=0 ) p->aCol[i].notNull = onError;
   968 }
   969 
   970 /*
   971 ** Scan the column type name zType (length nType) and return the
   972 ** associated affinity type.
   973 **
   974 ** This routine does a case-independent search of zType for the 
   975 ** substrings in the following table. If one of the substrings is
   976 ** found, the corresponding affinity is returned. If zType contains
   977 ** more than one of the substrings, entries toward the top of 
   978 ** the table take priority. For example, if zType is 'BLOBINT', 
   979 ** SQLITE_AFF_INTEGER is returned.
   980 **
   981 ** Substring     | Affinity
   982 ** --------------------------------
   983 ** 'INT'         | SQLITE_AFF_INTEGER
   984 ** 'CHAR'        | SQLITE_AFF_TEXT
   985 ** 'CLOB'        | SQLITE_AFF_TEXT
   986 ** 'TEXT'        | SQLITE_AFF_TEXT
   987 ** 'BLOB'        | SQLITE_AFF_NONE
   988 ** 'REAL'        | SQLITE_AFF_REAL
   989 ** 'FLOA'        | SQLITE_AFF_REAL
   990 ** 'DOUB'        | SQLITE_AFF_REAL
   991 **
   992 ** If none of the substrings in the above table are found,
   993 ** SQLITE_AFF_NUMERIC is returned.
   994 */
   995 char sqlite3AffinityType(const Token *pType){
   996   u32 h = 0;
   997   char aff = SQLITE_AFF_NUMERIC;
   998   const unsigned char *zIn = pType->z;
   999   const unsigned char *zEnd = &pType->z[pType->n];
  1000 
  1001   while( zIn!=zEnd ){
  1002     h = (h<<8) + sqlite3UpperToLower[*zIn];
  1003     zIn++;
  1004     if( h==(('c'<<24)+('h'<<16)+('a'<<8)+'r') ){             /* CHAR */
  1005       aff = SQLITE_AFF_TEXT; 
  1006     }else if( h==(('c'<<24)+('l'<<16)+('o'<<8)+'b') ){       /* CLOB */
  1007       aff = SQLITE_AFF_TEXT;
  1008     }else if( h==(('t'<<24)+('e'<<16)+('x'<<8)+'t') ){       /* TEXT */
  1009       aff = SQLITE_AFF_TEXT;
  1010     }else if( h==(('b'<<24)+('l'<<16)+('o'<<8)+'b')          /* BLOB */
  1011         && (aff==SQLITE_AFF_NUMERIC || aff==SQLITE_AFF_REAL) ){
  1012       aff = SQLITE_AFF_NONE;
  1013 #ifndef SQLITE_OMIT_FLOATING_POINT
  1014     }else if( h==(('r'<<24)+('e'<<16)+('a'<<8)+'l')          /* REAL */
  1015         && aff==SQLITE_AFF_NUMERIC ){
  1016       aff = SQLITE_AFF_REAL;
  1017     }else if( h==(('f'<<24)+('l'<<16)+('o'<<8)+'a')          /* FLOA */
  1018         && aff==SQLITE_AFF_NUMERIC ){
  1019       aff = SQLITE_AFF_REAL;
  1020     }else if( h==(('d'<<24)+('o'<<16)+('u'<<8)+'b')          /* DOUB */
  1021         && aff==SQLITE_AFF_NUMERIC ){
  1022       aff = SQLITE_AFF_REAL;
  1023 #endif
  1024     }else if( (h&0x00FFFFFF)==(('i'<<16)+('n'<<8)+'t') ){    /* INT */
  1025       aff = SQLITE_AFF_INTEGER;
  1026       break;
  1027     }
  1028   }
  1029 
  1030   return aff;
  1031 }
  1032 
  1033 /*
  1034 ** This routine is called by the parser while in the middle of
  1035 ** parsing a CREATE TABLE statement.  The pFirst token is the first
  1036 ** token in the sequence of tokens that describe the type of the
  1037 ** column currently under construction.   pLast is the last token
  1038 ** in the sequence.  Use this information to construct a string
  1039 ** that contains the typename of the column and store that string
  1040 ** in zType.
  1041 */ 
  1042 void sqlite3AddColumnType(Parse *pParse, Token *pType){
  1043   Table *p;
  1044   int i;
  1045   Column *pCol;
  1046 
  1047   if( (p = pParse->pNewTable)==0 ) return;
  1048   i = p->nCol-1;
  1049   if( i<0 ) return;
  1050   pCol = &p->aCol[i];
  1051   sqlite3_free(pCol->zType);
  1052   pCol->zType = sqlite3NameFromToken(pParse->db, pType);
  1053   pCol->affinity = sqlite3AffinityType(pType);
  1054 }
  1055 
  1056 /*
  1057 ** The expression is the default value for the most recently added column
  1058 ** of the table currently under construction.
  1059 **
  1060 ** Default value expressions must be constant.  Raise an exception if this
  1061 ** is not the case.
  1062 **
  1063 ** This routine is called by the parser while in the middle of
  1064 ** parsing a CREATE TABLE statement.
  1065 */
  1066 void sqlite3AddDefaultValue(Parse *pParse, Expr *pExpr){
  1067   Table *p;
  1068   Column *pCol;
  1069   if( (p = pParse->pNewTable)!=0 ){
  1070     pCol = &(p->aCol[p->nCol-1]);
  1071     if( !sqlite3ExprIsConstantOrFunction(pExpr) ){
  1072       sqlite3ErrorMsg(pParse, "default value of column [%s] is not constant",
  1073           pCol->zName);
  1074     }else{
  1075       Expr *pCopy;
  1076       sqlite3 *db = pParse->db;
  1077       sqlite3ExprDelete(pCol->pDflt);
  1078       pCol->pDflt = pCopy = sqlite3ExprDup(db, pExpr);
  1079       if( pCopy ){
  1080         sqlite3TokenCopy(db, &pCopy->span, &pExpr->span);
  1081       }
  1082     }
  1083   }
  1084   sqlite3ExprDelete(pExpr);
  1085 }
  1086 
  1087 /*
  1088 ** Designate the PRIMARY KEY for the table.  pList is a list of names 
  1089 ** of columns that form the primary key.  If pList is NULL, then the
  1090 ** most recently added column of the table is the primary key.
  1091 **
  1092 ** A table can have at most one primary key.  If the table already has
  1093 ** a primary key (and this is the second primary key) then create an
  1094 ** error.
  1095 **
  1096 ** If the PRIMARY KEY is on a single column whose datatype is INTEGER,
  1097 ** then we will try to use that column as the rowid.  Set the Table.iPKey
  1098 ** field of the table under construction to be the index of the
  1099 ** INTEGER PRIMARY KEY column.  Table.iPKey is set to -1 if there is
  1100 ** no INTEGER PRIMARY KEY.
  1101 **
  1102 ** If the key is not an INTEGER PRIMARY KEY, then create a unique
  1103 ** index for the key.  No index is created for INTEGER PRIMARY KEYs.
  1104 */
  1105 void sqlite3AddPrimaryKey(
  1106   Parse *pParse,    /* Parsing context */
  1107   ExprList *pList,  /* List of field names to be indexed */
  1108   int onError,      /* What to do with a uniqueness conflict */
  1109   int autoInc,      /* True if the AUTOINCREMENT keyword is present */
  1110   int sortOrder     /* SQLITE_SO_ASC or SQLITE_SO_DESC */
  1111 ){
  1112   Table *pTab = pParse->pNewTable;
  1113   char *zType = 0;
  1114   int iCol = -1, i;
  1115   if( pTab==0 || IN_DECLARE_VTAB ) goto primary_key_exit;
  1116   if( pTab->hasPrimKey ){
  1117     sqlite3ErrorMsg(pParse, 
  1118       "table \"%s\" has more than one primary key", pTab->zName);
  1119     goto primary_key_exit;
  1120   }
  1121   pTab->hasPrimKey = 1;
  1122   if( pList==0 ){
  1123     iCol = pTab->nCol - 1;
  1124     pTab->aCol[iCol].isPrimKey = 1;
  1125   }else{
  1126     for(i=0; i<pList->nExpr; i++){
  1127       for(iCol=0; iCol<pTab->nCol; iCol++){
  1128         if( sqlite3StrICmp(pList->a[i].zName, pTab->aCol[iCol].zName)==0 ){
  1129           break;
  1130         }
  1131       }
  1132       if( iCol<pTab->nCol ){
  1133         pTab->aCol[iCol].isPrimKey = 1;
  1134       }
  1135     }
  1136     if( pList->nExpr>1 ) iCol = -1;
  1137   }
  1138   if( iCol>=0 && iCol<pTab->nCol ){
  1139     zType = pTab->aCol[iCol].zType;
  1140   }
  1141   if( zType && sqlite3StrICmp(zType, "INTEGER")==0
  1142         && sortOrder==SQLITE_SO_ASC ){
  1143     pTab->iPKey = iCol;
  1144     pTab->keyConf = onError;
  1145     pTab->autoInc = autoInc;
  1146   }else if( autoInc ){
  1147 #ifndef SQLITE_OMIT_AUTOINCREMENT
  1148     sqlite3ErrorMsg(pParse, "AUTOINCREMENT is only allowed on an "
  1149        "INTEGER PRIMARY KEY");
  1150 #endif
  1151   }else{
  1152     sqlite3CreateIndex(pParse, 0, 0, 0, pList, onError, 0, 0, sortOrder, 0);
  1153     pList = 0;
  1154   }
  1155 
  1156 primary_key_exit:
  1157   sqlite3ExprListDelete(pList);
  1158   return;
  1159 }
  1160 
  1161 /*
  1162 ** Add a new CHECK constraint to the table currently under construction.
  1163 */
  1164 void sqlite3AddCheckConstraint(
  1165   Parse *pParse,    /* Parsing context */
  1166   Expr *pCheckExpr  /* The check expression */
  1167 ){
  1168 #ifndef SQLITE_OMIT_CHECK
  1169   Table *pTab = pParse->pNewTable;
  1170   sqlite3 *db = pParse->db;
  1171   if( pTab && !IN_DECLARE_VTAB ){
  1172     /* The CHECK expression must be duplicated so that tokens refer
  1173     ** to malloced space and not the (ephemeral) text of the CREATE TABLE
  1174     ** statement */
  1175     pTab->pCheck = sqlite3ExprAnd(db, pTab->pCheck, 
  1176                                   sqlite3ExprDup(db, pCheckExpr));
  1177   }
  1178 #endif
  1179   sqlite3ExprDelete(pCheckExpr);
  1180 }
  1181 
  1182 /*
  1183 ** Set the collation function of the most recently parsed table column
  1184 ** to the CollSeq given.
  1185 */
  1186 void sqlite3AddCollateType(Parse *pParse, const char *zType, int nType){
  1187   Table *p;
  1188   int i;
  1189 
  1190   if( (p = pParse->pNewTable)==0 ) return;
  1191   i = p->nCol-1;
  1192 
  1193   if( sqlite3LocateCollSeq(pParse, zType, nType) ){
  1194     Index *pIdx;
  1195     p->aCol[i].zColl = sqlite3DbStrNDup(pParse->db, zType, nType);
  1196   
  1197     /* If the column is declared as "<name> PRIMARY KEY COLLATE <type>",
  1198     ** then an index may have been created on this column before the
  1199     ** collation type was added. Correct this if it is the case.
  1200     */
  1201     for(pIdx=p->pIndex; pIdx; pIdx=pIdx->pNext){
  1202       assert( pIdx->nColumn==1 );
  1203       if( pIdx->aiColumn[0]==i ){
  1204         pIdx->azColl[0] = p->aCol[i].zColl;
  1205       }
  1206     }
  1207   }
  1208 }
  1209 
  1210 /*
  1211 ** This function returns the collation sequence for database native text
  1212 ** encoding identified by the string zName, length nName.
  1213 **
  1214 ** If the requested collation sequence is not available, or not available
  1215 ** in the database native encoding, the collation factory is invoked to
  1216 ** request it. If the collation factory does not supply such a sequence,
  1217 ** and the sequence is available in another text encoding, then that is
  1218 ** returned instead.
  1219 **
  1220 ** If no versions of the requested collations sequence are available, or
  1221 ** another error occurs, NULL is returned and an error message written into
  1222 ** pParse.
  1223 **
  1224 ** This routine is a wrapper around sqlite3FindCollSeq().  This routine
  1225 ** invokes the collation factory if the named collation cannot be found
  1226 ** and generates an error message.
  1227 */
  1228 CollSeq *sqlite3LocateCollSeq(Parse *pParse, const char *zName, int nName){
  1229   sqlite3 *db = pParse->db;
  1230   u8 enc = ENC(db);
  1231   u8 initbusy = db->init.busy;
  1232   CollSeq *pColl;
  1233 
  1234   pColl = sqlite3FindCollSeq(db, enc, zName, nName, initbusy);
  1235   if( !initbusy && (!pColl || !pColl->xCmp) ){
  1236     pColl = sqlite3GetCollSeq(db, pColl, zName, nName);
  1237     if( !pColl ){
  1238       if( nName<0 ){
  1239         nName = strlen(zName);
  1240       }
  1241       sqlite3ErrorMsg(pParse, "no such collation sequence: %.*s", nName, zName);
  1242       pColl = 0;
  1243     }
  1244   }
  1245 
  1246   return pColl;
  1247 }
  1248 
  1249 
  1250 /*
  1251 ** Generate code that will increment the schema cookie.
  1252 **
  1253 ** The schema cookie is used to determine when the schema for the
  1254 ** database changes.  After each schema change, the cookie value
  1255 ** changes.  When a process first reads the schema it records the
  1256 ** cookie.  Thereafter, whenever it goes to access the database,
  1257 ** it checks the cookie to make sure the schema has not changed
  1258 ** since it was last read.
  1259 **
  1260 ** This plan is not completely bullet-proof.  It is possible for
  1261 ** the schema to change multiple times and for the cookie to be
  1262 ** set back to prior value.  But schema changes are infrequent
  1263 ** and the probability of hitting the same cookie value is only
  1264 ** 1 chance in 2^32.  So we're safe enough.
  1265 */
  1266 void sqlite3ChangeCookie(sqlite3 *db, Vdbe *v, int iDb){
  1267   sqlite3VdbeAddOp(v, OP_Integer, db->aDb[iDb].pSchema->schema_cookie+1, 0);
  1268   sqlite3VdbeAddOp(v, OP_SetCookie, iDb, 0);
  1269 }
  1270 
  1271 /*
  1272 ** Measure the number of characters needed to output the given
  1273 ** identifier.  The number returned includes any quotes used
  1274 ** but does not include the null terminator.
  1275 **
  1276 ** The estimate is conservative.  It might be larger that what is
  1277 ** really needed.
  1278 */
  1279 static int identLength(const char *z){
  1280   int n;
  1281   for(n=0; *z; n++, z++){
  1282     if( *z=='"' ){ n++; }
  1283   }
  1284   return n + 2;
  1285 }
  1286 
  1287 /*
  1288 ** Write an identifier onto the end of the given string.  Add
  1289 ** quote characters as needed.
  1290 */
  1291 static void identPut(char *z, int *pIdx, char *zSignedIdent){
  1292   unsigned char *zIdent = (unsigned char*)zSignedIdent;
  1293   int i, j, needQuote;
  1294   i = *pIdx;
  1295   for(j=0; zIdent[j]; j++){
  1296     if( !isalnum(zIdent[j]) && zIdent[j]!='_' ) break;
  1297   }
  1298   needQuote =  zIdent[j]!=0 || isdigit(zIdent[0])
  1299                   || sqlite3KeywordCode(zIdent, j)!=TK_ID;
  1300   if( needQuote ) z[i++] = '"';
  1301   for(j=0; zIdent[j]; j++){
  1302     z[i++] = zIdent[j];
  1303     if( zIdent[j]=='"' ) z[i++] = '"';
  1304   }
  1305   if( needQuote ) z[i++] = '"';
  1306   z[i] = 0;
  1307   *pIdx = i;
  1308 }
  1309 
  1310 /*
  1311 ** Generate a CREATE TABLE statement appropriate for the given
  1312 ** table.  Memory to hold the text of the statement is obtained
  1313 ** from sqliteMalloc() and must be freed by the calling function.
  1314 */
  1315 static char *createTableStmt(Table *p, int isTemp){
  1316   int i, k, n;
  1317   char *zStmt;
  1318   char *zSep, *zSep2, *zEnd, *z;
  1319   Column *pCol;
  1320   n = 0;
  1321   for(pCol = p->aCol, i=0; i<p->nCol; i++, pCol++){
  1322     n += identLength(pCol->zName);
  1323     z = pCol->zType;
  1324     if( z ){
  1325       n += (strlen(z) + 1);
  1326     }
  1327   }
  1328   n += identLength(p->zName);
  1329   if( n<50 ){
  1330     zSep = "";
  1331     zSep2 = ",";
  1332     zEnd = ")";
  1333   }else{
  1334     zSep = "\n  ";
  1335     zSep2 = ",\n  ";
  1336     zEnd = "\n)";
  1337   }
  1338   n += 35 + 6*p->nCol;
  1339   zStmt = sqlite3_malloc( n );
  1340   if( zStmt==0 ) return 0;
  1341   sqlite3_snprintf(n, zStmt,
  1342                   !OMIT_TEMPDB&&isTemp ? "CREATE TEMP TABLE ":"CREATE TABLE ");
  1343   k = strlen(zStmt);
  1344   identPut(zStmt, &k, p->zName);
  1345   zStmt[k++] = '(';
  1346   for(pCol=p->aCol, i=0; i<p->nCol; i++, pCol++){
  1347     sqlite3_snprintf(n-k, &zStmt[k], zSep);
  1348     k += strlen(&zStmt[k]);
  1349     zSep = zSep2;
  1350     identPut(zStmt, &k, pCol->zName);
  1351     if( (z = pCol->zType)!=0 ){
  1352       zStmt[k++] = ' ';
  1353       assert( strlen(z)+k+1<=n );
  1354       sqlite3_snprintf(n-k, &zStmt[k], "%s", z);
  1355       k += strlen(z);
  1356     }
  1357   }
  1358   sqlite3_snprintf(n-k, &zStmt[k], "%s", zEnd);
  1359   return zStmt;
  1360 }
  1361 
  1362 /*
  1363 ** This routine is called to report the final ")" that terminates
  1364 ** a CREATE TABLE statement.
  1365 **
  1366 ** The table structure that other action routines have been building
  1367 ** is added to the internal hash tables, assuming no errors have
  1368 ** occurred.
  1369 **
  1370 ** An entry for the table is made in the master table on disk, unless
  1371 ** this is a temporary table or db->init.busy==1.  When db->init.busy==1
  1372 ** it means we are reading the sqlite_master table because we just
  1373 ** connected to the database or because the sqlite_master table has
  1374 ** recently changed, so the entry for this table already exists in
  1375 ** the sqlite_master table.  We do not want to create it again.
  1376 **
  1377 ** If the pSelect argument is not NULL, it means that this routine
  1378 ** was called to create a table generated from a 
  1379 ** "CREATE TABLE ... AS SELECT ..." statement.  The column names of
  1380 ** the new table will match the result set of the SELECT.
  1381 */
  1382 void sqlite3EndTable(
  1383   Parse *pParse,          /* Parse context */
  1384   Token *pCons,           /* The ',' token after the last column defn. */
  1385   Token *pEnd,            /* The final ')' token in the CREATE TABLE */
  1386   Select *pSelect         /* Select from a "CREATE ... AS SELECT" */
  1387 ){
  1388   Table *p;
  1389   sqlite3 *db = pParse->db;
  1390   int iDb;
  1391 
  1392   if( (pEnd==0 && pSelect==0) || pParse->nErr || db->mallocFailed ) {
  1393     return;
  1394   }
  1395   p = pParse->pNewTable;
  1396   if( p==0 ) return;
  1397 
  1398   assert( !db->init.busy || !pSelect );
  1399 
  1400   iDb = sqlite3SchemaToIndex(db, p->pSchema);
  1401 
  1402 #ifndef SQLITE_OMIT_CHECK
  1403   /* Resolve names in all CHECK constraint expressions.
  1404   */
  1405   if( p->pCheck ){
  1406     SrcList sSrc;                   /* Fake SrcList for pParse->pNewTable */
  1407     NameContext sNC;                /* Name context for pParse->pNewTable */
  1408 
  1409     memset(&sNC, 0, sizeof(sNC));
  1410     memset(&sSrc, 0, sizeof(sSrc));
  1411     sSrc.nSrc = 1;
  1412     sSrc.a[0].zName = p->zName;
  1413     sSrc.a[0].pTab = p;
  1414     sSrc.a[0].iCursor = -1;
  1415     sNC.pParse = pParse;
  1416     sNC.pSrcList = &sSrc;
  1417     sNC.isCheck = 1;
  1418     if( sqlite3ExprResolveNames(&sNC, p->pCheck) ){
  1419       return;
  1420     }
  1421   }
  1422 #endif /* !defined(SQLITE_OMIT_CHECK) */
  1423 
  1424   /* If the db->init.busy is 1 it means we are reading the SQL off the
  1425   ** "sqlite_master" or "sqlite_temp_master" table on the disk.
  1426   ** So do not write to the disk again.  Extract the root page number
  1427   ** for the table from the db->init.newTnum field.  (The page number
  1428   ** should have been put there by the sqliteOpenCb routine.)
  1429   */
  1430   if( db->init.busy ){
  1431     p->tnum = db->init.newTnum;
  1432   }
  1433 
  1434   /* If not initializing, then create a record for the new table
  1435   ** in the SQLITE_MASTER table of the database.  The record number
  1436   ** for the new table entry should already be on the stack.
  1437   **
  1438   ** If this is a TEMPORARY table, write the entry into the auxiliary
  1439   ** file instead of into the main database file.
  1440   */
  1441   if( !db->init.busy ){
  1442     int n;
  1443     Vdbe *v;
  1444     char *zType;    /* "view" or "table" */
  1445     char *zType2;   /* "VIEW" or "TABLE" */
  1446     char *zStmt;    /* Text of the CREATE TABLE or CREATE VIEW statement */
  1447 
  1448     v = sqlite3GetVdbe(pParse);
  1449     if( v==0 ) return;
  1450 
  1451     sqlite3VdbeAddOp(v, OP_Close, 0, 0);
  1452 
  1453     /* Create the rootpage for the new table and push it onto the stack.
  1454     ** A view has no rootpage, so just push a zero onto the stack for
  1455     ** views.  Initialize zType at the same time.
  1456     */
  1457     if( p->pSelect==0 ){
  1458       /* A regular table */
  1459       zType = "table";
  1460       zType2 = "TABLE";
  1461 #ifndef SQLITE_OMIT_VIEW
  1462     }else{
  1463       /* A view */
  1464       zType = "view";
  1465       zType2 = "VIEW";
  1466 #endif
  1467     }
  1468 
  1469     /* If this is a CREATE TABLE xx AS SELECT ..., execute the SELECT
  1470     ** statement to populate the new table. The root-page number for the
  1471     ** new table is on the top of the vdbe stack.
  1472     **
  1473     ** Once the SELECT has been coded by sqlite3Select(), it is in a
  1474     ** suitable state to query for the column names and types to be used
  1475     ** by the new table.
  1476     **
  1477     ** A shared-cache write-lock is not required to write to the new table,
  1478     ** as a schema-lock must have already been obtained to create it. Since
  1479     ** a schema-lock excludes all other database users, the write-lock would
  1480     ** be redundant.
  1481     */
  1482     if( pSelect ){
  1483       Table *pSelTab;
  1484       sqlite3VdbeAddOp(v, OP_Dup, 0, 0);
  1485       sqlite3VdbeAddOp(v, OP_Integer, iDb, 0);
  1486       sqlite3VdbeAddOp(v, OP_OpenWrite, 1, 0);
  1487       pParse->nTab = 2;
  1488       sqlite3Select(pParse, pSelect, SRT_Table, 1, 0, 0, 0, 0);
  1489       sqlite3VdbeAddOp(v, OP_Close, 1, 0);
  1490       if( pParse->nErr==0 ){
  1491         pSelTab = sqlite3ResultSetOfSelect(pParse, 0, pSelect);
  1492         if( pSelTab==0 ) return;
  1493         assert( p->aCol==0 );
  1494         p->nCol = pSelTab->nCol;
  1495         p->aCol = pSelTab->aCol;
  1496         pSelTab->nCol = 0;
  1497         pSelTab->aCol = 0;
  1498         sqlite3DeleteTable(pSelTab);
  1499       }
  1500     }
  1501 
  1502     /* Compute the complete text of the CREATE statement */
  1503     if( pSelect ){
  1504       zStmt = createTableStmt(p, p->pSchema==db->aDb[1].pSchema);
  1505     }else{
  1506       n = pEnd->z - pParse->sNameToken.z + 1;
  1507       zStmt = sqlite3MPrintf(db, 
  1508           "CREATE %s %.*s", zType2, n, pParse->sNameToken.z
  1509       );
  1510     }
  1511 
  1512     /* A slot for the record has already been allocated in the 
  1513     ** SQLITE_MASTER table.  We just need to update that slot with all
  1514     ** the information we've collected.  The rowid for the preallocated
  1515     ** slot is the 2nd item on the stack.  The top of the stack is the
  1516     ** root page for the new table (or a 0 if this is a view).
  1517     */
  1518     sqlite3NestedParse(pParse,
  1519       "UPDATE %Q.%s "
  1520          "SET type='%s', name=%Q, tbl_name=%Q, rootpage=#0, sql=%Q "
  1521        "WHERE rowid=#1",
  1522       db->aDb[iDb].zName, SCHEMA_TABLE(iDb),
  1523       zType,
  1524       p->zName,
  1525       p->zName,
  1526       zStmt
  1527     );
  1528     sqlite3_free(zStmt);
  1529     sqlite3ChangeCookie(db, v, iDb);
  1530 
  1531 #ifndef SQLITE_OMIT_AUTOINCREMENT
  1532     /* Check to see if we need to create an sqlite_sequence table for
  1533     ** keeping track of autoincrement keys.
  1534     */
  1535     if( p->autoInc ){
  1536       Db *pDb = &db->aDb[iDb];
  1537       if( pDb->pSchema->pSeqTab==0 ){
  1538         sqlite3NestedParse(pParse,
  1539           "CREATE TABLE %Q.sqlite_sequence(name,seq)",
  1540           pDb->zName
  1541         );
  1542       }
  1543     }
  1544 #endif
  1545 
  1546     /* Reparse everything to update our internal data structures */
  1547     sqlite3VdbeOp3(v, OP_ParseSchema, iDb, 0,
  1548         sqlite3MPrintf(db, "tbl_name='%q'",p->zName), P3_DYNAMIC);
  1549   }
  1550 
  1551 
  1552   /* Add the table to the in-memory representation of the database.
  1553   */
  1554   if( db->init.busy && pParse->nErr==0 ){
  1555     Table *pOld;
  1556     FKey *pFKey; 
  1557     Schema *pSchema = p->pSchema;
  1558     pOld = sqlite3HashInsert(&pSchema->tblHash, p->zName, strlen(p->zName)+1,p);
  1559     if( pOld ){
  1560       assert( p==pOld );  /* Malloc must have failed inside HashInsert() */
  1561       db->mallocFailed = 1;
  1562       return;
  1563     }
  1564 #ifndef SQLITE_OMIT_FOREIGN_KEY
  1565     for(pFKey=p->pFKey; pFKey; pFKey=pFKey->pNextFrom){
  1566       void *data;
  1567       int nTo = strlen(pFKey->zTo) + 1;
  1568       pFKey->pNextTo = sqlite3HashFind(&pSchema->aFKey, pFKey->zTo, nTo);
  1569       data = sqlite3HashInsert(&pSchema->aFKey, pFKey->zTo, nTo, pFKey);
  1570       if( data==(void *)pFKey ){
  1571         db->mallocFailed = 1;
  1572       }
  1573     }
  1574 #endif
  1575     pParse->pNewTable = 0;
  1576     db->nTable++;
  1577     db->flags |= SQLITE_InternChanges;
  1578 
  1579 #ifndef SQLITE_OMIT_ALTERTABLE
  1580     if( !p->pSelect ){
  1581       const char *zName = (const char *)pParse->sNameToken.z;
  1582       int nName;
  1583       assert( !pSelect && pCons && pEnd );
  1584       if( pCons->z==0 ){
  1585         pCons = pEnd;
  1586       }
  1587       nName = (const char *)pCons->z - zName;
  1588       p->addColOffset = 13 + sqlite3Utf8CharLen(zName, nName);
  1589     }
  1590 #endif
  1591   }
  1592 }
  1593 
  1594 #ifndef SQLITE_OMIT_VIEW
  1595 /*
  1596 ** The parser calls this routine in order to create a new VIEW
  1597 */
  1598 void sqlite3CreateView(
  1599   Parse *pParse,     /* The parsing context */
  1600   Token *pBegin,     /* The CREATE token that begins the statement */
  1601   Token *pName1,     /* The token that holds the name of the view */
  1602   Token *pName2,     /* The token that holds the name of the view */
  1603   Select *pSelect,   /* A SELECT statement that will become the new view */
  1604   int isTemp,        /* TRUE for a TEMPORARY view */
  1605   int noErr          /* Suppress error messages if VIEW already exists */
  1606 ){
  1607   Table *p;
  1608   int n;
  1609   const unsigned char *z;
  1610   Token sEnd;
  1611   DbFixer sFix;
  1612   Token *pName;
  1613   int iDb;
  1614   sqlite3 *db = pParse->db;
  1615 
  1616   if( pParse->nVar>0 ){
  1617     sqlite3ErrorMsg(pParse, "parameters are not allowed in views");
  1618     sqlite3SelectDelete(pSelect);
  1619     return;
  1620   }
  1621   sqlite3StartTable(pParse, pName1, pName2, isTemp, 1, 0, noErr);
  1622   p = pParse->pNewTable;
  1623   if( p==0 || pParse->nErr ){
  1624     sqlite3SelectDelete(pSelect);
  1625     return;
  1626   }
  1627   sqlite3TwoPartName(pParse, pName1, pName2, &pName);
  1628   iDb = sqlite3SchemaToIndex(db, p->pSchema);
  1629   if( sqlite3FixInit(&sFix, pParse, iDb, "view", pName)
  1630     && sqlite3FixSelect(&sFix, pSelect)
  1631   ){
  1632     sqlite3SelectDelete(pSelect);
  1633     return;
  1634   }
  1635 
  1636   /* Make a copy of the entire SELECT statement that defines the view.
  1637   ** This will force all the Expr.token.z values to be dynamically
  1638   ** allocated rather than point to the input string - which means that
  1639   ** they will persist after the current sqlite3_exec() call returns.
  1640   */
  1641   p->pSelect = sqlite3SelectDup(db, pSelect);
  1642   sqlite3SelectDelete(pSelect);
  1643   if( db->mallocFailed ){
  1644     return;
  1645   }
  1646   if( !db->init.busy ){
  1647     sqlite3ViewGetColumnNames(pParse, p);
  1648   }
  1649 
  1650   /* Locate the end of the CREATE VIEW statement.  Make sEnd point to
  1651   ** the end.
  1652   */
  1653   sEnd = pParse->sLastToken;
  1654   if( sEnd.z[0]!=0 && sEnd.z[0]!=';' ){
  1655     sEnd.z += sEnd.n;
  1656   }
  1657   sEnd.n = 0;
  1658   n = sEnd.z - pBegin->z;
  1659   z = (const unsigned char*)pBegin->z;
  1660   while( n>0 && (z[n-1]==';' || isspace(z[n-1])) ){ n--; }
  1661   sEnd.z = &z[n-1];
  1662   sEnd.n = 1;
  1663 
  1664   /* Use sqlite3EndTable() to add the view to the SQLITE_MASTER table */
  1665   sqlite3EndTable(pParse, 0, &sEnd, 0);
  1666   return;
  1667 }
  1668 #endif /* SQLITE_OMIT_VIEW */
  1669 
  1670 #if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE)
  1671 /*
  1672 ** The Table structure pTable is really a VIEW.  Fill in the names of
  1673 ** the columns of the view in the pTable structure.  Return the number
  1674 ** of errors.  If an error is seen leave an error message in pParse->zErrMsg.
  1675 */
  1676 int sqlite3ViewGetColumnNames(Parse *pParse, Table *pTable){
  1677   Table *pSelTab;   /* A fake table from which we get the result set */
  1678   Select *pSel;     /* Copy of the SELECT that implements the view */
  1679   int nErr = 0;     /* Number of errors encountered */
  1680   int n;            /* Temporarily holds the number of cursors assigned */
  1681   sqlite3 *db = pParse->db;  /* Database connection for malloc errors */
  1682 
  1683   assert( pTable );
  1684 
  1685 #ifndef SQLITE_OMIT_VIRTUALTABLE
  1686   if( sqlite3VtabCallConnect(pParse, pTable) ){
  1687     return SQLITE_ERROR;
  1688   }
  1689   if( IsVirtual(pTable) ) return 0;
  1690 #endif
  1691 
  1692 #ifndef SQLITE_OMIT_VIEW
  1693   /* A positive nCol means the columns names for this view are
  1694   ** already known.
  1695   */
  1696   if( pTable->nCol>0 ) return 0;
  1697 
  1698   /* A negative nCol is a special marker meaning that we are currently
  1699   ** trying to compute the column names.  If we enter this routine with
  1700   ** a negative nCol, it means two or more views form a loop, like this:
  1701   **
  1702   **     CREATE VIEW one AS SELECT * FROM two;
  1703   **     CREATE VIEW two AS SELECT * FROM one;
  1704   **
  1705   ** Actually, this error is caught previously and so the following test
  1706   ** should always fail.  But we will leave it in place just to be safe.
  1707   */
  1708   if( pTable->nCol<0 ){
  1709     sqlite3ErrorMsg(pParse, "view %s is circularly defined", pTable->zName);
  1710     return 1;
  1711   }
  1712   assert( pTable->nCol>=0 );
  1713 
  1714   /* If we get this far, it means we need to compute the table names.
  1715   ** Note that the call to sqlite3ResultSetOfSelect() will expand any
  1716   ** "*" elements in the results set of the view and will assign cursors
  1717   ** to the elements of the FROM clause.  But we do not want these changes
  1718   ** to be permanent.  So the computation is done on a copy of the SELECT
  1719   ** statement that defines the view.
  1720   */
  1721   assert( pTable->pSelect );
  1722   pSel = sqlite3SelectDup(db, pTable->pSelect);
  1723   if( pSel ){
  1724     n = pParse->nTab;
  1725     sqlite3SrcListAssignCursors(pParse, pSel->pSrc);
  1726     pTable->nCol = -1;
  1727     pSelTab = sqlite3ResultSetOfSelect(pParse, 0, pSel);
  1728     pParse->nTab = n;
  1729     if( pSelTab ){
  1730       assert( pTable->aCol==0 );
  1731       pTable->nCol = pSelTab->nCol;
  1732       pTable->aCol = pSelTab->aCol;
  1733       pSelTab->nCol = 0;
  1734       pSelTab->aCol = 0;
  1735       sqlite3DeleteTable(pSelTab);
  1736       pTable->pSchema->flags |= DB_UnresetViews;
  1737     }else{
  1738       pTable->nCol = 0;
  1739       nErr++;
  1740     }
  1741     sqlite3SelectDelete(pSel);
  1742   } else {
  1743     nErr++;
  1744   }
  1745 #endif /* SQLITE_OMIT_VIEW */
  1746   return nErr;  
  1747 }
  1748 #endif /* !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE) */
  1749 
  1750 #ifndef SQLITE_OMIT_VIEW
  1751 /*
  1752 ** Clear the column names from every VIEW in database idx.
  1753 */
  1754 static void sqliteViewResetAll(sqlite3 *db, int idx){
  1755   HashElem *i;
  1756   if( !DbHasProperty(db, idx, DB_UnresetViews) ) return;
  1757   for(i=sqliteHashFirst(&db->aDb[idx].pSchema->tblHash); i;i=sqliteHashNext(i)){
  1758     Table *pTab = sqliteHashData(i);
  1759     if( pTab->pSelect ){
  1760       sqliteResetColumnNames(pTab);
  1761     }
  1762   }
  1763   DbClearProperty(db, idx, DB_UnresetViews);
  1764 }
  1765 #else
  1766 # define sqliteViewResetAll(A,B)
  1767 #endif /* SQLITE_OMIT_VIEW */
  1768 
  1769 /*
  1770 ** This function is called by the VDBE to adjust the internal schema
  1771 ** used by SQLite when the btree layer moves a table root page. The
  1772 ** root-page of a table or index in database iDb has changed from iFrom
  1773 ** to iTo.
  1774 **
  1775 ** Ticket #1728:  The symbol table might still contain information
  1776 ** on tables and/or indices that are the process of being deleted.
  1777 ** If you are unlucky, one of those deleted indices or tables might
  1778 ** have the same rootpage number as the real table or index that is
  1779 ** being moved.  So we cannot stop searching after the first match 
  1780 ** because the first match might be for one of the deleted indices
  1781 ** or tables and not the table/index that is actually being moved.
  1782 ** We must continue looping until all tables and indices with
  1783 ** rootpage==iFrom have been converted to have a rootpage of iTo
  1784 ** in order to be certain that we got the right one.
  1785 */
  1786 #ifndef SQLITE_OMIT_AUTOVACUUM
  1787 void sqlite3RootPageMoved(Db *pDb, int iFrom, int iTo){
  1788   HashElem *pElem;
  1789   Hash *pHash;
  1790 
  1791   pHash = &pDb->pSchema->tblHash;
  1792   for(pElem=sqliteHashFirst(pHash); pElem; pElem=sqliteHashNext(pElem)){
  1793     Table *pTab = sqliteHashData(pElem);
  1794     if( pTab->tnum==iFrom ){
  1795       pTab->tnum = iTo;
  1796     }
  1797   }
  1798   pHash = &pDb->pSchema->idxHash;
  1799   for(pElem=sqliteHashFirst(pHash); pElem; pElem=sqliteHashNext(pElem)){
  1800     Index *pIdx = sqliteHashData(pElem);
  1801     if( pIdx->tnum==iFrom ){
  1802       pIdx->tnum = iTo;
  1803     }
  1804   }
  1805 }
  1806 #endif
  1807 
  1808 /*
  1809 ** Write code to erase the table with root-page iTable from database iDb.
  1810 ** Also write code to modify the sqlite_master table and internal schema
  1811 ** if a root-page of another table is moved by the btree-layer whilst
  1812 ** erasing iTable (this can happen with an auto-vacuum database).
  1813 */ 
  1814 static void destroyRootPage(Parse *pParse, int iTable, int iDb){
  1815   Vdbe *v = sqlite3GetVdbe(pParse);
  1816   sqlite3VdbeAddOp(v, OP_Destroy, iTable, iDb);
  1817 #ifndef SQLITE_OMIT_AUTOVACUUM
  1818   /* OP_Destroy pushes an integer onto the stack. If this integer
  1819   ** is non-zero, then it is the root page number of a table moved to
  1820   ** location iTable. The following code modifies the sqlite_master table to
  1821   ** reflect this.
  1822   **
  1823   ** The "#0" in the SQL is a special constant that means whatever value
  1824   ** is on the top of the stack.  See sqlite3RegisterExpr().
  1825   */
  1826   sqlite3NestedParse(pParse, 
  1827      "UPDATE %Q.%s SET rootpage=%d WHERE #0 AND rootpage=#0",
  1828      pParse->db->aDb[iDb].zName, SCHEMA_TABLE(iDb), iTable);
  1829 #endif
  1830 }
  1831 
  1832 /*
  1833 ** Write VDBE code to erase table pTab and all associated indices on disk.
  1834 ** Code to update the sqlite_master tables and internal schema definitions
  1835 ** in case a root-page belonging to another table is moved by the btree layer
  1836 ** is also added (this can happen with an auto-vacuum database).
  1837 */
  1838 static void destroyTable(Parse *pParse, Table *pTab){
  1839 #ifdef SQLITE_OMIT_AUTOVACUUM
  1840   Index *pIdx;
  1841   int iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
  1842   destroyRootPage(pParse, pTab->tnum, iDb);
  1843   for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
  1844     destroyRootPage(pParse, pIdx->tnum, iDb);
  1845   }
  1846 #else
  1847   /* If the database may be auto-vacuum capable (if SQLITE_OMIT_AUTOVACUUM
  1848   ** is not defined), then it is important to call OP_Destroy on the
  1849   ** table and index root-pages in order, starting with the numerically 
  1850   ** largest root-page number. This guarantees that none of the root-pages
  1851   ** to be destroyed is relocated by an earlier OP_Destroy. i.e. if the
  1852   ** following were coded:
  1853   **
  1854   ** OP_Destroy 4 0
  1855   ** ...
  1856   ** OP_Destroy 5 0
  1857   **
  1858   ** and root page 5 happened to be the largest root-page number in the
  1859   ** database, then root page 5 would be moved to page 4 by the 
  1860   ** "OP_Destroy 4 0" opcode. The subsequent "OP_Destroy 5 0" would hit
  1861   ** a free-list page.
  1862   */
  1863   int iTab = pTab->tnum;
  1864   int iDestroyed = 0;
  1865 
  1866   while( 1 ){
  1867     Index *pIdx;
  1868     int iLargest = 0;
  1869 
  1870     if( iDestroyed==0 || iTab<iDestroyed ){
  1871       iLargest = iTab;
  1872     }
  1873     for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
  1874       int iIdx = pIdx->tnum;
  1875       assert( pIdx->pSchema==pTab->pSchema );
  1876       if( (iDestroyed==0 || (iIdx<iDestroyed)) && iIdx>iLargest ){
  1877         iLargest = iIdx;
  1878       }
  1879     }
  1880     if( iLargest==0 ){
  1881       return;
  1882     }else{
  1883       int iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
  1884       destroyRootPage(pParse, iLargest, iDb);
  1885       iDestroyed = iLargest;
  1886     }
  1887   }
  1888 #endif
  1889 }
  1890 
  1891 /*
  1892 ** This routine is called to do the work of a DROP TABLE statement.
  1893 ** pName is the name of the table to be dropped.
  1894 */
  1895 void sqlite3DropTable(Parse *pParse, SrcList *pName, int isView, int noErr){
  1896   Table *pTab;
  1897   Vdbe *v;
  1898   sqlite3 *db = pParse->db;
  1899   int iDb;
  1900 
  1901   if( pParse->nErr || db->mallocFailed ){
  1902     goto exit_drop_table;
  1903   }
  1904   assert( pName->nSrc==1 );
  1905   pTab = sqlite3LocateTable(pParse, pName->a[0].zName, pName->a[0].zDatabase);
  1906 
  1907   if( pTab==0 ){
  1908     if( noErr ){
  1909       sqlite3ErrorClear(pParse);
  1910     }
  1911     goto exit_drop_table;
  1912   }
  1913   iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
  1914   assert( iDb>=0 && iDb<db->nDb );
  1915 #ifndef SQLITE_OMIT_AUTHORIZATION
  1916   {
  1917     int code;
  1918     const char *zTab = SCHEMA_TABLE(iDb);
  1919     const char *zDb = db->aDb[iDb].zName;
  1920     const char *zArg2 = 0;
  1921     if( sqlite3AuthCheck(pParse, SQLITE_DELETE, zTab, 0, zDb)){
  1922       goto exit_drop_table;
  1923     }
  1924     if( isView ){
  1925       if( !OMIT_TEMPDB && iDb==1 ){
  1926         code = SQLITE_DROP_TEMP_VIEW;
  1927       }else{
  1928         code = SQLITE_DROP_VIEW;
  1929       }
  1930 #ifndef SQLITE_OMIT_VIRTUALTABLE
  1931     }else if( IsVirtual(pTab) ){
  1932       if( sqlite3ViewGetColumnNames(pParse, pTab) ){
  1933         goto exit_drop_table;
  1934       }
  1935       code = SQLITE_DROP_VTABLE;
  1936       zArg2 = pTab->pMod->zName;
  1937 #endif
  1938     }else{
  1939       if( !OMIT_TEMPDB && iDb==1 ){
  1940         code = SQLITE_DROP_TEMP_TABLE;
  1941       }else{
  1942         code = SQLITE_DROP_TABLE;
  1943       }
  1944     }
  1945     if( sqlite3AuthCheck(pParse, code, pTab->zName, zArg2, zDb) ){
  1946       goto exit_drop_table;
  1947     }
  1948     if( sqlite3AuthCheck(pParse, SQLITE_DELETE, pTab->zName, 0, zDb) ){
  1949       goto exit_drop_table;
  1950     }
  1951   }
  1952 #endif
  1953   if( pTab->readOnly || pTab==db->aDb[iDb].pSchema->pSeqTab ){
  1954     sqlite3ErrorMsg(pParse, "table %s may not be dropped", pTab->zName);
  1955     goto exit_drop_table;
  1956   }
  1957 
  1958 #ifndef SQLITE_OMIT_VIEW
  1959   /* Ensure DROP TABLE is not used on a view, and DROP VIEW is not used
  1960   ** on a table.
  1961   */
  1962   if( isView && pTab->pSelect==0 ){
  1963     sqlite3ErrorMsg(pParse, "use DROP TABLE to delete table %s", pTab->zName);
  1964     goto exit_drop_table;
  1965   }
  1966   if( !isView && pTab->pSelect ){
  1967     sqlite3ErrorMsg(pParse, "use DROP VIEW to delete view %s", pTab->zName);
  1968     goto exit_drop_table;
  1969   }
  1970 #endif
  1971 
  1972   /* Generate code to remove the table from the master table
  1973   ** on disk.
  1974   */
  1975   v = sqlite3GetVdbe(pParse);
  1976   if( v ){
  1977     Trigger *pTrigger;
  1978     Db *pDb = &db->aDb[iDb];
  1979     sqlite3BeginWriteOperation(pParse, 0, iDb);
  1980 
  1981 #ifndef SQLITE_OMIT_VIRTUALTABLE
  1982     if( IsVirtual(pTab) ){
  1983       Vdbe *v = sqlite3GetVdbe(pParse);
  1984       if( v ){
  1985         sqlite3VdbeAddOp(v, OP_VBegin, 0, 0);
  1986       }
  1987     }
  1988 #endif
  1989 
  1990     /* Drop all triggers associated with the table being dropped. Code
  1991     ** is generated to remove entries from sqlite_master and/or
  1992     ** sqlite_temp_master if required.
  1993     */
  1994     pTrigger = pTab->pTrigger;
  1995     while( pTrigger ){
  1996       assert( pTrigger->pSchema==pTab->pSchema || 
  1997           pTrigger->pSchema==db->aDb[1].pSchema );
  1998       sqlite3DropTriggerPtr(pParse, pTrigger);
  1999       pTrigger = pTrigger->pNext;
  2000     }
  2001 
  2002 #ifndef SQLITE_OMIT_AUTOINCREMENT
  2003     /* Remove any entries of the sqlite_sequence table associated with
  2004     ** the table being dropped. This is done before the table is dropped
  2005     ** at the btree level, in case the sqlite_sequence table needs to
  2006     ** move as a result of the drop (can happen in auto-vacuum mode).
  2007     */
  2008     if( pTab->autoInc ){
  2009       sqlite3NestedParse(pParse,
  2010         "DELETE FROM %s.sqlite_sequence WHERE name=%Q",
  2011         pDb->zName, pTab->zName
  2012       );
  2013     }
  2014 #endif
  2015 
  2016     /* Drop all SQLITE_MASTER table and index entries that refer to the
  2017     ** table. The program name loops through the master table and deletes
  2018     ** every row that refers to a table of the same name as the one being
  2019     ** dropped. Triggers are handled seperately because a trigger can be
  2020     ** created in the temp database that refers to a table in another
  2021     ** database.
  2022     */
  2023     sqlite3NestedParse(pParse, 
  2024         "DELETE FROM %Q.%s WHERE tbl_name=%Q and type!='trigger'",
  2025         pDb->zName, SCHEMA_TABLE(iDb), pTab->zName);
  2026     if( !isView && !IsVirtual(pTab) ){
  2027       destroyTable(pParse, pTab);
  2028     }
  2029 
  2030     /* Remove the table entry from SQLite's internal schema and modify
  2031     ** the schema cookie.
  2032     */
  2033     if( IsVirtual(pTab) ){
  2034       sqlite3VdbeOp3(v, OP_VDestroy, iDb, 0, pTab->zName, 0);
  2035     }
  2036     sqlite3VdbeOp3(v, OP_DropTable, iDb, 0, pTab->zName, 0);
  2037     sqlite3ChangeCookie(db, v, iDb);
  2038   }
  2039   sqliteViewResetAll(db, iDb);
  2040 
  2041 exit_drop_table:
  2042   sqlite3SrcListDelete(pName);
  2043 }
  2044 
  2045 /*
  2046 ** This routine is called to create a new foreign key on the table
  2047 ** currently under construction.  pFromCol determines which columns
  2048 ** in the current table point to the foreign key.  If pFromCol==0 then
  2049 ** connect the key to the last column inserted.  pTo is the name of
  2050 ** the table referred to.  pToCol is a list of tables in the other
  2051 ** pTo table that the foreign key points to.  flags contains all
  2052 ** information about the conflict resolution algorithms specified
  2053 ** in the ON DELETE, ON UPDATE and ON INSERT clauses.
  2054 **
  2055 ** An FKey structure is created and added to the table currently
  2056 ** under construction in the pParse->pNewTable field.  The new FKey
  2057 ** is not linked into db->aFKey at this point - that does not happen
  2058 ** until sqlite3EndTable().
  2059 **
  2060 ** The foreign key is set for IMMEDIATE processing.  A subsequent call
  2061 ** to sqlite3DeferForeignKey() might change this to DEFERRED.
  2062 */
  2063 void sqlite3CreateForeignKey(
  2064   Parse *pParse,       /* Parsing context */
  2065   ExprList *pFromCol,  /* Columns in this table that point to other table */
  2066   Token *pTo,          /* Name of the other table */
  2067   ExprList *pToCol,    /* Columns in the other table */
  2068   int flags            /* Conflict resolution algorithms. */
  2069 ){
  2070 #ifndef SQLITE_OMIT_FOREIGN_KEY
  2071   FKey *pFKey = 0;
  2072   Table *p = pParse->pNewTable;
  2073   int nByte;
  2074   int i;
  2075   int nCol;
  2076   char *z;
  2077 
  2078   assert( pTo!=0 );
  2079   if( p==0 || pParse->nErr || IN_DECLARE_VTAB ) goto fk_end;
  2080   if( pFromCol==0 ){
  2081     int iCol = p->nCol-1;
  2082     if( iCol<0 ) goto fk_end;
  2083     if( pToCol && pToCol->nExpr!=1 ){
  2084       sqlite3ErrorMsg(pParse, "foreign key on %s"
  2085          " should reference only one column of table %T",
  2086          p->aCol[iCol].zName, pTo);
  2087       goto fk_end;
  2088     }
  2089     nCol = 1;
  2090   }else if( pToCol && pToCol->nExpr!=pFromCol->nExpr ){
  2091     sqlite3ErrorMsg(pParse,
  2092         "number of columns in foreign key does not match the number of "
  2093         "columns in the referenced table");
  2094     goto fk_end;
  2095   }else{
  2096     nCol = pFromCol->nExpr;
  2097   }
  2098   nByte = sizeof(*pFKey) + nCol*sizeof(pFKey->aCol[0]) + pTo->n + 1;
  2099   if( pToCol ){
  2100     for(i=0; i<pToCol->nExpr; i++){
  2101       nByte += strlen(pToCol->a[i].zName) + 1;
  2102     }
  2103   }
  2104   pFKey = sqlite3DbMallocZero(pParse->db, nByte );
  2105   if( pFKey==0 ){
  2106     goto fk_end;
  2107   }
  2108   pFKey->pFrom = p;
  2109   pFKey->pNextFrom = p->pFKey;
  2110   z = (char*)&pFKey[1];
  2111   pFKey->aCol = (struct sColMap*)z;
  2112   z += sizeof(struct sColMap)*nCol;
  2113   pFKey->zTo = z;
  2114   memcpy(z, pTo->z, pTo->n);
  2115   z[pTo->n] = 0;
  2116   z += pTo->n+1;
  2117   pFKey->pNextTo = 0;
  2118   pFKey->nCol = nCol;
  2119   if( pFromCol==0 ){
  2120     pFKey->aCol[0].iFrom = p->nCol-1;
  2121   }else{
  2122     for(i=0; i<nCol; i++){
  2123       int j;
  2124       for(j=0; j<p->nCol; j++){
  2125         if( sqlite3StrICmp(p->aCol[j].zName, pFromCol->a[i].zName)==0 ){
  2126           pFKey->aCol[i].iFrom = j;
  2127           break;
  2128         }
  2129       }
  2130       if( j>=p->nCol ){
  2131         sqlite3ErrorMsg(pParse, 
  2132           "unknown column \"%s\" in foreign key definition", 
  2133           pFromCol->a[i].zName);
  2134         goto fk_end;
  2135       }
  2136     }
  2137   }
  2138   if( pToCol ){
  2139     for(i=0; i<nCol; i++){
  2140       int n = strlen(pToCol->a[i].zName);
  2141       pFKey->aCol[i].zCol = z;
  2142       memcpy(z, pToCol->a[i].zName, n);
  2143       z[n] = 0;
  2144       z += n+1;
  2145     }
  2146   }
  2147   pFKey->isDeferred = 0;
  2148   pFKey->deleteConf = flags & 0xff;
  2149   pFKey->updateConf = (flags >> 8 ) & 0xff;
  2150   pFKey->insertConf = (flags >> 16 ) & 0xff;
  2151 
  2152   /* Link the foreign key to the table as the last step.
  2153   */
  2154   p->pFKey = pFKey;
  2155   pFKey = 0;
  2156 
  2157 fk_end:
  2158   sqlite3_free(pFKey);
  2159 #endif /* !defined(SQLITE_OMIT_FOREIGN_KEY) */
  2160   sqlite3ExprListDelete(pFromCol);
  2161   sqlite3ExprListDelete(pToCol);
  2162 }
  2163 
  2164 /*
  2165 ** This routine is called when an INITIALLY IMMEDIATE or INITIALLY DEFERRED
  2166 ** clause is seen as part of a foreign key definition.  The isDeferred
  2167 ** parameter is 1 for INITIALLY DEFERRED and 0 for INITIALLY IMMEDIATE.
  2168 ** The behavior of the most recently created foreign key is adjusted
  2169 ** accordingly.
  2170 */
  2171 void sqlite3DeferForeignKey(Parse *pParse, int isDeferred){
  2172 #ifndef SQLITE_OMIT_FOREIGN_KEY
  2173   Table *pTab;
  2174   FKey *pFKey;
  2175   if( (pTab = pParse->pNewTable)==0 || (pFKey = pTab->pFKey)==0 ) return;
  2176   pFKey->isDeferred = isDeferred;
  2177 #endif
  2178 }
  2179 
  2180 /*
  2181 ** Generate code that will erase and refill index *pIdx.  This is
  2182 ** used to initialize a newly created index or to recompute the
  2183 ** content of an index in response to a REINDEX command.
  2184 **
  2185 ** if memRootPage is not negative, it means that the index is newly
  2186 ** created.  The memory cell specified by memRootPage contains the
  2187 ** root page number of the index.  If memRootPage is negative, then
  2188 ** the index already exists and must be cleared before being refilled and
  2189 ** the root page number of the index is taken from pIndex->tnum.
  2190 */
  2191 static void sqlite3RefillIndex(Parse *pParse, Index *pIndex, int memRootPage){
  2192   Table *pTab = pIndex->pTable;  /* The table that is indexed */
  2193   int iTab = pParse->nTab;       /* Btree cursor used for pTab */
  2194   int iIdx = pParse->nTab+1;     /* Btree cursor used for pIndex */
  2195   int addr1;                     /* Address of top of loop */
  2196   int tnum;                      /* Root page of index */
  2197   Vdbe *v;                       /* Generate code into this virtual machine */
  2198   KeyInfo *pKey;                 /* KeyInfo for index */
  2199   sqlite3 *db = pParse->db;      /* The database connection */
  2200   int iDb = sqlite3SchemaToIndex(db, pIndex->pSchema);
  2201 
  2202 #ifndef SQLITE_OMIT_AUTHORIZATION
  2203   if( sqlite3AuthCheck(pParse, SQLITE_REINDEX, pIndex->zName, 0,
  2204       db->aDb[iDb].zName ) ){
  2205     return;
  2206   }
  2207 #endif
  2208 
  2209   /* Require a write-lock on the table to perform this operation */
  2210   sqlite3TableLock(pParse, iDb, pTab->tnum, 1, pTab->zName);
  2211 
  2212   v = sqlite3GetVdbe(pParse);
  2213   if( v==0 ) return;
  2214   if( memRootPage>=0 ){
  2215     sqlite3VdbeAddOp(v, OP_MemLoad, memRootPage, 0);
  2216     tnum = 0;
  2217   }else{
  2218     tnum = pIndex->tnum;
  2219     sqlite3VdbeAddOp(v, OP_Clear, tnum, iDb);
  2220   }
  2221   sqlite3VdbeAddOp(v, OP_Integer, iDb, 0);
  2222   pKey = sqlite3IndexKeyinfo(pParse, pIndex);
  2223   sqlite3VdbeOp3(v, OP_OpenWrite, iIdx, tnum, (char *)pKey, P3_KEYINFO_HANDOFF);
  2224   sqlite3OpenTable(pParse, iTab, iDb, pTab, OP_OpenRead);
  2225   addr1 = sqlite3VdbeAddOp(v, OP_Rewind, iTab, 0);
  2226   sqlite3GenerateIndexKey(v, pIndex, iTab);
  2227   if( pIndex->onError!=OE_None ){
  2228     int curaddr = sqlite3VdbeCurrentAddr(v);
  2229     int addr2 = curaddr+4;
  2230     sqlite3VdbeChangeP2(v, curaddr-1, addr2);
  2231     sqlite3VdbeAddOp(v, OP_Rowid, iTab, 0);
  2232     sqlite3VdbeAddOp(v, OP_AddImm, 1, 0);
  2233     sqlite3VdbeAddOp(v, OP_IsUnique, iIdx, addr2);
  2234     sqlite3VdbeOp3(v, OP_Halt, SQLITE_CONSTRAINT, OE_Abort,
  2235                     "indexed columns are not unique", P3_STATIC);
  2236     assert( db->mallocFailed || addr2==sqlite3VdbeCurrentAddr(v) );
  2237   }
  2238   sqlite3VdbeAddOp(v, OP_IdxInsert, iIdx, 0);
  2239   sqlite3VdbeAddOp(v, OP_Next, iTab, addr1+1);
  2240   sqlite3VdbeJumpHere(v, addr1);
  2241   sqlite3VdbeAddOp(v, OP_Close, iTab, 0);
  2242   sqlite3VdbeAddOp(v, OP_Close, iIdx, 0);
  2243 }
  2244 
  2245 /*
  2246 ** Create a new index for an SQL table.  pName1.pName2 is the name of the index 
  2247 ** and pTblList is the name of the table that is to be indexed.  Both will 
  2248 ** be NULL for a primary key or an index that is created to satisfy a
  2249 ** UNIQUE constraint.  If pTable and pIndex are NULL, use pParse->pNewTable
  2250 ** as the table to be indexed.  pParse->pNewTable is a table that is
  2251 ** currently being constructed by a CREATE TABLE statement.
  2252 **
  2253 ** pList is a list of columns to be indexed.  pList will be NULL if this
  2254 ** is a primary key or unique-constraint on the most recent column added
  2255 ** to the table currently under construction.  
  2256 */
  2257 void sqlite3CreateIndex(
  2258   Parse *pParse,     /* All information about this parse */
  2259   Token *pName1,     /* First part of index name. May be NULL */
  2260   Token *pName2,     /* Second part of index name. May be NULL */
  2261   SrcList *pTblName, /* Table to index. Use pParse->pNewTable if 0 */
  2262   ExprList *pList,   /* A list of columns to be indexed */
  2263   int onError,       /* OE_Abort, OE_Ignore, OE_Replace, or OE_None */
  2264   Token *pStart,     /* The CREATE token that begins this statement */
  2265   Token *pEnd,       /* The ")" that closes the CREATE INDEX statement */
  2266   int sortOrder,     /* Sort order of primary key when pList==NULL */
  2267   int ifNotExist     /* Omit error if index already exists */
  2268 ){
  2269   Table *pTab = 0;     /* Table to be indexed */
  2270   Index *pIndex = 0;   /* The index to be created */
  2271   char *zName = 0;     /* Name of the index */
  2272   int nName;           /* Number of characters in zName */
  2273   int i, j;
  2274   Token nullId;        /* Fake token for an empty ID list */
  2275   DbFixer sFix;        /* For assigning database names to pTable */
  2276   int sortOrderMask;   /* 1 to honor DESC in index.  0 to ignore. */
  2277   sqlite3 *db = pParse->db;
  2278   Db *pDb;             /* The specific table containing the indexed database */
  2279   int iDb;             /* Index of the database that is being written */
  2280   Token *pName = 0;    /* Unqualified name of the index to create */
  2281   struct ExprList_item *pListItem; /* For looping over pList */
  2282   int nCol;
  2283   int nExtra = 0;
  2284   char *zExtra;
  2285 
  2286   if( pParse->nErr || db->mallocFailed || IN_DECLARE_VTAB ){
  2287     goto exit_create_index;
  2288   }
  2289 
  2290   /*
  2291   ** Find the table that is to be indexed.  Return early if not found.
  2292   */
  2293   if( pTblName!=0 ){
  2294 
  2295     /* Use the two-part index name to determine the database 
  2296     ** to search for the table. 'Fix' the table name to this db
  2297     ** before looking up the table.
  2298     */
  2299     assert( pName1 && pName2 );
  2300     iDb = sqlite3TwoPartName(pParse, pName1, pName2, &pName);
  2301     if( iDb<0 ) goto exit_create_index;
  2302 
  2303 #ifndef SQLITE_OMIT_TEMPDB
  2304     /* If the index name was unqualified, check if the the table
  2305     ** is a temp table. If so, set the database to 1.
  2306     */
  2307     pTab = sqlite3SrcListLookup(pParse, pTblName);
  2308     if( pName2 && pName2->n==0 && pTab && pTab->pSchema==db->aDb[1].pSchema ){
  2309       iDb = 1;
  2310     }
  2311 #endif
  2312 
  2313     if( sqlite3FixInit(&sFix, pParse, iDb, "index", pName) &&
  2314         sqlite3FixSrcList(&sFix, pTblName)
  2315     ){
  2316       /* Because the parser constructs pTblName from a single identifier,
  2317       ** sqlite3FixSrcList can never fail. */
  2318       assert(0);
  2319     }
  2320     pTab = sqlite3LocateTable(pParse, pTblName->a[0].zName, 
  2321         pTblName->a[0].zDatabase);
  2322     if( !pTab ) goto exit_create_index;
  2323     assert( db->aDb[iDb].pSchema==pTab->pSchema );
  2324   }else{
  2325     assert( pName==0 );
  2326     pTab = pParse->pNewTable;
  2327     if( !pTab ) goto exit_create_index;
  2328     iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
  2329   }
  2330   pDb = &db->aDb[iDb];
  2331 
  2332   if( pTab==0 || pParse->nErr ) goto exit_create_index;
  2333   if( pTab->readOnly ){
  2334     sqlite3ErrorMsg(pParse, "table %s may not be indexed", pTab->zName);
  2335     goto exit_create_index;
  2336   }
  2337 #ifndef SQLITE_OMIT_VIEW
  2338   if( pTab->pSelect ){
  2339     sqlite3ErrorMsg(pParse, "views may not be indexed");
  2340     goto exit_create_index;
  2341   }
  2342 #endif
  2343 #ifndef SQLITE_OMIT_VIRTUALTABLE
  2344   if( IsVirtual(pTab) ){
  2345     sqlite3ErrorMsg(pParse, "virtual tables may not be indexed");
  2346     goto exit_create_index;
  2347   }
  2348 #endif
  2349 
  2350   /*
  2351   ** Find the name of the index.  Make sure there is not already another
  2352   ** index or table with the same name.  
  2353   **
  2354   ** Exception:  If we are reading the names of permanent indices from the
  2355   ** sqlite_master table (because some other process changed the schema) and
  2356   ** one of the index names collides with the name of a temporary table or
  2357   ** index, then we will continue to process this index.
  2358   **
  2359   ** If pName==0 it means that we are
  2360   ** dealing with a primary key or UNIQUE constraint.  We have to invent our
  2361   ** own name.
  2362   */
  2363   if( pName ){
  2364     zName = sqlite3NameFromToken(db, pName);
  2365     if( SQLITE_OK!=sqlite3ReadSchema(pParse) ) goto exit_create_index;
  2366     if( zName==0 ) goto exit_create_index;
  2367     if( SQLITE_OK!=sqlite3CheckObjectName(pParse, zName) ){
  2368       goto exit_create_index;
  2369     }
  2370     if( !db->init.busy ){
  2371       if( SQLITE_OK!=sqlite3ReadSchema(pParse) ) goto exit_create_index;
  2372       if( sqlite3FindTable(db, zName, 0)!=0 ){
  2373         sqlite3ErrorMsg(pParse, "there is already a table named %s", zName);
  2374         goto exit_create_index;
  2375       }
  2376     }
  2377     if( sqlite3FindIndex(db, zName, pDb->zName)!=0 ){
  2378       if( !ifNotExist ){
  2379         sqlite3ErrorMsg(pParse, "index %s already exists", zName);
  2380       }
  2381       goto exit_create_index;
  2382     }
  2383   }else{
  2384     char zBuf[30];
  2385     int n;
  2386     Index *pLoop;
  2387     for(pLoop=pTab->pIndex, n=1; pLoop; pLoop=pLoop->pNext, n++){}
  2388     sqlite3_snprintf(sizeof(zBuf),zBuf,"_%d",n);
  2389     zName = 0;
  2390     sqlite3SetString(&zName, "sqlite_autoindex_", pTab->zName, zBuf, (char*)0);
  2391     if( zName==0 ){
  2392       db->mallocFailed = 1;
  2393       goto exit_create_index;
  2394     }
  2395   }
  2396 
  2397   /* Check for authorization to create an index.
  2398   */
  2399 #ifndef SQLITE_OMIT_AUTHORIZATION
  2400   {
  2401     const char *zDb = pDb->zName;
  2402     if( sqlite3AuthCheck(pParse, SQLITE_INSERT, SCHEMA_TABLE(iDb), 0, zDb) ){
  2403       goto exit_create_index;
  2404     }
  2405     i = SQLITE_CREATE_INDEX;
  2406     if( !OMIT_TEMPDB && iDb==1 ) i = SQLITE_CREATE_TEMP_INDEX;
  2407     if( sqlite3AuthCheck(pParse, i, zName, pTab->zName, zDb) ){
  2408       goto exit_create_index;
  2409     }
  2410   }
  2411 #endif
  2412 
  2413   /* If pList==0, it means this routine was called to make a primary
  2414   ** key out of the last column added to the table under construction.
  2415   ** So create a fake list to simulate this.
  2416   */
  2417   if( pList==0 ){
  2418     nullId.z = (u8*)pTab->aCol[pTab->nCol-1].zName;
  2419     nullId.n = strlen((char*)nullId.z);
  2420     pList = sqlite3ExprListAppend(pParse, 0, 0, &nullId);
  2421     if( pList==0 ) goto exit_create_index;
  2422     pList->a[0].sortOrder = sortOrder;
  2423   }
  2424 
  2425   /* Figure out how many bytes of space are required to store explicitly
  2426   ** specified collation sequence names.
  2427   */
  2428   for(i=0; i<pList->nExpr; i++){
  2429     Expr *pExpr = pList->a[i].pExpr;
  2430     if( pExpr ){
  2431       nExtra += (1 + strlen(pExpr->pColl->zName));
  2432     }
  2433   }
  2434 
  2435   /* 
  2436   ** Allocate the index structure. 
  2437   */
  2438   nName = strlen(zName);
  2439   nCol = pList->nExpr;
  2440   pIndex = sqlite3DbMallocZero(db, 
  2441       sizeof(Index) +              /* Index structure  */
  2442       sizeof(int)*nCol +           /* Index.aiColumn   */
  2443       sizeof(int)*(nCol+1) +       /* Index.aiRowEst   */
  2444       sizeof(char *)*nCol +        /* Index.azColl     */
  2445       sizeof(u8)*nCol +            /* Index.aSortOrder */
  2446       nName + 1 +                  /* Index.zName      */
  2447       nExtra                       /* Collation sequence names */
  2448   );
  2449   if( db->mallocFailed ){
  2450     goto exit_create_index;
  2451   }
  2452   pIndex->azColl = (char**)(&pIndex[1]);
  2453   pIndex->aiColumn = (int *)(&pIndex->azColl[nCol]);
  2454   pIndex->aiRowEst = (unsigned *)(&pIndex->aiColumn[nCol]);
  2455   pIndex->aSortOrder = (u8 *)(&pIndex->aiRowEst[nCol+1]);
  2456   pIndex->zName = (char *)(&pIndex->aSortOrder[nCol]);
  2457   zExtra = (char *)(&pIndex->zName[nName+1]);
  2458   memcpy(pIndex->zName, zName, nName+1);
  2459   pIndex->pTable = pTab;
  2460   pIndex->nColumn = pList->nExpr;
  2461   pIndex->onError = onError;
  2462   pIndex->autoIndex = pName==0;
  2463   pIndex->pSchema = db->aDb[iDb].pSchema;
  2464 
  2465   /* Check to see if we should honor DESC requests on index columns
  2466   */
  2467   if( pDb->pSchema->file_format>=4 ){
  2468     sortOrderMask = -1;   /* Honor DESC */
  2469   }else{
  2470     sortOrderMask = 0;    /* Ignore DESC */
  2471   }
  2472 
  2473   /* Scan the names of the columns of the table to be indexed and
  2474   ** load the column indices into the Index structure.  Report an error
  2475   ** if any column is not found.
  2476   */
  2477   for(i=0, pListItem=pList->a; i<pList->nExpr; i++, pListItem++){
  2478     const char *zColName = pListItem->zName;
  2479     Column *pTabCol;
  2480     int requestedSortOrder;
  2481     char *zColl;                   /* Collation sequence name */
  2482 
  2483     for(j=0, pTabCol=pTab->aCol; j<pTab->nCol; j++, pTabCol++){
  2484       if( sqlite3StrICmp(zColName, pTabCol->zName)==0 ) break;
  2485     }
  2486     if( j>=pTab->nCol ){
  2487       sqlite3ErrorMsg(pParse, "table %s has no column named %s",
  2488         pTab->zName, zColName);
  2489       goto exit_create_index;
  2490     }
  2491     /* TODO:  Add a test to make sure that the same column is not named
  2492     ** more than once within the same index.  Only the first instance of
  2493     ** the column will ever be used by the optimizer.  Note that using the
  2494     ** same column more than once cannot be an error because that would 
  2495     ** break backwards compatibility - it needs to be a warning.
  2496     */
  2497     pIndex->aiColumn[i] = j;
  2498     if( pListItem->pExpr ){
  2499       assert( pListItem->pExpr->pColl );
  2500       zColl = zExtra;
  2501       sqlite3_snprintf(nExtra, zExtra, "%s", pListItem->pExpr->pColl->zName);
  2502       zExtra += (strlen(zColl) + 1);
  2503     }else{
  2504       zColl = pTab->aCol[j].zColl;
  2505       if( !zColl ){
  2506         zColl = db->pDfltColl->zName;
  2507       }
  2508     }
  2509     if( !db->init.busy && !sqlite3LocateCollSeq(pParse, zColl, -1) ){
  2510       goto exit_create_index;
  2511     }
  2512     pIndex->azColl[i] = zColl;
  2513     requestedSortOrder = pListItem->sortOrder & sortOrderMask;
  2514     pIndex->aSortOrder[i] = requestedSortOrder;
  2515   }
  2516   sqlite3DefaultRowEst(pIndex);
  2517 
  2518   if( pTab==pParse->pNewTable ){
  2519     /* This routine has been called to create an automatic index as a
  2520     ** result of a PRIMARY KEY or UNIQUE clause on a column definition, or
  2521     ** a PRIMARY KEY or UNIQUE clause following the column definitions.
  2522     ** i.e. one of:
  2523     **
  2524     ** CREATE TABLE t(x PRIMARY KEY, y);
  2525     ** CREATE TABLE t(x, y, UNIQUE(x, y));
  2526     **
  2527     ** Either way, check to see if the table already has such an index. If
  2528     ** so, don't bother creating this one. This only applies to
  2529     ** automatically created indices. Users can do as they wish with
  2530     ** explicit indices.
  2531     */
  2532     Index *pIdx;
  2533     for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
  2534       int k;
  2535       assert( pIdx->onError!=OE_None );
  2536       assert( pIdx->autoIndex );
  2537       assert( pIndex->onError!=OE_None );
  2538 
  2539       if( pIdx->nColumn!=pIndex->nColumn ) continue;
  2540       for(k=0; k<pIdx->nColumn; k++){
  2541         const char *z1 = pIdx->azColl[k];
  2542         const char *z2 = pIndex->azColl[k];
  2543         if( pIdx->aiColumn[k]!=pIndex->aiColumn[k] ) break;
  2544         if( pIdx->aSortOrder[k]!=pIndex->aSortOrder[k] ) break;
  2545         if( z1!=z2 && sqlite3StrICmp(z1, z2) ) break;
  2546       }
  2547       if( k==pIdx->nColumn ){
  2548         if( pIdx->onError!=pIndex->onError ){
  2549           /* This constraint creates the same index as a previous
  2550           ** constraint specified somewhere in the CREATE TABLE statement.
  2551           ** However the ON CONFLICT clauses are different. If both this 
  2552           ** constraint and the previous equivalent constraint have explicit
  2553           ** ON CONFLICT clauses this is an error. Otherwise, use the
  2554           ** explicitly specified behaviour for the index.
  2555           */
  2556           if( !(pIdx->onError==OE_Default || pIndex->onError==OE_Default) ){
  2557             sqlite3ErrorMsg(pParse, 
  2558                 "conflicting ON CONFLICT clauses specified", 0);
  2559           }
  2560           if( pIdx->onError==OE_Default ){
  2561             pIdx->onError = pIndex->onError;
  2562           }
  2563         }
  2564         goto exit_create_index;
  2565       }
  2566     }
  2567   }
  2568 
  2569   /* Link the new Index structure to its table and to the other
  2570   ** in-memory database structures. 
  2571   */
  2572   if( db->init.busy ){
  2573     Index *p;
  2574     p = sqlite3HashInsert(&pIndex->pSchema->idxHash, 
  2575                          pIndex->zName, strlen(pIndex->zName)+1, pIndex);
  2576     if( p ){
  2577       assert( p==pIndex );  /* Malloc must have failed */
  2578       db->mallocFailed = 1;
  2579       goto exit_create_index;
  2580     }
  2581     db->flags |= SQLITE_InternChanges;
  2582     if( pTblName!=0 ){
  2583       pIndex->tnum = db->init.newTnum;
  2584     }
  2585   }
  2586 
  2587   /* If the db->init.busy is 0 then create the index on disk.  This
  2588   ** involves writing the index into the master table and filling in the
  2589   ** index with the current table contents.
  2590   **
  2591   ** The db->init.busy is 0 when the user first enters a CREATE INDEX 
  2592   ** command.  db->init.busy is 1 when a database is opened and 
  2593   ** CREATE INDEX statements are read out of the master table.  In
  2594   ** the latter case the index already exists on disk, which is why
  2595   ** we don't want to recreate it.
  2596   **
  2597   ** If pTblName==0 it means this index is generated as a primary key
  2598   ** or UNIQUE constraint of a CREATE TABLE statement.  Since the table
  2599   ** has just been created, it contains no data and the index initialization
  2600   ** step can be skipped.
  2601   */
  2602   else if( db->init.busy==0 ){
  2603     Vdbe *v;
  2604     char *zStmt;
  2605     int iMem = pParse->nMem++;
  2606 
  2607     v = sqlite3GetVdbe(pParse);
  2608     if( v==0 ) goto exit_create_index;
  2609 
  2610 
  2611     /* Create the rootpage for the index
  2612     */
  2613     sqlite3BeginWriteOperation(pParse, 1, iDb);
  2614     sqlite3VdbeAddOp(v, OP_CreateIndex, iDb, 0);
  2615     sqlite3VdbeAddOp(v, OP_MemStore, iMem, 0);
  2616 
  2617     /* Gather the complete text of the CREATE INDEX statement into
  2618     ** the zStmt variable
  2619     */
  2620     if( pStart && pEnd ){
  2621       /* A named index with an explicit CREATE INDEX statement */
  2622       zStmt = sqlite3MPrintf(db, "CREATE%s INDEX %.*s",
  2623         onError==OE_None ? "" : " UNIQUE",
  2624         pEnd->z - pName->z + 1,
  2625         pName->z);
  2626     }else{
  2627       /* An automatic index created by a PRIMARY KEY or UNIQUE constraint */
  2628       /* zStmt = sqlite3MPrintf(""); */
  2629       zStmt = 0;
  2630     }
  2631 
  2632     /* Add an entry in sqlite_master for this index
  2633     */
  2634     sqlite3NestedParse(pParse, 
  2635         "INSERT INTO %Q.%s VALUES('index',%Q,%Q,#0,%Q);",
  2636         db->aDb[iDb].zName, SCHEMA_TABLE(iDb),
  2637         pIndex->zName,
  2638         pTab->zName,
  2639         zStmt
  2640     );
  2641     sqlite3VdbeAddOp(v, OP_Pop, 1, 0);
  2642     sqlite3_free(zStmt);
  2643 
  2644     /* Fill the index with data and reparse the schema. Code an OP_Expire
  2645     ** to invalidate all pre-compiled statements.
  2646     */
  2647     if( pTblName ){
  2648       sqlite3RefillIndex(pParse, pIndex, iMem);
  2649       sqlite3ChangeCookie(db, v, iDb);
  2650       sqlite3VdbeOp3(v, OP_ParseSchema, iDb, 0,
  2651          sqlite3MPrintf(db, "name='%q'", pIndex->zName), P3_DYNAMIC);
  2652       sqlite3VdbeAddOp(v, OP_Expire, 0, 0);
  2653     }
  2654   }
  2655 
  2656   /* When adding an index to the list of indices for a table, make
  2657   ** sure all indices labeled OE_Replace come after all those labeled
  2658   ** OE_Ignore.  This is necessary for the correct operation of UPDATE
  2659   ** and INSERT.
  2660   */
  2661   if( db->init.busy || pTblName==0 ){
  2662     if( onError!=OE_Replace || pTab->pIndex==0
  2663          || pTab->pIndex->onError==OE_Replace){
  2664       pIndex->pNext = pTab->pIndex;
  2665       pTab->pIndex = pIndex;
  2666     }else{
  2667       Index *pOther = pTab->pIndex;
  2668       while( pOther->pNext && pOther->pNext->onError!=OE_Replace ){
  2669         pOther = pOther->pNext;
  2670       }
  2671       pIndex->pNext = pOther->pNext;
  2672       pOther->pNext = pIndex;
  2673     }
  2674     pIndex = 0;
  2675   }
  2676 
  2677   /* Clean up before exiting */
  2678 exit_create_index:
  2679   if( pIndex ){
  2680     freeIndex(pIndex);
  2681   }
  2682   sqlite3ExprListDelete(pList);
  2683   sqlite3SrcListDelete(pTblName);
  2684   sqlite3_free(zName);
  2685   return;
  2686 }
  2687 
  2688 /*
  2689 ** Generate code to make sure the file format number is at least minFormat.
  2690 ** The generated code will increase the file format number if necessary.
  2691 */
  2692 void sqlite3MinimumFileFormat(Parse *pParse, int iDb, int minFormat){
  2693   Vdbe *v;
  2694   v = sqlite3GetVdbe(pParse);
  2695   if( v ){
  2696     sqlite3VdbeAddOp(v, OP_ReadCookie, iDb, 1);
  2697     sqlite3VdbeUsesBtree(v, iDb);
  2698     sqlite3VdbeAddOp(v, OP_Integer, minFormat, 0);
  2699     sqlite3VdbeAddOp(v, OP_Ge, 0, sqlite3VdbeCurrentAddr(v)+3);
  2700     sqlite3VdbeAddOp(v, OP_Integer, minFormat, 0);
  2701     sqlite3VdbeAddOp(v, OP_SetCookie, iDb, 1);
  2702   }
  2703 }
  2704 
  2705 /*
  2706 ** Fill the Index.aiRowEst[] array with default information - information
  2707 ** to be used when we have not run the ANALYZE command.
  2708 **
  2709 ** aiRowEst[0] is suppose to contain the number of elements in the index.
  2710 ** Since we do not know, guess 1 million.  aiRowEst[1] is an estimate of the
  2711 ** number of rows in the table that match any particular value of the
  2712 ** first column of the index.  aiRowEst[2] is an estimate of the number
  2713 ** of rows that match any particular combiniation of the first 2 columns
  2714 ** of the index.  And so forth.  It must always be the case that
  2715 *
  2716 **           aiRowEst[N]<=aiRowEst[N-1]
  2717 **           aiRowEst[N]>=1
  2718 **
  2719 ** Apart from that, we have little to go on besides intuition as to
  2720 ** how aiRowEst[] should be initialized.  The numbers generated here
  2721 ** are based on typical values found in actual indices.
  2722 */
  2723 void sqlite3DefaultRowEst(Index *pIdx){
  2724   unsigned *a = pIdx->aiRowEst;
  2725   int i;
  2726   assert( a!=0 );
  2727   a[0] = 1000000;
  2728   for(i=pIdx->nColumn; i>=5; i--){
  2729     a[i] = 5;
  2730   }
  2731   while( i>=1 ){
  2732     a[i] = 11 - i;
  2733     i--;
  2734   }
  2735   if( pIdx->onError!=OE_None ){
  2736     a[pIdx->nColumn] = 1;
  2737   }
  2738 }
  2739 
  2740 /*
  2741 ** This routine will drop an existing named index.  This routine
  2742 ** implements the DROP INDEX statement.
  2743 */
  2744 void sqlite3DropIndex(Parse *pParse, SrcList *pName, int ifExists){
  2745   Index *pIndex;
  2746   Vdbe *v;
  2747   sqlite3 *db = pParse->db;
  2748   int iDb;
  2749 
  2750   if( pParse->nErr || db->mallocFailed ){
  2751     goto exit_drop_index;
  2752   }
  2753   assert( pName->nSrc==1 );
  2754   if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){
  2755     goto exit_drop_index;
  2756   }
  2757   pIndex = sqlite3FindIndex(db, pName->a[0].zName, pName->a[0].zDatabase);
  2758   if( pIndex==0 ){
  2759     if( !ifExists ){
  2760       sqlite3ErrorMsg(pParse, "no such index: %S", pName, 0);
  2761     }
  2762     pParse->checkSchema = 1;
  2763     goto exit_drop_index;
  2764   }
  2765   if( pIndex->autoIndex ){
  2766     sqlite3ErrorMsg(pParse, "index associated with UNIQUE "
  2767       "or PRIMARY KEY constraint cannot be dropped", 0);
  2768     goto exit_drop_index;
  2769   }
  2770   iDb = sqlite3SchemaToIndex(db, pIndex->pSchema);
  2771 #ifndef SQLITE_OMIT_AUTHORIZATION
  2772   {
  2773     int code = SQLITE_DROP_INDEX;
  2774     Table *pTab = pIndex->pTable;
  2775     const char *zDb = db->aDb[iDb].zName;
  2776     const char *zTab = SCHEMA_TABLE(iDb);
  2777     if( sqlite3AuthCheck(pParse, SQLITE_DELETE, zTab, 0, zDb) ){
  2778       goto exit_drop_index;
  2779     }
  2780     if( !OMIT_TEMPDB && iDb ) code = SQLITE_DROP_TEMP_INDEX;
  2781     if( sqlite3AuthCheck(pParse, code, pIndex->zName, pTab->zName, zDb) ){
  2782       goto exit_drop_index;
  2783     }
  2784   }
  2785 #endif
  2786 
  2787   /* Generate code to remove the index and from the master table */
  2788   v = sqlite3GetVdbe(pParse);
  2789   if( v ){
  2790     sqlite3NestedParse(pParse,
  2791        "DELETE FROM %Q.%s WHERE name=%Q",
  2792        db->aDb[iDb].zName, SCHEMA_TABLE(iDb),
  2793        pIndex->zName
  2794     );
  2795     sqlite3ChangeCookie(db, v, iDb);
  2796     destroyRootPage(pParse, pIndex->tnum, iDb);
  2797     sqlite3VdbeOp3(v, OP_DropIndex, iDb, 0, pIndex->zName, 0);
  2798   }
  2799 
  2800 exit_drop_index:
  2801   sqlite3SrcListDelete(pName);
  2802 }
  2803 
  2804 /*
  2805 ** pArray is a pointer to an array of objects.  Each object in the
  2806 ** array is szEntry bytes in size.  This routine allocates a new
  2807 ** object on the end of the array.
  2808 **
  2809 ** *pnEntry is the number of entries already in use.  *pnAlloc is
  2810 ** the previously allocated size of the array.  initSize is the
  2811 ** suggested initial array size allocation.
  2812 **
  2813 ** The index of the new entry is returned in *pIdx.
  2814 **
  2815 ** This routine returns a pointer to the array of objects.  This
  2816 ** might be the same as the pArray parameter or it might be a different
  2817 ** pointer if the array was resized.
  2818 */
  2819 void *sqlite3ArrayAllocate(
  2820   sqlite3 *db,      /* Connection to notify of malloc failures */
  2821   void *pArray,     /* Array of objects.  Might be reallocated */
  2822   int szEntry,      /* Size of each object in the array */
  2823   int initSize,     /* Suggested initial allocation, in elements */
  2824   int *pnEntry,     /* Number of objects currently in use */
  2825   int *pnAlloc,     /* Current size of the allocation, in elements */
  2826   int *pIdx         /* Write the index of a new slot here */
  2827 ){
  2828   char *z;
  2829   if( *pnEntry >= *pnAlloc ){
  2830     void *pNew;
  2831     int newSize;
  2832     newSize = (*pnAlloc)*2 + initSize;
  2833     pNew = sqlite3DbRealloc(db, pArray, newSize*szEntry);
  2834     if( pNew==0 ){
  2835       *pIdx = -1;
  2836       return pArray;
  2837     }
  2838     *pnAlloc = newSize;
  2839     pArray = pNew;
  2840   }
  2841   z = (char*)pArray;
  2842   memset(&z[*pnEntry * szEntry], 0, szEntry);
  2843   *pIdx = *pnEntry;
  2844   ++*pnEntry;
  2845   return pArray;
  2846 }
  2847 
  2848 /*
  2849 ** Append a new element to the given IdList.  Create a new IdList if
  2850 ** need be.
  2851 **
  2852 ** A new IdList is returned, or NULL if malloc() fails.
  2853 */
  2854 IdList *sqlite3IdListAppend(sqlite3 *db, IdList *pList, Token *pToken){
  2855   int i;
  2856   if( pList==0 ){
  2857     pList = sqlite3DbMallocZero(db, sizeof(IdList) );
  2858     if( pList==0 ) return 0;
  2859     pList->nAlloc = 0;
  2860   }
  2861   pList->a = sqlite3ArrayAllocate(
  2862       db,
  2863       pList->a,
  2864       sizeof(pList->a[0]),
  2865       5,
  2866       &pList->nId,
  2867       &pList->nAlloc,
  2868       &i
  2869   );
  2870   if( i<0 ){
  2871     sqlite3IdListDelete(pList);
  2872     return 0;
  2873   }
  2874   pList->a[i].zName = sqlite3NameFromToken(db, pToken);
  2875   return pList;
  2876 }
  2877 
  2878 /*
  2879 ** Delete an IdList.
  2880 */
  2881 void sqlite3IdListDelete(IdList *pList){
  2882   int i;
  2883   if( pList==0 ) return;
  2884   for(i=0; i<pList->nId; i++){
  2885     sqlite3_free(pList->a[i].zName);
  2886   }
  2887   sqlite3_free(pList->a);
  2888   sqlite3_free(pList);
  2889 }
  2890 
  2891 /*
  2892 ** Return the index in pList of the identifier named zId.  Return -1
  2893 ** if not found.
  2894 */
  2895 int sqlite3IdListIndex(IdList *pList, const char *zName){
  2896   int i;
  2897   if( pList==0 ) return -1;
  2898   for(i=0; i<pList->nId; i++){
  2899     if( sqlite3StrICmp(pList->a[i].zName, zName)==0 ) return i;
  2900   }
  2901   return -1;
  2902 }
  2903 
  2904 /*
  2905 ** Append a new table name to the given SrcList.  Create a new SrcList if
  2906 ** need be.  A new entry is created in the SrcList even if pToken is NULL.
  2907 **
  2908 ** A new SrcList is returned, or NULL if malloc() fails.
  2909 **
  2910 ** If pDatabase is not null, it means that the table has an optional
  2911 ** database name prefix.  Like this:  "database.table".  The pDatabase
  2912 ** points to the table name and the pTable points to the database name.
  2913 ** The SrcList.a[].zName field is filled with the table name which might
  2914 ** come from pTable (if pDatabase is NULL) or from pDatabase.  
  2915 ** SrcList.a[].zDatabase is filled with the database name from pTable,
  2916 ** or with NULL if no database is specified.
  2917 **
  2918 ** In other words, if call like this:
  2919 **
  2920 **         sqlite3SrcListAppend(D,A,B,0);
  2921 **
  2922 ** Then B is a table name and the database name is unspecified.  If called
  2923 ** like this:
  2924 **
  2925 **         sqlite3SrcListAppend(D,A,B,C);
  2926 **
  2927 ** Then C is the table name and B is the database name.
  2928 */
  2929 SrcList *sqlite3SrcListAppend(
  2930   sqlite3 *db,        /* Connection to notify of malloc failures */
  2931   SrcList *pList,     /* Append to this SrcList. NULL creates a new SrcList */
  2932   Token *pTable,      /* Table to append */
  2933   Token *pDatabase    /* Database of the table */
  2934 ){
  2935   struct SrcList_item *pItem;
  2936   if( pList==0 ){
  2937     pList = sqlite3DbMallocZero(db, sizeof(SrcList) );
  2938     if( pList==0 ) return 0;
  2939     pList->nAlloc = 1;
  2940   }
  2941   if( pList->nSrc>=pList->nAlloc ){
  2942     SrcList *pNew;
  2943     pList->nAlloc *= 2;
  2944     pNew = sqlite3DbRealloc(db, pList,
  2945                sizeof(*pList) + (pList->nAlloc-1)*sizeof(pList->a[0]) );
  2946     if( pNew==0 ){
  2947       sqlite3SrcListDelete(pList);
  2948       return 0;
  2949     }
  2950     pList = pNew;
  2951   }
  2952   pItem = &pList->a[pList->nSrc];
  2953   memset(pItem, 0, sizeof(pList->a[0]));
  2954   if( pDatabase && pDatabase->z==0 ){
  2955     pDatabase = 0;
  2956   }
  2957   if( pDatabase && pTable ){
  2958     Token *pTemp = pDatabase;
  2959     pDatabase = pTable;
  2960     pTable = pTemp;
  2961   }
  2962   pItem->zName = sqlite3NameFromToken(db, pTable);
  2963   pItem->zDatabase = sqlite3NameFromToken(db, pDatabase);
  2964   pItem->iCursor = -1;
  2965   pItem->isPopulated = 0;
  2966   pList->nSrc++;
  2967   return pList;
  2968 }
  2969 
  2970 /*
  2971 ** Assign cursors to all tables in a SrcList
  2972 */
  2973 void sqlite3SrcListAssignCursors(Parse *pParse, SrcList *pList){
  2974   int i;
  2975   struct SrcList_item *pItem;
  2976   assert(pList || pParse->db->mallocFailed );
  2977   if( pList ){
  2978     for(i=0, pItem=pList->a; i<pList->nSrc; i++, pItem++){
  2979       if( pItem->iCursor>=0 ) break;
  2980       pItem->iCursor = pParse->nTab++;
  2981       if( pItem->pSelect ){
  2982         sqlite3SrcListAssignCursors(pParse, pItem->pSelect->pSrc);
  2983       }
  2984     }
  2985   }
  2986 }
  2987 
  2988 /*
  2989 ** Delete an entire SrcList including all its substructure.
  2990 */
  2991 void sqlite3SrcListDelete(SrcList *pList){
  2992   int i;
  2993   struct SrcList_item *pItem;
  2994   if( pList==0 ) return;
  2995   for(pItem=pList->a, i=0; i<pList->nSrc; i++, pItem++){
  2996     sqlite3_free(pItem->zDatabase);
  2997     sqlite3_free(pItem->zName);
  2998     sqlite3_free(pItem->zAlias);
  2999     sqlite3DeleteTable(pItem->pTab);
  3000     sqlite3SelectDelete(pItem->pSelect);
  3001     sqlite3ExprDelete(pItem->pOn);
  3002     sqlite3IdListDelete(pItem->pUsing);
  3003   }
  3004   sqlite3_free(pList);
  3005 }
  3006 
  3007 /*
  3008 ** This routine is called by the parser to add a new term to the
  3009 ** end of a growing FROM clause.  The "p" parameter is the part of
  3010 ** the FROM clause that has already been constructed.  "p" is NULL
  3011 ** if this is the first term of the FROM clause.  pTable and pDatabase
  3012 ** are the name of the table and database named in the FROM clause term.
  3013 ** pDatabase is NULL if the database name qualifier is missing - the
  3014 ** usual case.  If the term has a alias, then pAlias points to the
  3015 ** alias token.  If the term is a subquery, then pSubquery is the
  3016 ** SELECT statement that the subquery encodes.  The pTable and
  3017 ** pDatabase parameters are NULL for subqueries.  The pOn and pUsing
  3018 ** parameters are the content of the ON and USING clauses.
  3019 **
  3020 ** Return a new SrcList which encodes is the FROM with the new
  3021 ** term added.
  3022 */
  3023 SrcList *sqlite3SrcListAppendFromTerm(
  3024   Parse *pParse,          /* Parsing context */
  3025   SrcList *p,             /* The left part of the FROM clause already seen */
  3026   Token *pTable,          /* Name of the table to add to the FROM clause */
  3027   Token *pDatabase,       /* Name of the database containing pTable */
  3028   Token *pAlias,          /* The right-hand side of the AS subexpression */
  3029   Select *pSubquery,      /* A subquery used in place of a table name */
  3030   Expr *pOn,              /* The ON clause of a join */
  3031   IdList *pUsing          /* The USING clause of a join */
  3032 ){
  3033   struct SrcList_item *pItem;
  3034   sqlite3 *db = pParse->db;
  3035   p = sqlite3SrcListAppend(db, p, pTable, pDatabase);
  3036   if( p==0 || p->nSrc==0 ){
  3037     sqlite3ExprDelete(pOn);
  3038     sqlite3IdListDelete(pUsing);
  3039     sqlite3SelectDelete(pSubquery);
  3040     return p;
  3041   }
  3042   pItem = &p->a[p->nSrc-1];
  3043   if( pAlias && pAlias->n ){
  3044     pItem->zAlias = sqlite3NameFromToken(db, pAlias);
  3045   }
  3046   pItem->pSelect = pSubquery;
  3047   pItem->pOn = pOn;
  3048   pItem->pUsing = pUsing;
  3049   return p;
  3050 }
  3051 
  3052 /*
  3053 ** When building up a FROM clause in the parser, the join operator
  3054 ** is initially attached to the left operand.  But the code generator
  3055 ** expects the join operator to be on the right operand.  This routine
  3056 ** Shifts all join operators from left to right for an entire FROM
  3057 ** clause.
  3058 **
  3059 ** Example: Suppose the join is like this:
  3060 **
  3061 **           A natural cross join B
  3062 **
  3063 ** The operator is "natural cross join".  The A and B operands are stored
  3064 ** in p->a[0] and p->a[1], respectively.  The parser initially stores the
  3065 ** operator with A.  This routine shifts that operator over to B.
  3066 */
  3067 void sqlite3SrcListShiftJoinType(SrcList *p){
  3068   if( p && p->a ){
  3069     int i;
  3070     for(i=p->nSrc-1; i>0; i--){
  3071       p->a[i].jointype = p->a[i-1].jointype;
  3072     }
  3073     p->a[0].jointype = 0;
  3074   }
  3075 }
  3076 
  3077 /*
  3078 ** Begin a transaction
  3079 */
  3080 void sqlite3BeginTransaction(Parse *pParse, int type){
  3081   sqlite3 *db;
  3082   Vdbe *v;
  3083   int i;
  3084 
  3085   if( pParse==0 || (db=pParse->db)==0 || db->aDb[0].pBt==0 ) return;
  3086   if( pParse->nErr || db->mallocFailed ) return;
  3087   if( sqlite3AuthCheck(pParse, SQLITE_TRANSACTION, "BEGIN", 0, 0) ) return;
  3088 
  3089   v = sqlite3GetVdbe(pParse);
  3090   if( !v ) return;
  3091   if( type!=TK_DEFERRED ){
  3092     for(i=0; i<db->nDb; i++){
  3093       sqlite3VdbeAddOp(v, OP_Transaction, i, (type==TK_EXCLUSIVE)+1);
  3094       sqlite3VdbeUsesBtree(v, i);
  3095     }
  3096   }
  3097   sqlite3VdbeAddOp(v, OP_AutoCommit, 0, 0);
  3098 }
  3099 
  3100 /*
  3101 ** Commit a transaction
  3102 */
  3103 void sqlite3CommitTransaction(Parse *pParse){
  3104   sqlite3 *db;
  3105   Vdbe *v;
  3106 
  3107   if( pParse==0 || (db=pParse->db)==0 || db->aDb[0].pBt==0 ) return;
  3108   if( pParse->nErr || db->mallocFailed ) return;
  3109   if( sqlite3AuthCheck(pParse, SQLITE_TRANSACTION, "COMMIT", 0, 0) ) return;
  3110 
  3111   v = sqlite3GetVdbe(pParse);
  3112   if( v ){
  3113     sqlite3VdbeAddOp(v, OP_AutoCommit, 1, 0);
  3114   }
  3115 }
  3116 
  3117 /*
  3118 ** Rollback a transaction
  3119 */
  3120 void sqlite3RollbackTransaction(Parse *pParse){
  3121   sqlite3 *db;
  3122   Vdbe *v;
  3123 
  3124   if( pParse==0 || (db=pParse->db)==0 || db->aDb[0].pBt==0 ) return;
  3125   if( pParse->nErr || db->mallocFailed ) return;
  3126   if( sqlite3AuthCheck(pParse, SQLITE_TRANSACTION, "ROLLBACK", 0, 0) ) return;
  3127 
  3128   v = sqlite3GetVdbe(pParse);
  3129   if( v ){
  3130     sqlite3VdbeAddOp(v, OP_AutoCommit, 1, 1);
  3131   }
  3132 }
  3133 
  3134 /*
  3135 ** Make sure the TEMP database is open and available for use.  Return
  3136 ** the number of errors.  Leave any error messages in the pParse structure.
  3137 */
  3138 int sqlite3OpenTempDatabase(Parse *pParse){
  3139   sqlite3 *db = pParse->db;
  3140   if( db->aDb[1].pBt==0 && !pParse->explain ){
  3141     int rc;
  3142     static const int flags = 
  3143           SQLITE_OPEN_READWRITE |
  3144           SQLITE_OPEN_CREATE |
  3145           SQLITE_OPEN_EXCLUSIVE |
  3146           SQLITE_OPEN_DELETEONCLOSE |
  3147           SQLITE_OPEN_TEMP_DB;
  3148 
  3149     rc = sqlite3BtreeFactory(db, 0, 0, SQLITE_DEFAULT_CACHE_SIZE, flags,
  3150                                  &db->aDb[1].pBt);
  3151     if( rc!=SQLITE_OK ){
  3152       sqlite3ErrorMsg(pParse, "unable to open a temporary database "
  3153         "file for storing temporary tables");
  3154       pParse->rc = rc;
  3155       return 1;
  3156     }
  3157     if( db->flags & !db->autoCommit ){
  3158       rc = sqlite3BtreeBeginTrans(db->aDb[1].pBt, 1);
  3159       if( rc!=SQLITE_OK ){
  3160         sqlite3ErrorMsg(pParse, "unable to get a write lock on "
  3161           "the temporary database file");
  3162         pParse->rc = rc;
  3163         return 1;
  3164       }
  3165     }
  3166     assert( db->aDb[1].pSchema );
  3167   }
  3168   return 0;
  3169 }
  3170 
  3171 /*
  3172 ** Generate VDBE code that will verify the schema cookie and start
  3173 ** a read-transaction for all named database files.
  3174 **
  3175 ** It is important that all schema cookies be verified and all
  3176 ** read transactions be started before anything else happens in
  3177 ** the VDBE program.  But this routine can be called after much other
  3178 ** code has been generated.  So here is what we do:
  3179 **
  3180 ** The first time this routine is called, we code an OP_Goto that
  3181 ** will jump to a subroutine at the end of the program.  Then we
  3182 ** record every database that needs its schema verified in the
  3183 ** pParse->cookieMask field.  Later, after all other code has been
  3184 ** generated, the subroutine that does the cookie verifications and
  3185 ** starts the transactions will be coded and the OP_Goto P2 value
  3186 ** will be made to point to that subroutine.  The generation of the
  3187 ** cookie verification subroutine code happens in sqlite3FinishCoding().
  3188 **
  3189 ** If iDb<0 then code the OP_Goto only - don't set flag to verify the
  3190 ** schema on any databases.  This can be used to position the OP_Goto
  3191 ** early in the code, before we know if any database tables will be used.
  3192 */
  3193 void sqlite3CodeVerifySchema(Parse *pParse, int iDb){
  3194   sqlite3 *db;
  3195   Vdbe *v;
  3196   int mask;
  3197 
  3198   v = sqlite3GetVdbe(pParse);
  3199   if( v==0 ) return;  /* This only happens if there was a prior error */
  3200   db = pParse->db;
  3201   if( pParse->cookieGoto==0 ){
  3202     pParse->cookieGoto = sqlite3VdbeAddOp(v, OP_Goto, 0, 0)+1;
  3203   }
  3204   if( iDb>=0 ){
  3205     assert( iDb<db->nDb );
  3206     assert( db->aDb[iDb].pBt!=0 || iDb==1 );
  3207     assert( iDb<SQLITE_MAX_ATTACHED+2 );
  3208     mask = 1<<iDb;
  3209     if( (pParse->cookieMask & mask)==0 ){
  3210       pParse->cookieMask |= mask;
  3211       pParse->cookieValue[iDb] = db->aDb[iDb].pSchema->schema_cookie;
  3212       if( !OMIT_TEMPDB && iDb==1 ){
  3213         sqlite3OpenTempDatabase(pParse);
  3214       }
  3215     }
  3216   }
  3217 }
  3218 
  3219 /*
  3220 ** Generate VDBE code that prepares for doing an operation that
  3221 ** might change the database.
  3222 **
  3223 ** This routine starts a new transaction if we are not already within
  3224 ** a transaction.  If we are already within a transaction, then a checkpoint
  3225 ** is set if the setStatement parameter is true.  A checkpoint should
  3226 ** be set for operations that might fail (due to a constraint) part of
  3227 ** the way through and which will need to undo some writes without having to
  3228 ** rollback the whole transaction.  For operations where all constraints
  3229 ** can be checked before any changes are made to the database, it is never
  3230 ** necessary to undo a write and the checkpoint should not be set.
  3231 **
  3232 ** Only database iDb and the temp database are made writable by this call.
  3233 ** If iDb==0, then the main and temp databases are made writable.   If
  3234 ** iDb==1 then only the temp database is made writable.  If iDb>1 then the
  3235 ** specified auxiliary database and the temp database are made writable.
  3236 */
  3237 void sqlite3BeginWriteOperation(Parse *pParse, int setStatement, int iDb){
  3238   Vdbe *v = sqlite3GetVdbe(pParse);
  3239   if( v==0 ) return;
  3240   sqlite3CodeVerifySchema(pParse, iDb);
  3241   pParse->writeMask |= 1<<iDb;
  3242   if( setStatement && pParse->nested==0 ){
  3243     sqlite3VdbeAddOp(v, OP_Statement, iDb, 0);
  3244   }
  3245   if( (OMIT_TEMPDB || iDb!=1) && pParse->db->aDb[1].pBt!=0 ){
  3246     sqlite3BeginWriteOperation(pParse, setStatement, 1);
  3247   }
  3248 }
  3249 
  3250 /*
  3251 ** Check to see if pIndex uses the collating sequence pColl.  Return
  3252 ** true if it does and false if it does not.
  3253 */
  3254 #ifndef SQLITE_OMIT_REINDEX
  3255 static int collationMatch(const char *zColl, Index *pIndex){
  3256   int i;
  3257   for(i=0; i<pIndex->nColumn; i++){
  3258     const char *z = pIndex->azColl[i];
  3259     if( z==zColl || (z && zColl && 0==sqlite3StrICmp(z, zColl)) ){
  3260       return 1;
  3261     }
  3262   }
  3263   return 0;
  3264 }
  3265 #endif
  3266 
  3267 /*
  3268 ** Recompute all indices of pTab that use the collating sequence pColl.
  3269 ** If pColl==0 then recompute all indices of pTab.
  3270 */
  3271 #ifndef SQLITE_OMIT_REINDEX
  3272 static void reindexTable(Parse *pParse, Table *pTab, char const *zColl){
  3273   Index *pIndex;              /* An index associated with pTab */
  3274 
  3275   for(pIndex=pTab->pIndex; pIndex; pIndex=pIndex->pNext){
  3276     if( zColl==0 || collationMatch(zColl, pIndex) ){
  3277       int iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
  3278       sqlite3BeginWriteOperation(pParse, 0, iDb);
  3279       sqlite3RefillIndex(pParse, pIndex, -1);
  3280     }
  3281   }
  3282 }
  3283 #endif
  3284 
  3285 /*
  3286 ** Recompute all indices of all tables in all databases where the
  3287 ** indices use the collating sequence pColl.  If pColl==0 then recompute
  3288 ** all indices everywhere.
  3289 */
  3290 #ifndef SQLITE_OMIT_REINDEX
  3291 static void reindexDatabases(Parse *pParse, char const *zColl){
  3292   Db *pDb;                    /* A single database */
  3293   int iDb;                    /* The database index number */
  3294   sqlite3 *db = pParse->db;   /* The database connection */
  3295   HashElem *k;                /* For looping over tables in pDb */
  3296   Table *pTab;                /* A table in the database */
  3297 
  3298   for(iDb=0, pDb=db->aDb; iDb<db->nDb; iDb++, pDb++){
  3299     assert( pDb!=0 );
  3300     for(k=sqliteHashFirst(&pDb->pSchema->tblHash);  k; k=sqliteHashNext(k)){
  3301       pTab = (Table*)sqliteHashData(k);
  3302       reindexTable(pParse, pTab, zColl);
  3303     }
  3304   }
  3305 }
  3306 #endif
  3307 
  3308 /*
  3309 ** Generate code for the REINDEX command.
  3310 **
  3311 **        REINDEX                            -- 1
  3312 **        REINDEX  <collation>               -- 2
  3313 **        REINDEX  ?<database>.?<tablename>  -- 3
  3314 **        REINDEX  ?<database>.?<indexname>  -- 4
  3315 **
  3316 ** Form 1 causes all indices in all attached databases to be rebuilt.
  3317 ** Form 2 rebuilds all indices in all databases that use the named
  3318 ** collating function.  Forms 3 and 4 rebuild the named index or all
  3319 ** indices associated with the named table.
  3320 */
  3321 #ifndef SQLITE_OMIT_REINDEX
  3322 void sqlite3Reindex(Parse *pParse, Token *pName1, Token *pName2){
  3323   CollSeq *pColl;             /* Collating sequence to be reindexed, or NULL */
  3324   char *z;                    /* Name of a table or index */
  3325   const char *zDb;            /* Name of the database */
  3326   Table *pTab;                /* A table in the database */
  3327   Index *pIndex;              /* An index associated with pTab */
  3328   int iDb;                    /* The database index number */
  3329   sqlite3 *db = pParse->db;   /* The database connection */
  3330   Token *pObjName;            /* Name of the table or index to be reindexed */
  3331 
  3332   /* Read the database schema. If an error occurs, leave an error message
  3333   ** and code in pParse and return NULL. */
  3334   if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){
  3335     return;
  3336   }
  3337 
  3338   if( pName1==0 || pName1->z==0 ){
  3339     reindexDatabases(pParse, 0);
  3340     return;
  3341   }else if( pName2==0 || pName2->z==0 ){
  3342     assert( pName1->z );
  3343     pColl = sqlite3FindCollSeq(db, ENC(db), (char*)pName1->z, pName1->n, 0);
  3344     if( pColl ){
  3345       char *zColl = sqlite3DbStrNDup(db, (const char *)pName1->z, pName1->n);
  3346       if( zColl ){
  3347         reindexDatabases(pParse, zColl);
  3348         sqlite3_free(zColl);
  3349       }
  3350       return;
  3351     }
  3352   }
  3353   iDb = sqlite3TwoPartName(pParse, pName1, pName2, &pObjName);
  3354   if( iDb<0 ) return;
  3355   z = sqlite3NameFromToken(db, pObjName);
  3356   if( z==0 ) return;
  3357   zDb = db->aDb[iDb].zName;
  3358   pTab = sqlite3FindTable(db, z, zDb);
  3359   if( pTab ){
  3360     reindexTable(pParse, pTab, 0);
  3361     sqlite3_free(z);
  3362     return;
  3363   }
  3364   pIndex = sqlite3FindIndex(db, z, zDb);
  3365   sqlite3_free(z);
  3366   if( pIndex ){
  3367     sqlite3BeginWriteOperation(pParse, 0, iDb);
  3368     sqlite3RefillIndex(pParse, pIndex, -1);
  3369     return;
  3370   }
  3371   sqlite3ErrorMsg(pParse, "unable to identify the object to be reindexed");
  3372 }
  3373 #endif
  3374 
  3375 /*
  3376 ** Return a dynamicly allocated KeyInfo structure that can be used
  3377 ** with OP_OpenRead or OP_OpenWrite to access database index pIdx.
  3378 **
  3379 ** If successful, a pointer to the new structure is returned. In this case
  3380 ** the caller is responsible for calling sqlite3_free() on the returned 
  3381 ** pointer. If an error occurs (out of memory or missing collation 
  3382 ** sequence), NULL is returned and the state of pParse updated to reflect
  3383 ** the error.
  3384 */
  3385 KeyInfo *sqlite3IndexKeyinfo(Parse *pParse, Index *pIdx){
  3386   int i;
  3387   int nCol = pIdx->nColumn;
  3388   int nBytes = sizeof(KeyInfo) + (nCol-1)*sizeof(CollSeq*) + nCol;
  3389   KeyInfo *pKey = (KeyInfo *)sqlite3DbMallocZero(pParse->db, nBytes);
  3390 
  3391   if( pKey ){
  3392     pKey->db = pParse->db;
  3393     pKey->aSortOrder = (u8 *)&(pKey->aColl[nCol]);
  3394     assert( &pKey->aSortOrder[nCol]==&(((u8 *)pKey)[nBytes]) );
  3395     for(i=0; i<nCol; i++){
  3396       char *zColl = pIdx->azColl[i];
  3397       assert( zColl );
  3398       pKey->aColl[i] = sqlite3LocateCollSeq(pParse, zColl, -1);
  3399       pKey->aSortOrder[i] = pIdx->aSortOrder[i];
  3400     }
  3401     pKey->nField = nCol;
  3402   }
  3403 
  3404   if( pParse->nErr ){
  3405     sqlite3_free(pKey);
  3406     pKey = 0;
  3407   }
  3408   return pKey;
  3409 }