File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / sqlite3 / src / build.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 17:04:17 2012 UTC (12 years, 8 months ago) by misho
Branches: sqlite3, MAIN
CVS tags: v3_7_10, HEAD
sqlite3

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

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>