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