4 ** The author disclaims copyright to this source code. In place of
5 ** a legal notice, here is a blessing:
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.
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:
27 #include "sqliteInt.h"
31 ** This routine is called when a new SQL statement is beginning to
32 ** be parsed. Initialize the pParse structure as needed.
34 void sqlite3BeginParse(Parse
*pParse
, int explainFlag
){
35 pParse
->explain
= explainFlag
;
40 ** This routine is called after a single SQL statement has been
41 ** parsed and a VDBE program to execute that statement has been
42 ** prepared. This routine puts the finishing touches on the
43 ** VDBE program and resets the pParse structure for the next
46 ** Note that if an error occurred, it might be the case that
47 ** no VDBE code was generated.
49 void sqlite3FinishCoding(Parse
*pParse
){
53 if( sqlite3_malloc_failed
) return;
54 if( pParse
->nested
) return;
56 if( pParse
->rc
==SQLITE_OK
&& pParse
->nErr
){
57 pParse
->rc
= SQLITE_ERROR
;
62 /* Begin by generating some termination code at the end of the
66 v
= sqlite3GetVdbe(pParse
);
68 sqlite3VdbeAddOp(v
, OP_Halt
, 0, 0);
70 /* The cookie mask contains one bit for each database file open.
71 ** (Bit 0 is for main, bit 1 is for temp, and so forth.) Bits are
72 ** set for each database that is used. Generate code to start a
73 ** transaction on each used database and to verify the schema cookie
74 ** on each used database.
76 if( pParse
->cookieGoto
>0 ){
79 sqlite3VdbeChangeP2(v
, pParse
->cookieGoto
-1, sqlite3VdbeCurrentAddr(v
));
80 for(iDb
=0, mask
=1; iDb
<db
->nDb
; mask
<<=1, iDb
++){
81 if( (mask
& pParse
->cookieMask
)==0 ) continue;
82 sqlite3VdbeAddOp(v
, OP_Transaction
, iDb
, (mask
& pParse
->writeMask
)!=0);
83 sqlite3VdbeAddOp(v
, OP_VerifyCookie
, iDb
, pParse
->cookieValue
[iDb
]);
85 sqlite3VdbeAddOp(v
, OP_Goto
, 0, pParse
->cookieGoto
);
88 /* Add a No-op that contains the complete text of the compiled SQL
89 ** statement as its P3 argument. This does not change the functionality
92 ** This is used to implement sqlite3_trace().
94 sqlite3VdbeOp3(v
, OP_Noop
, 0, 0, pParse
->zSql
, pParse
->zTail
-pParse
->zSql
);
98 /* Get the VDBE program ready for execution
100 if( v
&& pParse
->nErr
==0 ){
101 FILE *trace
= (db
->flags
& SQLITE_VdbeTrace
)!=0 ? stdout
: 0;
102 sqlite3VdbeTrace(v
, trace
);
103 sqlite3VdbeMakeReady(v
, pParse
->nVar
, pParse
->nMem
+3,
104 pParse
->nTab
+3, pParse
->nMaxDepth
+1, pParse
->explain
);
105 pParse
->rc
= SQLITE_DONE
;
106 pParse
->colNamesSet
= 0;
107 }else if( pParse
->rc
==SQLITE_OK
){
108 pParse
->rc
= SQLITE_ERROR
;
114 pParse
->cookieMask
= 0;
115 pParse
->cookieGoto
= 0;
119 ** Run the parser and code generator recursively in order to generate
120 ** code for the SQL statement given onto the end of the pParse context
121 ** currently under construction. When the parser is run recursively
122 ** this way, the final OP_Halt is not appended and other initialization
123 ** and finalization steps are omitted because those are handling by the
126 ** Not everything is nestable. This facility is designed to permit
127 ** INSERT, UPDATE, and DELETE operations against SQLITE_MASTER. Use
128 ** care if you decide to try to use this routine for some other purposes.
130 void sqlite3NestedParse(Parse
*pParse
, const char *zFormat
, ...){
134 # define SAVE_SZ (sizeof(Parse) - offsetof(Parse,nVar))
135 char saveBuf
[SAVE_SZ
];
137 if( pParse
->nErr
) return;
138 assert( pParse
->nested
<10 ); /* Nesting should only be of limited depth */
139 va_start(ap
, zFormat
);
140 zSql
= sqlite3VMPrintf(zFormat
, ap
);
143 return; /* A malloc must have failed */
146 memcpy(saveBuf
, &pParse
->nVar
, SAVE_SZ
);
147 memset(&pParse
->nVar
, 0, SAVE_SZ
);
148 rc
= sqlite3RunParser(pParse
, zSql
, 0);
150 memcpy(&pParse
->nVar
, saveBuf
, SAVE_SZ
);
155 ** Locate the in-memory structure that describes a particular database
156 ** table given the name of that table and (optionally) the name of the
157 ** database containing the table. Return NULL if not found.
159 ** If zDatabase is 0, all databases are searched for the table and the
160 ** first matching table is returned. (No checking for duplicate table
161 ** names is done.) The search order is TEMP first, then MAIN, then any
162 ** auxiliary databases added using the ATTACH command.
164 ** See also sqlite3LocateTable().
166 Table
*sqlite3FindTable(sqlite3
*db
, const char *zName
, const char *zDatabase
){
170 assert( (db
->flags
& SQLITE_Initialized
) || db
->init
.busy
);
171 for(i
=OMIT_TEMPDB
; i
<db
->nDb
; i
++){
172 int j
= (i
<2) ? i
^1 : i
; /* Search TEMP before MAIN */
173 if( zDatabase
!=0 && sqlite3StrICmp(zDatabase
, db
->aDb
[j
].zName
) ) continue;
174 p
= sqlite3HashFind(&db
->aDb
[j
].tblHash
, zName
, strlen(zName
)+1);
181 ** Locate the in-memory structure that describes a particular database
182 ** table given the name of that table and (optionally) the name of the
183 ** database containing the table. Return NULL if not found. Also leave an
184 ** error message in pParse->zErrMsg.
186 ** The difference between this routine and sqlite3FindTable() is that this
187 ** routine leaves an error message in pParse->zErrMsg where
188 ** sqlite3FindTable() does not.
190 Table
*sqlite3LocateTable(Parse
*pParse
, const char *zName
, const char *zDbase
){
193 /* Read the database schema. If an error occurs, leave an error message
194 ** and code in pParse and return NULL. */
195 if( SQLITE_OK
!=sqlite3ReadSchema(pParse
) ){
199 p
= sqlite3FindTable(pParse
->db
, zName
, zDbase
);
202 sqlite3ErrorMsg(pParse
, "no such table: %s.%s", zDbase
, zName
);
203 }else if( sqlite3FindTable(pParse
->db
, zName
, 0)!=0 ){
204 sqlite3ErrorMsg(pParse
, "table \"%s\" is not in database \"%s\"",
207 sqlite3ErrorMsg(pParse
, "no such table: %s", zName
);
209 pParse
->checkSchema
= 1;
215 ** Locate the in-memory structure that describes
216 ** a particular index given the name of that index
217 ** and the name of the database that contains the index.
218 ** Return NULL if not found.
220 ** If zDatabase is 0, all databases are searched for the
221 ** table and the first matching index is returned. (No checking
222 ** for duplicate index names is done.) The search order is
223 ** TEMP first, then MAIN, then any auxiliary databases added
224 ** using the ATTACH command.
226 Index
*sqlite3FindIndex(sqlite3
*db
, const char *zName
, const char *zDb
){
229 assert( (db
->flags
& SQLITE_Initialized
) || db
->init
.busy
);
230 for(i
=OMIT_TEMPDB
; i
<db
->nDb
; i
++){
231 int j
= (i
<2) ? i
^1 : i
; /* Search TEMP before MAIN */
232 if( zDb
&& sqlite3StrICmp(zDb
, db
->aDb
[j
].zName
) ) continue;
233 p
= sqlite3HashFind(&db
->aDb
[j
].idxHash
, zName
, strlen(zName
)+1);
240 ** Reclaim the memory used by an index
242 static void freeIndex(Index
*p
){
243 sqliteFree(p
->zColAff
);
248 ** Remove the given index from the index hash table, and free
249 ** its memory structures.
251 ** The index is removed from the database hash tables but
252 ** it is not unlinked from the Table that it indexes.
253 ** Unlinking from the Table must be done by the calling function.
255 static void sqliteDeleteIndex(sqlite3
*db
, Index
*p
){
258 assert( db
!=0 && p
->zName
!=0 );
259 pOld
= sqlite3HashInsert(&db
->aDb
[p
->iDb
].idxHash
, p
->zName
,
260 strlen(p
->zName
)+1, 0);
261 if( pOld
!=0 && pOld
!=p
){
262 sqlite3HashInsert(&db
->aDb
[p
->iDb
].idxHash
, pOld
->zName
,
263 strlen(pOld
->zName
)+1, pOld
);
269 ** For the index called zIdxName which is found in the database iDb,
270 ** unlike that index from its Table then remove the index from
271 ** the index hash table and free all memory structures associated
274 void sqlite3UnlinkAndDeleteIndex(sqlite3
*db
, int iDb
, const char *zIdxName
){
278 len
= strlen(zIdxName
);
279 pIndex
= sqlite3HashInsert(&db
->aDb
[iDb
].idxHash
, zIdxName
, len
+1, 0);
281 if( pIndex
->pTable
->pIndex
==pIndex
){
282 pIndex
->pTable
->pIndex
= pIndex
->pNext
;
285 for(p
=pIndex
->pTable
->pIndex
; p
&& p
->pNext
!=pIndex
; p
=p
->pNext
){}
286 if( p
&& p
->pNext
==pIndex
){
287 p
->pNext
= pIndex
->pNext
;
292 db
->flags
|= SQLITE_InternChanges
;
296 ** Erase all schema information from the in-memory hash tables of
297 ** a single database. This routine is called to reclaim memory
298 ** before the database closes. It is also called during a rollback
299 ** if there were schema changes during the transaction or if a
300 ** schema-cookie mismatch occurs.
302 ** If iDb<=0 then reset the internal schema tables for all database
303 ** files. If iDb>=2 then reset the internal schema for only the
304 ** single file indicated.
306 void sqlite3ResetInternalSchema(sqlite3
*db
, int iDb
){
312 assert( iDb
>=0 && iDb
<db
->nDb
);
313 db
->flags
&= ~SQLITE_Initialized
;
314 for(i
=iDb
; i
<db
->nDb
; i
++){
315 Db
*pDb
= &db
->aDb
[i
];
316 temp1
= pDb
->tblHash
;
317 temp2
= pDb
->trigHash
;
318 sqlite3HashInit(&pDb
->trigHash
, SQLITE_HASH_STRING
, 0);
319 sqlite3HashClear(&pDb
->aFKey
);
320 sqlite3HashClear(&pDb
->idxHash
);
321 for(pElem
=sqliteHashFirst(&temp2
); pElem
; pElem
=sqliteHashNext(pElem
)){
322 sqlite3DeleteTrigger((Trigger
*)sqliteHashData(pElem
));
324 sqlite3HashClear(&temp2
);
325 sqlite3HashInit(&pDb
->tblHash
, SQLITE_HASH_STRING
, 0);
326 for(pElem
=sqliteHashFirst(&temp1
); pElem
; pElem
=sqliteHashNext(pElem
)){
327 Table
*pTab
= sqliteHashData(pElem
);
328 sqlite3DeleteTable(db
, pTab
);
330 sqlite3HashClear(&temp1
);
332 DbClearProperty(db
, i
, DB_SchemaLoaded
);
336 db
->flags
&= ~SQLITE_InternChanges
;
338 /* If one or more of the auxiliary database files has been closed,
339 ** then remove then from the auxiliary database list. We take the
340 ** opportunity to do this here since we have just deleted all of the
341 ** schema hash tables and therefore do not have to make any changes
342 ** to any of those tables.
344 for(i
=0; i
<db
->nDb
; i
++){
345 struct Db
*pDb
= &db
->aDb
[i
];
347 if( pDb
->pAux
&& pDb
->xFreeAux
) pDb
->xFreeAux(pDb
->pAux
);
351 for(i
=j
=2; i
<db
->nDb
; i
++){
352 struct Db
*pDb
= &db
->aDb
[i
];
354 sqliteFree(pDb
->zName
);
359 db
->aDb
[j
] = db
->aDb
[i
];
363 memset(&db
->aDb
[j
], 0, (db
->nDb
-j
)*sizeof(db
->aDb
[j
]));
365 if( db
->nDb
<=2 && db
->aDb
!=db
->aDbStatic
){
366 memcpy(db
->aDbStatic
, db
->aDb
, 2*sizeof(db
->aDb
[0]));
368 db
->aDb
= db
->aDbStatic
;
373 ** This routine is called whenever a rollback occurs. If there were
374 ** schema changes during the transaction, then we have to reset the
375 ** internal hash tables and reload them from disk.
377 void sqlite3RollbackInternalChanges(sqlite3
*db
){
378 if( db
->flags
& SQLITE_InternChanges
){
379 sqlite3ResetInternalSchema(db
, 0);
384 ** This routine is called when a commit occurs.
386 void sqlite3CommitInternalChanges(sqlite3
*db
){
387 db
->flags
&= ~SQLITE_InternChanges
;
391 ** Clear the column names from a table or view.
393 static void sqliteResetColumnNames(Table
*pTable
){
397 if( (pCol
= pTable
->aCol
)!=0 ){
398 for(i
=0; i
<pTable
->nCol
; i
++, pCol
++){
399 sqliteFree(pCol
->zName
);
400 sqlite3ExprDelete(pCol
->pDflt
);
401 sqliteFree(pCol
->zType
);
403 sqliteFree(pTable
->aCol
);
410 ** Remove the memory data structures associated with the given
411 ** Table. No changes are made to disk by this routine.
413 ** This routine just deletes the data structure. It does not unlink
414 ** the table data structure from the hash table. Nor does it remove
415 ** foreign keys from the sqlite.aFKey hash table. But it does destroy
416 ** memory structures of the indices and foreign keys associated with
419 ** Indices associated with the table are unlinked from the "db"
420 ** data structure if db!=NULL. If db==NULL, indices attached to
421 ** the table are deleted, but it is assumed they have already been
424 void sqlite3DeleteTable(sqlite3
*db
, Table
*pTable
){
425 Index
*pIndex
, *pNext
;
426 FKey
*pFKey
, *pNextFKey
;
428 if( pTable
==0 ) return;
430 /* Do not delete the table until the reference count reaches zero. */
432 if( pTable
->nRef
>0 ){
435 assert( pTable
->nRef
==0 );
437 /* Delete all indices associated with this table
439 for(pIndex
= pTable
->pIndex
; pIndex
; pIndex
=pNext
){
440 pNext
= pIndex
->pNext
;
441 assert( pIndex
->iDb
==pTable
->iDb
|| (pTable
->iDb
==0 && pIndex
->iDb
==1) );
442 sqliteDeleteIndex(db
, pIndex
);
445 #ifndef SQLITE_OMIT_FOREIGN_KEY
446 /* Delete all foreign keys associated with this table. The keys
447 ** should have already been unlinked from the db->aFKey hash table
449 for(pFKey
=pTable
->pFKey
; pFKey
; pFKey
=pNextFKey
){
450 pNextFKey
= pFKey
->pNextFrom
;
451 assert( pTable
->iDb
<db
->nDb
);
452 assert( sqlite3HashFind(&db
->aDb
[pTable
->iDb
].aFKey
,
453 pFKey
->zTo
, strlen(pFKey
->zTo
)+1)!=pFKey
);
458 /* Delete the Table structure itself.
460 sqliteResetColumnNames(pTable
);
461 sqliteFree(pTable
->zName
);
462 sqliteFree(pTable
->zColAff
);
463 sqlite3SelectDelete(pTable
->pSelect
);
468 ** Unlink the given table from the hash tables and the delete the
469 ** table structure with all its indices and foreign keys.
471 void sqlite3UnlinkAndDeleteTable(sqlite3
*db
, int iDb
, const char *zTabName
){
477 assert( iDb
>=0 && iDb
<db
->nDb
);
478 assert( zTabName
&& zTabName
[0] );
480 p
= sqlite3HashInsert(&pDb
->tblHash
, zTabName
, strlen(zTabName
)+1, 0);
482 #ifndef SQLITE_OMIT_FOREIGN_KEY
483 for(pF1
=p
->pFKey
; pF1
; pF1
=pF1
->pNextFrom
){
484 int nTo
= strlen(pF1
->zTo
) + 1;
485 pF2
= sqlite3HashFind(&pDb
->aFKey
, pF1
->zTo
, nTo
);
487 sqlite3HashInsert(&pDb
->aFKey
, pF1
->zTo
, nTo
, pF1
->pNextTo
);
489 while( pF2
&& pF2
->pNextTo
!=pF1
){ pF2
=pF2
->pNextTo
; }
491 pF2
->pNextTo
= pF1
->pNextTo
;
496 sqlite3DeleteTable(db
, p
);
498 db
->flags
|= SQLITE_InternChanges
;
502 ** Given a token, return a string that consists of the text of that
503 ** token with any quotations removed. Space to hold the returned string
504 ** is obtained from sqliteMalloc() and must be freed by the calling
507 ** Tokens are often just pointers into the original SQL text and so
508 ** are not \000 terminated and are not persistent. The returned string
509 ** is \000 terminated and is persistent.
511 char *sqlite3NameFromToken(Token
*pName
){
514 zName
= sqliteStrNDup(pName
->z
, pName
->n
);
515 sqlite3Dequote(zName
);
523 ** Open the sqlite_master table stored in database number iDb for
524 ** writing. The table is opened using cursor 0.
526 void sqlite3OpenMasterTable(Vdbe
*v
, int iDb
){
527 sqlite3VdbeAddOp(v
, OP_Integer
, iDb
, 0);
528 sqlite3VdbeAddOp(v
, OP_OpenWrite
, 0, MASTER_ROOT
);
529 sqlite3VdbeAddOp(v
, OP_SetNumColumns
, 0, 5); /* sqlite_master has 5 columns */
533 ** The token *pName contains the name of a database (either "main" or
534 ** "temp" or the name of an attached db). This routine returns the
535 ** index of the named database in db->aDb[], or -1 if the named db
538 static int findDb(sqlite3
*db
, Token
*pName
){
539 int i
= -1; /* Database number */
540 int n
; /* Number of characters in the name */
541 Db
*pDb
; /* A database whose name space is being searched */
542 char *zName
; /* Name we are searching for */
544 zName
= sqlite3NameFromToken(pName
);
547 for(i
=(db
->nDb
-1), pDb
=&db
->aDb
[i
]; i
>=0; i
--, pDb
--){
548 if( (!OMIT_TEMPDB
|| i
!=1 ) && n
==strlen(pDb
->zName
) &&
549 0==sqlite3StrICmp(pDb
->zName
, zName
) ){
558 /* The table or view or trigger name is passed to this routine via tokens
559 ** pName1 and pName2. If the table name was fully qualified, for example:
561 ** CREATE TABLE xxx.yyy (...);
563 ** Then pName1 is set to "xxx" and pName2 "yyy". On the other hand if
564 ** the table name is not fully qualified, i.e.:
566 ** CREATE TABLE yyy(...);
568 ** Then pName1 is set to "yyy" and pName2 is "".
570 ** This routine sets the *ppUnqual pointer to point at the token (pName1 or
571 ** pName2) that stores the unqualified table name. The index of the
572 ** database "xxx" is returned.
574 int sqlite3TwoPartName(
575 Parse
*pParse
, /* Parsing and code generating context */
576 Token
*pName1
, /* The "xxx" in the name "xxx.yyy" or "xxx" */
577 Token
*pName2
, /* The "yyy" in the name "xxx.yyy" */
578 Token
**pUnqual
/* Write the unqualified object name here */
580 int iDb
; /* Database holding the object */
581 sqlite3
*db
= pParse
->db
;
583 if( pName2
&& pName2
->n
>0 ){
584 assert( !db
->init
.busy
);
586 iDb
= findDb(db
, pName1
);
588 sqlite3ErrorMsg(pParse
, "unknown database %T", pName1
);
593 assert( db
->init
.iDb
==0 || db
->init
.busy
);
601 ** This routine is used to check if the UTF-8 string zName is a legal
602 ** unqualified name for a new schema object (table, index, view or
603 ** trigger). All names are legal except those that begin with the string
604 ** "sqlite_" (in upper, lower or mixed case). This portion of the namespace
605 ** is reserved for internal use.
607 int sqlite3CheckObjectName(Parse
*pParse
, const char *zName
){
608 if( !pParse
->db
->init
.busy
&& pParse
->nested
==0
609 && (pParse
->db
->flags
& SQLITE_WriteSchema
)==0
610 && 0==sqlite3StrNICmp(zName
, "sqlite_", 7) ){
611 sqlite3ErrorMsg(pParse
, "object name reserved for internal use: %s", zName
);
618 ** Begin constructing a new table representation in memory. This is
619 ** the first of several action routines that get called in response
620 ** to a CREATE TABLE statement. In particular, this routine is called
621 ** after seeing tokens "CREATE" and "TABLE" and the table name. The
622 ** pStart token is the CREATE and pName is the table name. The isTemp
623 ** flag is true if the table should be stored in the auxiliary database
624 ** file instead of in the main database file. This is normally the case
625 ** when the "TEMP" or "TEMPORARY" keyword occurs in between
628 ** The new table record is initialized and put in pParse->pNewTable.
629 ** As more of the CREATE TABLE statement is parsed, additional action
630 ** routines will be called to add more information to this record.
631 ** At the end of the CREATE TABLE statement, the sqlite3EndTable() routine
632 ** is called to complete the construction of the new table record.
634 void sqlite3StartTable(
635 Parse
*pParse
, /* Parser context */
636 Token
*pStart
, /* The "CREATE" token */
637 Token
*pName1
, /* First part of the name of the table or view */
638 Token
*pName2
, /* Second part of the name of the table or view */
639 int isTemp
, /* True if this is a TEMP table */
640 int isView
/* True if this is a VIEW */
644 char *zName
= 0; /* The name of the new table */
645 sqlite3
*db
= pParse
->db
;
647 int iDb
; /* Database number to create the table in */
648 Token
*pName
; /* Unqualified name of the table to create */
650 /* The table or view name to create is passed to this routine via tokens
651 ** pName1 and pName2. If the table name was fully qualified, for example:
653 ** CREATE TABLE xxx.yyy (...);
655 ** Then pName1 is set to "xxx" and pName2 "yyy". On the other hand if
656 ** the table name is not fully qualified, i.e.:
658 ** CREATE TABLE yyy(...);
660 ** Then pName1 is set to "yyy" and pName2 is "".
662 ** The call below sets the pName pointer to point at the token (pName1 or
663 ** pName2) that stores the unqualified table name. The variable iDb is
664 ** set to the index of the database that the table or view is to be
667 iDb
= sqlite3TwoPartName(pParse
, pName1
, pName2
, &pName
);
669 if( !OMIT_TEMPDB
&& isTemp
&& iDb
>1 ){
670 /* If creating a temp table, the name may not be qualified */
671 sqlite3ErrorMsg(pParse
, "temporary table name must be unqualified");
674 if( !OMIT_TEMPDB
&& isTemp
) iDb
= 1;
676 pParse
->sNameToken
= *pName
;
677 zName
= sqlite3NameFromToken(pName
);
678 if( zName
==0 ) return;
679 if( SQLITE_OK
!=sqlite3CheckObjectName(pParse
, zName
) ){
680 goto begin_table_error
;
682 if( db
->init
.iDb
==1 ) isTemp
= 1;
683 #ifndef SQLITE_OMIT_AUTHORIZATION
684 assert( (isTemp
& 1)==isTemp
);
687 char *zDb
= db
->aDb
[iDb
].zName
;
688 if( sqlite3AuthCheck(pParse
, SQLITE_INSERT
, SCHEMA_TABLE(isTemp
), 0, zDb
) ){
689 goto begin_table_error
;
692 if( !OMIT_TEMPDB
&& isTemp
){
693 code
= SQLITE_CREATE_TEMP_VIEW
;
695 code
= SQLITE_CREATE_VIEW
;
698 if( !OMIT_TEMPDB
&& isTemp
){
699 code
= SQLITE_CREATE_TEMP_TABLE
;
701 code
= SQLITE_CREATE_TABLE
;
704 if( sqlite3AuthCheck(pParse
, code
, zName
, 0, zDb
) ){
705 goto begin_table_error
;
710 /* Make sure the new table name does not collide with an existing
711 ** index or table name in the same database. Issue an error message if
714 if( SQLITE_OK
!=sqlite3ReadSchema(pParse
) ){
715 goto begin_table_error
;
717 pTable
= sqlite3FindTable(db
, zName
, db
->aDb
[iDb
].zName
);
719 sqlite3ErrorMsg(pParse
, "table %T already exists", pName
);
720 goto begin_table_error
;
722 if( (pIdx
= sqlite3FindIndex(db
, zName
, 0))!=0 &&
723 ( iDb
==0 || !db
->init
.busy
) ){
724 sqlite3ErrorMsg(pParse
, "there is already an index named %s", zName
);
725 goto begin_table_error
;
727 pTable
= sqliteMalloc( sizeof(Table
) );
729 pParse
->rc
= SQLITE_NOMEM
;
731 goto begin_table_error
;
733 pTable
->zName
= zName
;
740 if( pParse
->pNewTable
) sqlite3DeleteTable(db
, pParse
->pNewTable
);
741 pParse
->pNewTable
= pTable
;
743 /* If this is the magic sqlite_sequence table used by autoincrement,
744 ** then record a pointer to this table in the main database structure
745 ** so that INSERT can find the table easily.
747 #ifndef SQLITE_OMIT_AUTOINCREMENT
748 if( strcmp(zName
, "sqlite_sequence")==0 ){
749 db
->aDb
[iDb
].pSeqTab
= pTable
;
753 /* Begin generating the code that will insert the table record into
754 ** the SQLITE_MASTER table. Note in particular that we must go ahead
755 ** and allocate the record number for the table entry now. Before any
756 ** PRIMARY KEY or UNIQUE keywords are parsed. Those keywords will cause
757 ** indices to be created and the table record must come before the
758 ** indices. Hence, the record number for the table must be allocated
761 if( !db
->init
.busy
&& (v
= sqlite3GetVdbe(pParse
))!=0 ){
763 sqlite3BeginWriteOperation(pParse
, 0, iDb
);
765 /* If the file format and encoding in the database have not been set,
768 sqlite3VdbeAddOp(v
, OP_ReadCookie
, iDb
, 1); /* file_format */
769 lbl
= sqlite3VdbeMakeLabel(v
);
770 sqlite3VdbeAddOp(v
, OP_If
, 0, lbl
);
771 sqlite3VdbeAddOp(v
, OP_Integer
, db
->file_format
, 0);
772 sqlite3VdbeAddOp(v
, OP_SetCookie
, iDb
, 1);
773 sqlite3VdbeAddOp(v
, OP_Integer
, db
->enc
, 0);
774 sqlite3VdbeAddOp(v
, OP_SetCookie
, iDb
, 4);
775 sqlite3VdbeResolveLabel(v
, lbl
);
777 /* This just creates a place-holder record in the sqlite_master table.
778 ** The record created does not contain anything yet. It will be replaced
779 ** by the real entry in code generated at sqlite3EndTable().
781 ** The rowid for the new entry is left on the top of the stack.
782 ** The rowid value is needed by the code that sqlite3EndTable will
785 #ifndef SQLITE_OMIT_VIEW
787 sqlite3VdbeAddOp(v
, OP_Integer
, 0, 0);
791 sqlite3VdbeAddOp(v
, OP_CreateTable
, iDb
, 0);
793 sqlite3OpenMasterTable(v
, iDb
);
794 sqlite3VdbeAddOp(v
, OP_NewRowid
, 0, 0);
795 sqlite3VdbeAddOp(v
, OP_Dup
, 0, 0);
796 sqlite3VdbeAddOp(v
, OP_Null
, 0, 0);
797 sqlite3VdbeAddOp(v
, OP_Insert
, 0, 0);
798 sqlite3VdbeAddOp(v
, OP_Close
, 0, 0);
799 sqlite3VdbeAddOp(v
, OP_Pull
, 1, 0);
802 /* Normal (non-error) return. */
805 /* If an error occurs, we jump here */
812 ** This macro is used to compare two strings in a case-insensitive manner.
813 ** It is slightly faster than calling sqlite3StrICmp() directly, but
814 ** produces larger code.
816 ** WARNING: This macro is not compatible with the strcmp() family. It
817 ** returns true if the two strings are equal, otherwise false.
819 #define STRICMP(x, y) (\
820 sqlite3UpperToLower[*(unsigned char *)(x)]== \
821 sqlite3UpperToLower[*(unsigned char *)(y)] \
822 && sqlite3StrICmp((x)+1,(y)+1)==0 )
825 ** Add a new column to the table currently being constructed.
827 ** The parser calls this routine once for each column declaration
828 ** in a CREATE TABLE statement. sqlite3StartTable() gets called
829 ** first to get things going. Then this routine is called for each
832 void sqlite3AddColumn(Parse
*pParse
, Token
*pName
){
837 if( (p
= pParse
->pNewTable
)==0 ) return;
838 z
= sqlite3NameFromToken(pName
);
840 for(i
=0; i
<p
->nCol
; i
++){
841 if( STRICMP(z
, p
->aCol
[i
].zName
) ){
842 sqlite3ErrorMsg(pParse
, "duplicate column name: %s", z
);
847 if( (p
->nCol
& 0x7)==0 ){
849 aNew
= sqliteRealloc( p
->aCol
, (p
->nCol
+8)*sizeof(p
->aCol
[0]));
856 pCol
= &p
->aCol
[p
->nCol
];
857 memset(pCol
, 0, sizeof(p
->aCol
[0]));
860 /* If there is no type specified, columns have the default affinity
861 ** 'NONE'. If there is a type specified, then sqlite3AddColumnType() will
862 ** be called next to set pCol->affinity correctly.
864 pCol
->affinity
= SQLITE_AFF_NONE
;
865 pCol
->pColl
= pParse
->db
->pDfltColl
;
870 ** This routine is called by the parser while in the middle of
871 ** parsing a CREATE TABLE statement. A "NOT NULL" constraint has
872 ** been seen on a column. This routine sets the notNull flag on
873 ** the column currently under construction.
875 void sqlite3AddNotNull(Parse
*pParse
, int onError
){
878 if( (p
= pParse
->pNewTable
)==0 ) return;
880 if( i
>=0 ) p
->aCol
[i
].notNull
= onError
;
884 ** Scan the column type name zType (length nType) and return the
885 ** associated affinity type.
887 ** This routine does a case-independent search of zType for the
888 ** substrings in the following table. If one of the substrings is
889 ** found, the corresponding affinity is returned. If zType contains
890 ** more than one of the substrings, entries toward the top of
891 ** the table take priority. For example, if zType is 'BLOBINT',
892 ** SQLITE_AFF_INTEGER is returned.
894 ** Substring | Affinity
895 ** --------------------------------
896 ** 'INT' | SQLITE_AFF_INTEGER
897 ** 'CHAR' | SQLITE_AFF_TEXT
898 ** 'CLOB' | SQLITE_AFF_TEXT
899 ** 'TEXT' | SQLITE_AFF_TEXT
900 ** 'BLOB' | SQLITE_AFF_NONE
902 ** If none of the substrings in the above table are found,
903 ** SQLITE_AFF_NUMERIC is returned.
905 static char sqlite3AffinityType(const char *zType
, int nType
){
907 char aff
= SQLITE_AFF_NUMERIC
;
908 const unsigned char *zIn
= zType
;
909 const unsigned char *zEnd
= (zIn
+nType
);
912 h
= (h
<<8) + sqlite3UpperToLower
[*zIn
];
914 if( h
==(('c'<<24)+('h'<<16)+('a'<<8)+'r') ){ /* CHAR */
915 aff
= SQLITE_AFF_TEXT
;
916 }else if( h
==(('c'<<24)+('l'<<16)+('o'<<8)+'b') ){ /* CLOB */
917 aff
= SQLITE_AFF_TEXT
;
918 }else if( h
==(('t'<<24)+('e'<<16)+('x'<<8)+'t') ){ /* TEXT */
919 aff
= SQLITE_AFF_TEXT
;
920 }else if( h
==(('b'<<24)+('l'<<16)+('o'<<8)+'b') /* BLOB */
921 && aff
==SQLITE_AFF_NUMERIC
){
922 aff
= SQLITE_AFF_NONE
;
923 }else if( (h
&0x00FFFFFF)==(('i'<<16)+('n'<<8)+'t') ){ /* INT */
924 aff
= SQLITE_AFF_INTEGER
;
933 ** This routine is called by the parser while in the middle of
934 ** parsing a CREATE TABLE statement. The pFirst token is the first
935 ** token in the sequence of tokens that describe the type of the
936 ** column currently under construction. pLast is the last token
937 ** in the sequence. Use this information to construct a string
938 ** that contains the typename of the column and store that string
941 void sqlite3AddColumnType(Parse
*pParse
, Token
*pFirst
, Token
*pLast
){
946 const unsigned char *zIn
;
949 if( (p
= pParse
->pNewTable
)==0 ) return;
954 n
= pLast
->n
+ (pLast
->z
- zIn
);
955 assert( pCol
->zType
==0 );
956 z
= pCol
->zType
= sqliteMallocRaw(n
+1);
958 for(i
=j
=0; i
<n
; i
++){
960 if( isspace(c
) ) continue;
964 pCol
->affinity
= sqlite3AffinityType(z
, n
);
968 ** The expression is the default value for the most recently added column
969 ** of the table currently under construction.
971 ** Default value expressions must be constant. Raise an exception if this
974 ** This routine is called by the parser while in the middle of
975 ** parsing a CREATE TABLE statement.
977 void sqlite3AddDefaultValue(Parse
*pParse
, Expr
*pExpr
){
980 if( (p
= pParse
->pNewTable
)==0 ) return;
981 pCol
= &(p
->aCol
[p
->nCol
-1]);
982 if( !sqlite3ExprIsConstant(pExpr
) ){
983 sqlite3ErrorMsg(pParse
, "default value of column [%s] is not constant",
986 sqlite3ExprDelete(pCol
->pDflt
);
987 pCol
->pDflt
= sqlite3ExprDup(pExpr
);
989 sqlite3ExprDelete(pExpr
);
993 ** Designate the PRIMARY KEY for the table. pList is a list of names
994 ** of columns that form the primary key. If pList is NULL, then the
995 ** most recently added column of the table is the primary key.
997 ** A table can have at most one primary key. If the table already has
998 ** a primary key (and this is the second primary key) then create an
1001 ** If the PRIMARY KEY is on a single column whose datatype is INTEGER,
1002 ** then we will try to use that column as the rowid. Set the Table.iPKey
1003 ** field of the table under construction to be the index of the
1004 ** INTEGER PRIMARY KEY column. Table.iPKey is set to -1 if there is
1005 ** no INTEGER PRIMARY KEY.
1007 ** If the key is not an INTEGER PRIMARY KEY, then create a unique
1008 ** index for the key. No index is created for INTEGER PRIMARY KEYs.
1010 void sqlite3AddPrimaryKey(
1011 Parse
*pParse
, /* Parsing context */
1012 ExprList
*pList
, /* List of field names to be indexed */
1013 int onError
, /* What to do with a uniqueness conflict */
1014 int autoInc
/* True if the AUTOINCREMENT keyword is present */
1016 Table
*pTab
= pParse
->pNewTable
;
1019 if( pTab
==0 ) goto primary_key_exit
;
1020 if( pTab
->hasPrimKey
){
1021 sqlite3ErrorMsg(pParse
,
1022 "table \"%s\" has more than one primary key", pTab
->zName
);
1023 goto primary_key_exit
;
1025 pTab
->hasPrimKey
= 1;
1027 iCol
= pTab
->nCol
- 1;
1028 pTab
->aCol
[iCol
].isPrimKey
= 1;
1030 for(i
=0; i
<pList
->nExpr
; i
++){
1031 for(iCol
=0; iCol
<pTab
->nCol
; iCol
++){
1032 if( sqlite3StrICmp(pList
->a
[i
].zName
, pTab
->aCol
[iCol
].zName
)==0 ){
1036 if( iCol
<pTab
->nCol
) pTab
->aCol
[iCol
].isPrimKey
= 1;
1038 if( pList
->nExpr
>1 ) iCol
= -1;
1040 if( iCol
>=0 && iCol
<pTab
->nCol
){
1041 zType
= pTab
->aCol
[iCol
].zType
;
1043 if( zType
&& sqlite3StrICmp(zType
, "INTEGER")==0 ){
1045 pTab
->keyConf
= onError
;
1046 pTab
->autoInc
= autoInc
;
1047 }else if( autoInc
){
1048 #ifndef SQLITE_OMIT_AUTOINCREMENT
1049 sqlite3ErrorMsg(pParse
, "AUTOINCREMENT is only allowed on an "
1050 "INTEGER PRIMARY KEY");
1053 sqlite3CreateIndex(pParse
, 0, 0, 0, pList
, onError
, 0, 0);
1058 sqlite3ExprListDelete(pList
);
1063 ** Set the collation function of the most recently parsed table column
1064 ** to the CollSeq given.
1066 void sqlite3AddCollateType(Parse
*pParse
, const char *zType
, int nType
){
1072 if( (p
= pParse
->pNewTable
)==0 ) return;
1075 pColl
= sqlite3LocateCollSeq(pParse
, zType
, nType
);
1076 p
->aCol
[i
].pColl
= pColl
;
1078 /* If the column is declared as "<name> PRIMARY KEY COLLATE <type>",
1079 ** then an index may have been created on this column before the
1080 ** collation type was added. Correct this if it is the case.
1082 for(pIdx
= p
->pIndex
; pIdx
; pIdx
=pIdx
->pNext
){
1083 assert( pIdx
->nColumn
==1 );
1084 if( pIdx
->aiColumn
[0]==i
) pIdx
->keyInfo
.aColl
[0] = pColl
;
1089 ** Call sqlite3CheckCollSeq() for all collating sequences in an index,
1090 ** in order to verify that all the necessary collating sequences are
1093 int sqlite3CheckIndexCollSeq(Parse
*pParse
, Index
*pIdx
){
1096 for(i
=0; i
<pIdx
->nColumn
; i
++){
1097 if( sqlite3CheckCollSeq(pParse
, pIdx
->keyInfo
.aColl
[i
]) ){
1098 return SQLITE_ERROR
;
1106 ** This function returns the collation sequence for database native text
1107 ** encoding identified by the string zName, length nName.
1109 ** If the requested collation sequence is not available, or not available
1110 ** in the database native encoding, the collation factory is invoked to
1111 ** request it. If the collation factory does not supply such a sequence,
1112 ** and the sequence is available in another text encoding, then that is
1113 ** returned instead.
1115 ** If no versions of the requested collations sequence are available, or
1116 ** another error occurs, NULL is returned and an error message written into
1119 CollSeq
*sqlite3LocateCollSeq(Parse
*pParse
, const char *zName
, int nName
){
1120 sqlite3
*db
= pParse
->db
;
1122 u8 initbusy
= db
->init
.busy
;
1124 CollSeq
*pColl
= sqlite3FindCollSeq(db
, enc
, zName
, nName
, initbusy
);
1125 if( !initbusy
&& (!pColl
|| !pColl
->xCmp
) ){
1126 pColl
= sqlite3GetCollSeq(db
, pColl
, zName
, nName
);
1129 nName
= strlen(zName
);
1131 sqlite3ErrorMsg(pParse
, "no such collation sequence: %.*s", nName
, zName
);
1141 ** Generate code that will increment the schema cookie.
1143 ** The schema cookie is used to determine when the schema for the
1144 ** database changes. After each schema change, the cookie value
1145 ** changes. When a process first reads the schema it records the
1146 ** cookie. Thereafter, whenever it goes to access the database,
1147 ** it checks the cookie to make sure the schema has not changed
1148 ** since it was last read.
1150 ** This plan is not completely bullet-proof. It is possible for
1151 ** the schema to change multiple times and for the cookie to be
1152 ** set back to prior value. But schema changes are infrequent
1153 ** and the probability of hitting the same cookie value is only
1154 ** 1 chance in 2^32. So we're safe enough.
1156 void sqlite3ChangeCookie(sqlite3
*db
, Vdbe
*v
, int iDb
){
1157 sqlite3VdbeAddOp(v
, OP_Integer
, db
->aDb
[iDb
].schema_cookie
+1, 0);
1158 sqlite3VdbeAddOp(v
, OP_SetCookie
, iDb
, 0);
1162 ** Measure the number of characters needed to output the given
1163 ** identifier. The number returned includes any quotes used
1164 ** but does not include the null terminator.
1166 ** The estimate is conservative. It might be larger that what is
1169 static int identLength(const char *z
){
1171 for(n
=0; *z
; n
++, z
++){
1172 if( *z
=='"' ){ n
++; }
1178 ** Write an identifier onto the end of the given string. Add
1179 ** quote characters as needed.
1181 static void identPut(char *z
, int *pIdx
, char *zSignedIdent
){
1182 unsigned char *zIdent
= (unsigned char*)zSignedIdent
;
1183 int i
, j
, needQuote
;
1185 for(j
=0; zIdent
[j
]; j
++){
1186 if( !isalnum(zIdent
[j
]) && zIdent
[j
]!='_' ) break;
1188 needQuote
= zIdent
[j
]!=0 || isdigit(zIdent
[0])
1189 || sqlite3KeywordCode(zIdent
, j
)!=TK_ID
;
1190 if( needQuote
) z
[i
++] = '"';
1191 for(j
=0; zIdent
[j
]; j
++){
1193 if( zIdent
[j
]=='"' ) z
[i
++] = '"';
1195 if( needQuote
) z
[i
++] = '"';
1201 ** Generate a CREATE TABLE statement appropriate for the given
1202 ** table. Memory to hold the text of the statement is obtained
1203 ** from sqliteMalloc() and must be freed by the calling function.
1205 static char *createTableStmt(Table
*p
){
1208 char *zSep
, *zSep2
, *zEnd
, *z
;
1211 for(pCol
= p
->aCol
, i
=0; i
<p
->nCol
; i
++, pCol
++){
1212 n
+= identLength(pCol
->zName
);
1215 n
+= (strlen(z
) + 1);
1218 n
+= identLength(p
->zName
);
1228 n
+= 35 + 6*p
->nCol
;
1229 zStmt
= sqliteMallocRaw( n
);
1230 if( zStmt
==0 ) return 0;
1231 strcpy(zStmt
, !OMIT_TEMPDB
&&p
->iDb
==1 ? "CREATE TEMP TABLE ":"CREATE TABLE ");
1233 identPut(zStmt
, &k
, p
->zName
);
1235 for(pCol
=p
->aCol
, i
=0; i
<p
->nCol
; i
++, pCol
++){
1236 strcpy(&zStmt
[k
], zSep
);
1237 k
+= strlen(&zStmt
[k
]);
1239 identPut(zStmt
, &k
, pCol
->zName
);
1240 if( (z
= pCol
->zType
)!=0 ){
1242 strcpy(&zStmt
[k
], z
);
1246 strcpy(&zStmt
[k
], zEnd
);
1251 ** This routine is called to report the final ")" that terminates
1252 ** a CREATE TABLE statement.
1254 ** The table structure that other action routines have been building
1255 ** is added to the internal hash tables, assuming no errors have
1258 ** An entry for the table is made in the master table on disk, unless
1259 ** this is a temporary table or db->init.busy==1. When db->init.busy==1
1260 ** it means we are reading the sqlite_master table because we just
1261 ** connected to the database or because the sqlite_master table has
1262 ** recently changed, so the entry for this table already exists in
1263 ** the sqlite_master table. We do not want to create it again.
1265 ** If the pSelect argument is not NULL, it means that this routine
1266 ** was called to create a table generated from a
1267 ** "CREATE TABLE ... AS SELECT ..." statement. The column names of
1268 ** the new table will match the result set of the SELECT.
1270 void sqlite3EndTable(
1271 Parse
*pParse
, /* Parse context */
1272 Token
*pCons
, /* The ',' token after the last column defn. */
1273 Token
*pEnd
, /* The final ')' token in the CREATE TABLE */
1274 Select
*pSelect
/* Select from a "CREATE ... AS SELECT" */
1277 sqlite3
*db
= pParse
->db
;
1279 if( (pEnd
==0 && pSelect
==0) || pParse
->nErr
|| sqlite3_malloc_failed
) return;
1280 p
= pParse
->pNewTable
;
1283 assert( !db
->init
.busy
|| !pSelect
);
1285 /* If the db->init.busy is 1 it means we are reading the SQL off the
1286 ** "sqlite_master" or "sqlite_temp_master" table on the disk.
1287 ** So do not write to the disk again. Extract the root page number
1288 ** for the table from the db->init.newTnum field. (The page number
1289 ** should have been put there by the sqliteOpenCb routine.)
1291 if( db
->init
.busy
){
1292 p
->tnum
= db
->init
.newTnum
;
1295 /* If not initializing, then create a record for the new table
1296 ** in the SQLITE_MASTER table of the database. The record number
1297 ** for the new table entry should already be on the stack.
1299 ** If this is a TEMPORARY table, write the entry into the auxiliary
1300 ** file instead of into the main database file.
1302 if( !db
->init
.busy
){
1305 char *zType
; /* "view" or "table" */
1306 char *zType2
; /* "VIEW" or "TABLE" */
1307 char *zStmt
; /* Text of the CREATE TABLE or CREATE VIEW statement */
1309 v
= sqlite3GetVdbe(pParse
);
1312 sqlite3VdbeAddOp(v
, OP_Close
, 0, 0);
1314 /* Create the rootpage for the new table and push it onto the stack.
1315 ** A view has no rootpage, so just push a zero onto the stack for
1316 ** views. Initialize zType at the same time.
1318 if( p
->pSelect
==0 ){
1319 /* A regular table */
1320 /* sqlite3VdbeAddOp(v, OP_CreateTable, p->iDb, 0); */
1323 #ifndef SQLITE_OMIT_VIEW
1326 /* sqlite3VdbeAddOp(v, OP_Integer, 0, 0); */
1332 /* If this is a CREATE TABLE xx AS SELECT ..., execute the SELECT
1333 ** statement to populate the new table. The root-page number for the
1334 ** new table is on the top of the vdbe stack.
1336 ** Once the SELECT has been coded by sqlite3Select(), it is in a
1337 ** suitable state to query for the column names and types to be used
1338 ** by the new table.
1342 sqlite3VdbeAddOp(v
, OP_Dup
, 0, 0);
1343 sqlite3VdbeAddOp(v
, OP_Integer
, p
->iDb
, 0);
1344 sqlite3VdbeAddOp(v
, OP_OpenWrite
, 1, 0);
1346 sqlite3Select(pParse
, pSelect
, SRT_Table
, 1, 0, 0, 0, 0);
1347 sqlite3VdbeAddOp(v
, OP_Close
, 1, 0);
1348 if( pParse
->nErr
==0 ){
1349 pSelTab
= sqlite3ResultSetOfSelect(pParse
, 0, pSelect
);
1350 if( pSelTab
==0 ) return;
1351 assert( p
->aCol
==0 );
1352 p
->nCol
= pSelTab
->nCol
;
1353 p
->aCol
= pSelTab
->aCol
;
1356 sqlite3DeleteTable(0, pSelTab
);
1360 /* Compute the complete text of the CREATE statement */
1362 zStmt
= createTableStmt(p
);
1364 n
= pEnd
->z
- pParse
->sNameToken
.z
+ 1;
1365 zStmt
= sqlite3MPrintf("CREATE %s %.*s", zType2
, n
, pParse
->sNameToken
.z
);
1368 /* A slot for the record has already been allocated in the
1369 ** SQLITE_MASTER table. We just need to update that slot with all
1370 ** the information we've collected. The rowid for the preallocated
1371 ** slot is the 2nd item on the stack. The top of the stack is the
1372 ** root page for the new table (or a 0 if this is a view).
1374 sqlite3NestedParse(pParse
,
1376 "SET type='%s', name=%Q, tbl_name=%Q, rootpage=#0, sql=%Q "
1378 db
->aDb
[p
->iDb
].zName
, SCHEMA_TABLE(p
->iDb
),
1385 sqlite3ChangeCookie(db
, v
, p
->iDb
);
1387 #ifndef SQLITE_OMIT_AUTOINCREMENT
1388 /* Check to see if we need to create an sqlite_sequence table for
1389 ** keeping track of autoincrement keys.
1392 Db
*pDb
= &db
->aDb
[p
->iDb
];
1393 if( pDb
->pSeqTab
==0 ){
1394 sqlite3NestedParse(pParse
,
1395 "CREATE TABLE %Q.sqlite_sequence(name,seq)",
1402 /* Reparse everything to update our internal data structures */
1403 sqlite3VdbeOp3(v
, OP_ParseSchema
, p
->iDb
, 0,
1404 sqlite3MPrintf("tbl_name='%q'",p
->zName
), P3_DYNAMIC
);
1408 /* Add the table to the in-memory representation of the database.
1410 if( db
->init
.busy
&& pParse
->nErr
==0 ){
1413 Db
*pDb
= &db
->aDb
[p
->iDb
];
1414 pOld
= sqlite3HashInsert(&pDb
->tblHash
, p
->zName
, strlen(p
->zName
)+1, p
);
1416 assert( p
==pOld
); /* Malloc must have failed inside HashInsert() */
1419 #ifndef SQLITE_OMIT_FOREIGN_KEY
1420 for(pFKey
=p
->pFKey
; pFKey
; pFKey
=pFKey
->pNextFrom
){
1421 int nTo
= strlen(pFKey
->zTo
) + 1;
1422 pFKey
->pNextTo
= sqlite3HashFind(&pDb
->aFKey
, pFKey
->zTo
, nTo
);
1423 sqlite3HashInsert(&pDb
->aFKey
, pFKey
->zTo
, nTo
, pFKey
);
1426 pParse
->pNewTable
= 0;
1428 db
->flags
|= SQLITE_InternChanges
;
1430 #ifndef SQLITE_OMIT_ALTERTABLE
1432 assert( !pSelect
&& pCons
&& pEnd
);
1433 if( pCons
->z
==0 ) pCons
= pEnd
;
1434 p
->addColOffset
= 13 + (pCons
->z
- pParse
->sNameToken
.z
);
1440 #ifndef SQLITE_OMIT_VIEW
1442 ** The parser calls this routine in order to create a new VIEW
1444 void sqlite3CreateView(
1445 Parse
*pParse
, /* The parsing context */
1446 Token
*pBegin
, /* The CREATE token that begins the statement */
1447 Token
*pName1
, /* The token that holds the name of the view */
1448 Token
*pName2
, /* The token that holds the name of the view */
1449 Select
*pSelect
, /* A SELECT statement that will become the new view */
1450 int isTemp
/* TRUE for a TEMPORARY view */
1454 const unsigned char *z
;
1459 if( pParse
->nVar
>0 ){
1460 sqlite3ErrorMsg(pParse
, "parameters are not allowed in views");
1461 sqlite3SelectDelete(pSelect
);
1464 sqlite3StartTable(pParse
, pBegin
, pName1
, pName2
, isTemp
, 1);
1465 p
= pParse
->pNewTable
;
1466 if( p
==0 || pParse
->nErr
){
1467 sqlite3SelectDelete(pSelect
);
1470 sqlite3TwoPartName(pParse
, pName1
, pName2
, &pName
);
1471 if( sqlite3FixInit(&sFix
, pParse
, p
->iDb
, "view", pName
)
1472 && sqlite3FixSelect(&sFix
, pSelect
)
1474 sqlite3SelectDelete(pSelect
);
1478 /* Make a copy of the entire SELECT statement that defines the view.
1479 ** This will force all the Expr.token.z values to be dynamically
1480 ** allocated rather than point to the input string - which means that
1481 ** they will persist after the current sqlite3_exec() call returns.
1483 p
->pSelect
= sqlite3SelectDup(pSelect
);
1484 sqlite3SelectDelete(pSelect
);
1485 if( !pParse
->db
->init
.busy
){
1486 sqlite3ViewGetColumnNames(pParse
, p
);
1489 /* Locate the end of the CREATE VIEW statement. Make sEnd point to
1492 sEnd
= pParse
->sLastToken
;
1493 if( sEnd
.z
[0]!=0 && sEnd
.z
[0]!=';' ){
1497 n
= sEnd
.z
- pBegin
->z
;
1498 z
= (const unsigned char*)pBegin
->z
;
1499 while( n
>0 && (z
[n
-1]==';' || isspace(z
[n
-1])) ){ n
--; }
1503 /* Use sqlite3EndTable() to add the view to the SQLITE_MASTER table */
1504 sqlite3EndTable(pParse
, 0, &sEnd
, 0);
1507 #endif /* SQLITE_OMIT_VIEW */
1509 #ifndef SQLITE_OMIT_VIEW
1511 ** The Table structure pTable is really a VIEW. Fill in the names of
1512 ** the columns of the view in the pTable structure. Return the number
1513 ** of errors. If an error is seen leave an error message in pParse->zErrMsg.
1515 int sqlite3ViewGetColumnNames(Parse
*pParse
, Table
*pTable
){
1516 Table
*pSelTab
; /* A fake table from which we get the result set */
1517 Select
*pSel
; /* Copy of the SELECT that implements the view */
1518 int nErr
= 0; /* Number of errors encountered */
1519 int n
; /* Temporarily holds the number of cursors assigned */
1523 /* A positive nCol means the columns names for this view are
1526 if( pTable
->nCol
>0 ) return 0;
1528 /* A negative nCol is a special marker meaning that we are currently
1529 ** trying to compute the column names. If we enter this routine with
1530 ** a negative nCol, it means two or more views form a loop, like this:
1532 ** CREATE VIEW one AS SELECT * FROM two;
1533 ** CREATE VIEW two AS SELECT * FROM one;
1535 ** Actually, this error is caught previously and so the following test
1536 ** should always fail. But we will leave it in place just to be safe.
1538 if( pTable
->nCol
<0 ){
1539 sqlite3ErrorMsg(pParse
, "view %s is circularly defined", pTable
->zName
);
1543 /* If we get this far, it means we need to compute the table names.
1544 ** Note that the call to sqlite3ResultSetOfSelect() will expand any
1545 ** "*" elements in the results set of the view and will assign cursors
1546 ** to the elements of the FROM clause. But we do not want these changes
1547 ** to be permanent. So the computation is done on a copy of the SELECT
1548 ** statement that defines the view.
1550 assert( pTable
->pSelect
);
1551 pSel
= sqlite3SelectDup(pTable
->pSelect
);
1553 sqlite3SrcListAssignCursors(pParse
, pSel
->pSrc
);
1555 pSelTab
= sqlite3ResultSetOfSelect(pParse
, 0, pSel
);
1558 assert( pTable
->aCol
==0 );
1559 pTable
->nCol
= pSelTab
->nCol
;
1560 pTable
->aCol
= pSelTab
->aCol
;
1563 sqlite3DeleteTable(0, pSelTab
);
1564 DbSetProperty(pParse
->db
, pTable
->iDb
, DB_UnresetViews
);
1569 sqlite3SelectDelete(pSel
);
1572 #endif /* SQLITE_OMIT_VIEW */
1574 #ifndef SQLITE_OMIT_VIEW
1576 ** Clear the column names from every VIEW in database idx.
1578 static void sqliteViewResetAll(sqlite3
*db
, int idx
){
1580 if( !DbHasProperty(db
, idx
, DB_UnresetViews
) ) return;
1581 for(i
=sqliteHashFirst(&db
->aDb
[idx
].tblHash
); i
; i
=sqliteHashNext(i
)){
1582 Table
*pTab
= sqliteHashData(i
);
1583 if( pTab
->pSelect
){
1584 sqliteResetColumnNames(pTab
);
1587 DbClearProperty(db
, idx
, DB_UnresetViews
);
1590 # define sqliteViewResetAll(A,B)
1591 #endif /* SQLITE_OMIT_VIEW */
1594 ** This function is called by the VDBE to adjust the internal schema
1595 ** used by SQLite when the btree layer moves a table root page. The
1596 ** root-page of a table or index in database iDb has changed from iFrom
1599 #ifndef SQLITE_OMIT_AUTOVACUUM
1600 void sqlite3RootPageMoved(Db
*pDb
, int iFrom
, int iTo
){
1603 for(pElem
=sqliteHashFirst(&pDb
->tblHash
); pElem
; pElem
=sqliteHashNext(pElem
)){
1604 Table
*pTab
= sqliteHashData(pElem
);
1605 if( pTab
->tnum
==iFrom
){
1610 for(pElem
=sqliteHashFirst(&pDb
->idxHash
); pElem
; pElem
=sqliteHashNext(pElem
)){
1611 Index
*pIdx
= sqliteHashData(pElem
);
1612 if( pIdx
->tnum
==iFrom
){
1622 ** Write code to erase the table with root-page iTable from database iDb.
1623 ** Also write code to modify the sqlite_master table and internal schema
1624 ** if a root-page of another table is moved by the btree-layer whilst
1625 ** erasing iTable (this can happen with an auto-vacuum database).
1627 static void destroyRootPage(Parse
*pParse
, int iTable
, int iDb
){
1628 Vdbe
*v
= sqlite3GetVdbe(pParse
);
1629 sqlite3VdbeAddOp(v
, OP_Destroy
, iTable
, iDb
);
1630 #ifndef SQLITE_OMIT_AUTOVACUUM
1631 /* OP_Destroy pushes an integer onto the stack. If this integer
1632 ** is non-zero, then it is the root page number of a table moved to
1633 ** location iTable. The following code modifies the sqlite_master table to
1636 ** The "#0" in the SQL is a special constant that means whatever value
1637 ** is on the top of the stack. See sqlite3RegisterExpr().
1639 sqlite3NestedParse(pParse
,
1640 "UPDATE %Q.%s SET rootpage=%d WHERE #0 AND rootpage=#0",
1641 pParse
->db
->aDb
[iDb
].zName
, SCHEMA_TABLE(iDb
), iTable
);
1646 ** Write VDBE code to erase table pTab and all associated indices on disk.
1647 ** Code to update the sqlite_master tables and internal schema definitions
1648 ** in case a root-page belonging to another table is moved by the btree layer
1649 ** is also added (this can happen with an auto-vacuum database).
1651 static void destroyTable(Parse
*pParse
, Table
*pTab
){
1652 #ifdef SQLITE_OMIT_AUTOVACUUM
1654 destroyRootPage(pParse
, pTab
->tnum
, pTab
->iDb
);
1655 for(pIdx
=pTab
->pIndex
; pIdx
; pIdx
=pIdx
->pNext
){
1656 destroyRootPage(pParse
, pIdx
->tnum
, pIdx
->iDb
);
1659 /* If the database may be auto-vacuum capable (if SQLITE_OMIT_AUTOVACUUM
1660 ** is not defined), then it is important to call OP_Destroy on the
1661 ** table and index root-pages in order, starting with the numerically
1662 ** largest root-page number. This guarantees that none of the root-pages
1663 ** to be destroyed is relocated by an earlier OP_Destroy. i.e. if the
1664 ** following were coded:
1670 ** and root page 5 happened to be the largest root-page number in the
1671 ** database, then root page 5 would be moved to page 4 by the
1672 ** "OP_Destroy 4 0" opcode. The subsequent "OP_Destroy 5 0" would hit
1673 ** a free-list page.
1675 int iTab
= pTab
->tnum
;
1682 if( iDestroyed
==0 || iTab
<iDestroyed
){
1685 for(pIdx
=pTab
->pIndex
; pIdx
; pIdx
=pIdx
->pNext
){
1686 int iIdx
= pIdx
->tnum
;
1687 assert( pIdx
->iDb
==pTab
->iDb
);
1688 if( (iDestroyed
==0 || (iIdx
<iDestroyed
)) && iIdx
>iLargest
){
1692 if( iLargest
==0 ) return;
1693 destroyRootPage(pParse
, iLargest
, pTab
->iDb
);
1694 iDestroyed
= iLargest
;
1700 ** This routine is called to do the work of a DROP TABLE statement.
1701 ** pName is the name of the table to be dropped.
1703 void sqlite3DropTable(Parse
*pParse
, SrcList
*pName
, int isView
){
1706 sqlite3
*db
= pParse
->db
;
1709 if( pParse
->nErr
|| sqlite3_malloc_failed
) goto exit_drop_table
;
1710 assert( pName
->nSrc
==1 );
1711 pTab
= sqlite3LocateTable(pParse
, pName
->a
[0].zName
, pName
->a
[0].zDatabase
);
1713 if( pTab
==0 ) goto exit_drop_table
;
1715 assert( iDb
>=0 && iDb
<db
->nDb
);
1716 #ifndef SQLITE_OMIT_AUTHORIZATION
1719 const char *zTab
= SCHEMA_TABLE(pTab
->iDb
);
1720 const char *zDb
= db
->aDb
[pTab
->iDb
].zName
;
1721 if( sqlite3AuthCheck(pParse
, SQLITE_DELETE
, zTab
, 0, zDb
)){
1722 goto exit_drop_table
;
1725 if( !OMIT_TEMPDB
&& iDb
==1 ){
1726 code
= SQLITE_DROP_TEMP_VIEW
;
1728 code
= SQLITE_DROP_VIEW
;
1731 if( !OMIT_TEMPDB
&& iDb
==1 ){
1732 code
= SQLITE_DROP_TEMP_TABLE
;
1734 code
= SQLITE_DROP_TABLE
;
1737 if( sqlite3AuthCheck(pParse
, code
, pTab
->zName
, 0, zDb
) ){
1738 goto exit_drop_table
;
1740 if( sqlite3AuthCheck(pParse
, SQLITE_DELETE
, pTab
->zName
, 0, zDb
) ){
1741 goto exit_drop_table
;
1745 if( pTab
->readOnly
|| pTab
==db
->aDb
[iDb
].pSeqTab
){
1746 sqlite3ErrorMsg(pParse
, "table %s may not be dropped", pTab
->zName
);
1747 goto exit_drop_table
;
1750 #ifndef SQLITE_OMIT_VIEW
1751 /* Ensure DROP TABLE is not used on a view, and DROP VIEW is not used
1754 if( isView
&& pTab
->pSelect
==0 ){
1755 sqlite3ErrorMsg(pParse
, "use DROP TABLE to delete table %s", pTab
->zName
);
1756 goto exit_drop_table
;
1758 if( !isView
&& pTab
->pSelect
){
1759 sqlite3ErrorMsg(pParse
, "use DROP VIEW to delete view %s", pTab
->zName
);
1760 goto exit_drop_table
;
1764 /* Generate code to remove the table from the master table
1767 v
= sqlite3GetVdbe(pParse
);
1770 int iDb
= pTab
->iDb
;
1771 Db
*pDb
= &db
->aDb
[iDb
];
1772 sqlite3BeginWriteOperation(pParse
, 0, iDb
);
1774 /* Drop all triggers associated with the table being dropped. Code
1775 ** is generated to remove entries from sqlite_master and/or
1776 ** sqlite_temp_master if required.
1778 pTrigger
= pTab
->pTrigger
;
1780 assert( pTrigger
->iDb
==iDb
|| pTrigger
->iDb
==1 );
1781 sqlite3DropTriggerPtr(pParse
, pTrigger
, 1);
1782 pTrigger
= pTrigger
->pNext
;
1785 #ifndef SQLITE_OMIT_AUTOINCREMENT
1786 /* Remove any entries of the sqlite_sequence table associated with
1787 ** the table being dropped. This is done before the table is dropped
1788 ** at the btree level, in case the sqlite_sequence table needs to
1789 ** move as a result of the drop (can happen in auto-vacuum mode).
1791 if( pTab
->autoInc
){
1792 sqlite3NestedParse(pParse
,
1793 "DELETE FROM %s.sqlite_sequence WHERE name=%Q",
1794 pDb
->zName
, pTab
->zName
1799 /* Drop all SQLITE_MASTER table and index entries that refer to the
1800 ** table. The program name loops through the master table and deletes
1801 ** every row that refers to a table of the same name as the one being
1802 ** dropped. Triggers are handled seperately because a trigger can be
1803 ** created in the temp database that refers to a table in another
1806 sqlite3NestedParse(pParse
,
1807 "DELETE FROM %Q.%s WHERE tbl_name=%Q and type!='trigger'",
1808 pDb
->zName
, SCHEMA_TABLE(iDb
), pTab
->zName
);
1810 destroyTable(pParse
, pTab
);
1813 /* Remove the table entry from SQLite's internal schema and modify
1814 ** the schema cookie.
1816 sqlite3VdbeOp3(v
, OP_DropTable
, iDb
, 0, pTab
->zName
, 0);
1817 sqlite3ChangeCookie(db
, v
, iDb
);
1819 sqliteViewResetAll(db
, iDb
);
1822 sqlite3SrcListDelete(pName
);
1826 ** This routine is called to create a new foreign key on the table
1827 ** currently under construction. pFromCol determines which columns
1828 ** in the current table point to the foreign key. If pFromCol==0 then
1829 ** connect the key to the last column inserted. pTo is the name of
1830 ** the table referred to. pToCol is a list of tables in the other
1831 ** pTo table that the foreign key points to. flags contains all
1832 ** information about the conflict resolution algorithms specified
1833 ** in the ON DELETE, ON UPDATE and ON INSERT clauses.
1835 ** An FKey structure is created and added to the table currently
1836 ** under construction in the pParse->pNewTable field. The new FKey
1837 ** is not linked into db->aFKey at this point - that does not happen
1838 ** until sqlite3EndTable().
1840 ** The foreign key is set for IMMEDIATE processing. A subsequent call
1841 ** to sqlite3DeferForeignKey() might change this to DEFERRED.
1843 void sqlite3CreateForeignKey(
1844 Parse
*pParse
, /* Parsing context */
1845 ExprList
*pFromCol
, /* Columns in this table that point to other table */
1846 Token
*pTo
, /* Name of the other table */
1847 ExprList
*pToCol
, /* Columns in the other table */
1848 int flags
/* Conflict resolution algorithms. */
1850 #ifndef SQLITE_OMIT_FOREIGN_KEY
1852 Table
*p
= pParse
->pNewTable
;
1859 if( p
==0 || pParse
->nErr
) goto fk_end
;
1861 int iCol
= p
->nCol
-1;
1862 if( iCol
<0 ) goto fk_end
;
1863 if( pToCol
&& pToCol
->nExpr
!=1 ){
1864 sqlite3ErrorMsg(pParse
, "foreign key on %s"
1865 " should reference only one column of table %T",
1866 p
->aCol
[iCol
].zName
, pTo
);
1870 }else if( pToCol
&& pToCol
->nExpr
!=pFromCol
->nExpr
){
1871 sqlite3ErrorMsg(pParse
,
1872 "number of columns in foreign key does not match the number of "
1873 "columns in the referenced table");
1876 nCol
= pFromCol
->nExpr
;
1878 nByte
= sizeof(*pFKey
) + nCol
*sizeof(pFKey
->aCol
[0]) + pTo
->n
+ 1;
1880 for(i
=0; i
<pToCol
->nExpr
; i
++){
1881 nByte
+= strlen(pToCol
->a
[i
].zName
) + 1;
1884 pFKey
= sqliteMalloc( nByte
);
1885 if( pFKey
==0 ) goto fk_end
;
1887 pFKey
->pNextFrom
= p
->pFKey
;
1888 z
= (char*)&pFKey
[1];
1889 pFKey
->aCol
= (struct sColMap
*)z
;
1890 z
+= sizeof(struct sColMap
)*nCol
;
1892 memcpy(z
, pTo
->z
, pTo
->n
);
1898 pFKey
->aCol
[0].iFrom
= p
->nCol
-1;
1900 for(i
=0; i
<nCol
; i
++){
1902 for(j
=0; j
<p
->nCol
; j
++){
1903 if( sqlite3StrICmp(p
->aCol
[j
].zName
, pFromCol
->a
[i
].zName
)==0 ){
1904 pFKey
->aCol
[i
].iFrom
= j
;
1909 sqlite3ErrorMsg(pParse
,
1910 "unknown column \"%s\" in foreign key definition",
1911 pFromCol
->a
[i
].zName
);
1917 for(i
=0; i
<nCol
; i
++){
1918 int n
= strlen(pToCol
->a
[i
].zName
);
1919 pFKey
->aCol
[i
].zCol
= z
;
1920 memcpy(z
, pToCol
->a
[i
].zName
, n
);
1925 pFKey
->isDeferred
= 0;
1926 pFKey
->deleteConf
= flags
& 0xff;
1927 pFKey
->updateConf
= (flags
>> 8 ) & 0xff;
1928 pFKey
->insertConf
= (flags
>> 16 ) & 0xff;
1930 /* Link the foreign key to the table as the last step.
1937 #endif /* !defined(SQLITE_OMIT_FOREIGN_KEY) */
1938 sqlite3ExprListDelete(pFromCol
);
1939 sqlite3ExprListDelete(pToCol
);
1943 ** This routine is called when an INITIALLY IMMEDIATE or INITIALLY DEFERRED
1944 ** clause is seen as part of a foreign key definition. The isDeferred
1945 ** parameter is 1 for INITIALLY DEFERRED and 0 for INITIALLY IMMEDIATE.
1946 ** The behavior of the most recently created foreign key is adjusted
1949 void sqlite3DeferForeignKey(Parse
*pParse
, int isDeferred
){
1950 #ifndef SQLITE_OMIT_FOREIGN_KEY
1953 if( (pTab
= pParse
->pNewTable
)==0 || (pFKey
= pTab
->pFKey
)==0 ) return;
1954 pFKey
->isDeferred
= isDeferred
;
1959 ** Generate code that will erase and refill index *pIdx. This is
1960 ** used to initialize a newly created index or to recompute the
1961 ** content of an index in response to a REINDEX command.
1963 ** if memRootPage is not negative, it means that the index is newly
1964 ** created. The memory cell specified by memRootPage contains the
1965 ** root page number of the index. If memRootPage is negative, then
1966 ** the index already exists and must be cleared before being refilled and
1967 ** the root page number of the index is taken from pIndex->tnum.
1969 static void sqlite3RefillIndex(Parse
*pParse
, Index
*pIndex
, int memRootPage
){
1970 Table
*pTab
= pIndex
->pTable
; /* The table that is indexed */
1971 int iTab
= pParse
->nTab
; /* Btree cursor used for pTab */
1972 int iIdx
= pParse
->nTab
+1; /* Btree cursor used for pIndex */
1973 int addr1
; /* Address of top of loop */
1974 int tnum
; /* Root page of index */
1975 Vdbe
*v
; /* Generate code into this virtual machine */
1976 int isUnique
; /* True for a unique index */
1978 #ifndef SQLITE_OMIT_AUTHORIZATION
1979 if( sqlite3AuthCheck(pParse
, SQLITE_REINDEX
, pIndex
->zName
, 0,
1980 pParse
->db
->aDb
[pIndex
->iDb
].zName
) ){
1985 /* Ensure all the required collation sequences are available. This
1986 ** routine will invoke the collation-needed callback if necessary (and
1987 ** if one has been registered).
1989 if( sqlite3CheckIndexCollSeq(pParse
, pIndex
) ){
1993 v
= sqlite3GetVdbe(pParse
);
1995 if( memRootPage
>=0 ){
1996 sqlite3VdbeAddOp(v
, OP_MemLoad
, memRootPage
, 0);
1999 tnum
= pIndex
->tnum
;
2000 sqlite3VdbeAddOp(v
, OP_Clear
, tnum
, pIndex
->iDb
);
2002 sqlite3VdbeAddOp(v
, OP_Integer
, pIndex
->iDb
, 0);
2003 sqlite3VdbeOp3(v
, OP_OpenWrite
, iIdx
, tnum
,
2004 (char*)&pIndex
->keyInfo
, P3_KEYINFO
);
2005 sqlite3VdbeAddOp(v
, OP_Integer
, pTab
->iDb
, 0);
2006 sqlite3VdbeAddOp(v
, OP_OpenRead
, iTab
, pTab
->tnum
);
2007 sqlite3VdbeAddOp(v
, OP_SetNumColumns
, iTab
, pTab
->nCol
);
2008 addr1
= sqlite3VdbeAddOp(v
, OP_Rewind
, iTab
, 0);
2009 sqlite3GenerateIndexKey(v
, pIndex
, iTab
);
2010 isUnique
= pIndex
->onError
!=OE_None
;
2011 sqlite3VdbeAddOp(v
, OP_IdxInsert
, iIdx
, isUnique
);
2013 sqlite3VdbeChangeP3(v
, -1, "indexed columns are not unique", P3_STATIC
);
2015 sqlite3VdbeAddOp(v
, OP_Next
, iTab
, addr1
+1);
2016 sqlite3VdbeChangeP2(v
, addr1
, sqlite3VdbeCurrentAddr(v
));
2017 sqlite3VdbeAddOp(v
, OP_Close
, iTab
, 0);
2018 sqlite3VdbeAddOp(v
, OP_Close
, iIdx
, 0);
2022 ** Create a new index for an SQL table. pName1.pName2 is the name of the index
2023 ** and pTblList is the name of the table that is to be indexed. Both will
2024 ** be NULL for a primary key or an index that is created to satisfy a
2025 ** UNIQUE constraint. If pTable and pIndex are NULL, use pParse->pNewTable
2026 ** as the table to be indexed. pParse->pNewTable is a table that is
2027 ** currently being constructed by a CREATE TABLE statement.
2029 ** pList is a list of columns to be indexed. pList will be NULL if this
2030 ** is a primary key or unique-constraint on the most recent column added
2031 ** to the table currently under construction.
2033 void sqlite3CreateIndex(
2034 Parse
*pParse
, /* All information about this parse */
2035 Token
*pName1
, /* First part of index name. May be NULL */
2036 Token
*pName2
, /* Second part of index name. May be NULL */
2037 SrcList
*pTblName
, /* Table to index. Use pParse->pNewTable if 0 */
2038 ExprList
*pList
, /* A list of columns to be indexed */
2039 int onError
, /* OE_Abort, OE_Ignore, OE_Replace, or OE_None */
2040 Token
*pStart
, /* The CREATE token that begins a CREATE TABLE
2042 Token
*pEnd
/* The ")" that closes the CREATE INDEX statement */
2045 Table
*pTab
= NULL
; /* Table to be indexed */
2046 Index
*pIndex
= NULL
; /* The index to be created */
2047 STRPTR zName
= NULL
;
2049 Token nullId
; /* Fake token for an empty ID list */
2050 DbFixer sFix
; /* For assigning database names to pTable */
2051 sqlite3
*db
= pParse
->db
;
2052 int iDb
; /* Index of the database that is being written */
2053 Token
*pName
= NULL
; /* Unqualified name of the index to create */
2055 if( pParse
->nErr
|| sqlite3_malloc_failed
) goto exit_create_index
;
2058 * Find the table that is to be indexed. Return early if not found.
2063 * Use the two-part index name to determine the database to search for
2064 * the table. 'Fix' the table name to this db before looking up the
2067 assert( pName1
&& pName2
);
2068 iDb
= sqlite3TwoPartName(pParse
, pName1
, pName2
, &pName
);
2069 if( iDb
< 0 ) goto exit_create_index
;
2071 #ifndef SQLITE_OMIT_TEMPDB
2073 * If the index name was unqualified, check if the the table is a temp
2074 * table. If so, set the database to 1.
2076 pTab
= sqlite3SrcListLookup(pParse
, pTblName
);
2077 if( pName2
&& !pName2
->n
&& pTab
&& pTab
->iDb
== 1 )
2081 if( sqlite3FixInit(&sFix
, pParse
, iDb
, "index", pName
)
2082 && sqlite3FixSrcList(&sFix
, pTblName
))
2083 goto exit_create_index
;
2085 pTab
= sqlite3LocateTable(pParse
, pTblName
->a
[0].zName
,
2086 pTblName
->a
[0].zDatabase
);
2087 if( !pTab
) goto exit_create_index
;
2088 assert( iDb
==pTab
->iDb
);
2093 pTab
= pParse
->pNewTable
;
2097 if( pTab
==0 || pParse
->nErr
) goto exit_create_index
;
2098 if( pTab
->readOnly
)
2100 sqlite3ErrorMsg(pParse
, "table %s may not be indexed", pTab
->zName
);
2101 goto exit_create_index
;
2103 #ifndef SQLITE_OMIT_VIEW
2106 sqlite3ErrorMsg(pParse
, "views may not be indexed");
2107 goto exit_create_index
;
2112 * Find the name of the index. Make sure there is not already another index
2113 * or table with the same name.
2115 * Exception: If we are reading the names of permanent indices from the
2116 * sqlite_master table (because some other process changed the schema) and
2117 * one of the index names collides with the name of a temporary table or
2118 * index, then we will continue to process this index.
2120 * If pName==0 it means that we are dealing with a primary key or UNIQUE
2121 * constraint. We have to invent our own name.
2125 zName
= sqlite3NameFromToken(pName
);
2126 if( SQLITE_OK
!=sqlite3ReadSchema(pParse
) ) goto exit_create_index
;
2127 if( zName
==0 ) goto exit_create_index
;
2128 if( SQLITE_OK
!=sqlite3CheckObjectName(pParse
, zName
) )
2129 goto exit_create_index
;
2131 if( !db
->init
.busy
)
2133 Index
*pISameName
; /* Another index with the same name */
2134 Table
*pTSameName
; /* A table with same name as the index */
2135 if( SQLITE_OK
!=sqlite3ReadSchema(pParse
) ) goto exit_create_index
;
2136 if( (pISameName
= sqlite3FindIndex(db
, zName
, db
->aDb
[iDb
].zName
)))
2138 sqlite3ErrorMsg(pParse
, "index %s already exists", zName
);
2139 goto exit_create_index
;
2141 if( (pTSameName
= sqlite3FindTable(db
, zName
, 0))!=0 )
2143 sqlite3ErrorMsg( pParse
,
2144 "there is already a table named %s", zName
);
2145 goto exit_create_index
;
2154 for(pLoop
=pTab
->pIndex
, n
=1; pLoop
; pLoop
=pLoop
->pNext
, n
++){}
2155 sprintf(zBuf
,"_%d",n
);
2157 sqlite3SetString(&zName
, "sqlite_autoindex_", pTab
->zName
, zBuf
, NULL
);
2158 if( !zName
) goto exit_create_index
;
2161 /* Check for authorization to create an index. */
2162 #ifndef SQLITE_OMIT_AUTHORIZATION
2164 const char *zDb
= db
->aDb
[iDb
].zName
;
2165 if( sqlite3AuthCheck(pParse
, SQLITE_INSERT
, SCHEMA_TABLE(iDb
),0,zDb
) )
2166 goto exit_create_index
;
2167 i
= SQLITE_CREATE_INDEX
;
2168 if( !OMIT_TEMPDB
&& iDb
==1 ) i
= SQLITE_CREATE_TEMP_INDEX
;
2169 if( sqlite3AuthCheck(pParse
, i
, zName
, pTab
->zName
, zDb
) )
2170 goto exit_create_index
;
2175 * If pList==0, it means this routine was called to make a primary key out
2176 * of the last column added to the table under construction. So create
2177 * a fake list to simulate this.
2181 nullId
.z
= pTab
->aCol
[pTab
->nCol
-1].zName
;
2182 nullId
.n
= strlen(nullId
.z
);
2183 pList
= sqlite3ExprListAppend(0, 0, &nullId
);
2184 if( !pList
) goto exit_create_index
;
2188 * Allocate the index structure.
2190 pIndex
= sqliteMalloc( sizeof(Index
) + strlen(zName
) + 1 +
2191 (sizeof(int) + sizeof(CollSeq
*))*pList
->nExpr
);
2192 if( sqlite3_malloc_failed
) goto exit_create_index
;
2193 pIndex
->aiColumn
= (int*)&pIndex
->keyInfo
.aColl
[pList
->nExpr
];
2194 pIndex
->zName
= (STRPTR
)&pIndex
->aiColumn
[pList
->nExpr
];
2195 strcpy(pIndex
->zName
, zName
);
2196 pIndex
->pTable
= pTab
;
2197 pIndex
->nColumn
= pList
->nExpr
;
2198 pIndex
->onError
= onError
;
2199 pIndex
->autoIndex
= pName
==0;
2203 * Scan the names of the columns of the table to be indexed and load the
2204 * column indices into the Index structure. Report an error if any column
2207 for(i
=0; i
<pList
->nExpr
; i
++)
2209 for(j
=0; j
<pTab
->nCol
; j
++)
2210 if( sqlite3StrICmp(pList
->a
[i
].zName
, pTab
->aCol
[j
].zName
)==0 )
2214 sqlite3ErrorMsg(pParse
, "table %s has no column named %s",
2215 pTab
->zName
, pList
->a
[i
].zName
);
2216 goto exit_create_index
;
2218 pIndex
->aiColumn
[i
] = j
;
2219 if( pList
->a
[i
].pExpr
)
2221 assert( pList
->a
[i
].pExpr
->pColl
);
2222 pIndex
->keyInfo
.aColl
[i
] = pList
->a
[i
].pExpr
->pColl
;
2224 else pIndex
->keyInfo
.aColl
[i
] = pTab
->aCol
[j
].pColl
;
2225 assert( pIndex
->keyInfo
.aColl
[i
] );
2227 && sqlite3CheckCollSeq(pParse
, pIndex
->keyInfo
.aColl
[i
]) )
2228 goto exit_create_index
;
2230 pIndex
->keyInfo
.nField
= pList
->nExpr
;
2232 if( pTab
==pParse
->pNewTable
)
2235 * This routine has been called to create an automatic index as a
2236 * result of a PRIMARY KEY or UNIQUE clause on a column definition, or
2237 * a PRIMARY KEY or UNIQUE clause following the column definitions.
2240 * CREATE TABLE t(x PRIMARY KEY, y);
2241 * CREATE TABLE t(x, y, UNIQUE(x, y));
2243 * Either way, check to see if the table already has such an index. If
2244 * so, don't bother creating this one. This only applies to
2245 * automatically created indices. Users can do as they wish with
2249 for(pIdx
=pTab
->pIndex
; pIdx
; pIdx
=pIdx
->pNext
)
2252 assert( pIdx
->onError
!= OE_None
);
2253 assert( pIdx
->autoIndex
);
2254 assert( pIndex
->onError
!= OE_None
);
2256 if( pIdx
->nColumn
!=pIndex
->nColumn
) continue;
2257 for(k
=0; k
< pIdx
->nColumn
; k
++)
2259 if( pIdx
->aiColumn
[k
] != pIndex
->aiColumn
[k
] ) break;
2260 if( pIdx
->keyInfo
.aColl
[k
]!=pIndex
->keyInfo
.aColl
[k
] ) break;
2262 if( k
==pIdx
->nColumn
)
2264 if( pIdx
->onError
!=pIndex
->onError
)
2267 * This constraint creates the same index as a previous
2268 * constraint specified somewhere in the CREATE TABLE
2269 * statement. However the ON CONFLICT clauses are
2270 * different. If both this constraint and the previous
2271 * equivalent constraint have explicit ON CONFLICT clauses
2272 * this is an error. Otherwise, use the explicitly
2273 * specified behaviour for the index.
2275 if( !(pIdx
->onError
==OE_Default
2276 || pIndex
->onError
==OE_Default
) )
2278 sqlite3ErrorMsg(pParse
,
2279 "conflicting ON CONFLICT clauses specified",
2282 if( pIdx
->onError
==OE_Default
)
2283 pIdx
->onError
= pIndex
->onError
;
2285 goto exit_create_index
;
2291 * Link the new Index structure to its table and to the other in-memory
2292 * database structures.
2297 p
= sqlite3HashInsert(&db
->aDb
[pIndex
->iDb
].idxHash
,
2298 pIndex
->zName
, strlen(pIndex
->zName
)+1, pIndex
);
2301 assert( p
==pIndex
); /* Malloc must have failed */
2302 goto exit_create_index
;
2304 db
->flags
|= SQLITE_InternChanges
;
2306 pIndex
->tnum
= db
->init
.newTnum
;
2309 * If the db->init.busy is 0 then create the index on disk. This involves
2310 * writing the index into the master table and filling in the index with
2311 * the current table contents.
2313 * The db->init.busy is 0 when the user first enters a CREATE INDEX
2314 * command. db->init.busy is 1 when a database is opened and CREATE INDEX
2315 * statements are read out of the master table. In the latter case the
2316 * index already exists on disk, which is why we don't want to recreate it.
2318 * If pTblName==0 it means this index is generated as a primary key or
2319 * UNIQUE constraint of a CREATE TABLE statement. Since the table has just
2320 * been created, it contains no data and the index initialization step can
2323 else if( db
->init
.busy
==0 )
2327 int iMem
= pParse
->nMem
++;
2329 v
= sqlite3GetVdbe(pParse
);
2330 if( v
==0 ) goto exit_create_index
;
2332 /* Create the rootpage for the index */
2333 sqlite3BeginWriteOperation(pParse
, 1, iDb
);
2334 sqlite3VdbeAddOp(v
, OP_CreateIndex
, iDb
, 0);
2335 sqlite3VdbeAddOp(v
, OP_MemStore
, iMem
, 0);
2338 * Gather the complete text of the CREATE INDEX statement into the
2341 if( pStart
&& pEnd
)
2342 /* A named index with an explicit CREATE INDEX statement */
2343 zStmt
= sqlite3MPrintf("CREATE%s INDEX %.*s",
2344 onError
==OE_None
? "" : " UNIQUE",
2345 pEnd
->z
- pName
->z
+ 1,
2349 /* An automatic index created by a PRIMARY KEY or UNIQUE
2351 /* zStmt = sqlite3MPrintf(""); */
2355 /* Add an entry in sqlite_master for this index */
2356 sqlite3NestedParse(pParse
,
2357 "INSERT INTO %Q.%s VALUES('index',%Q,%Q,#0,%Q);",
2358 db
->aDb
[iDb
].zName
, SCHEMA_TABLE(iDb
),
2359 pIndex
->zName
, pTab
->zName
, zStmt
);
2360 sqlite3VdbeAddOp(v
, OP_Pop
, 1, 0);
2364 * Fill the index with data and reparse the schema. Code an OP_Expire
2365 * to invalidate all pre-compiled statements.
2369 sqlite3RefillIndex(pParse
, pIndex
, iMem
);
2370 sqlite3ChangeCookie(db
, v
, iDb
);
2371 sqlite3VdbeOp3(v
, OP_ParseSchema
, iDb
, 0,
2372 sqlite3MPrintf("name='%q'", pIndex
->zName
), P3_DYNAMIC
);
2373 sqlite3VdbeAddOp(v
, OP_Expire
, 0, 0);
2378 * When adding an index to the list of indices for a table, make sure all
2379 * indices labeled OE_Replace come after all those labeled OE_Ignore. This
2380 * is necessary for the correct operation of UPDATE and INSERT.
2382 if( db
->init
.busy
|| pTblName
==0 )
2384 if( onError
!=OE_Replace
|| pTab
->pIndex
==0
2385 || pTab
->pIndex
->onError
==OE_Replace
)
2387 pIndex
->pNext
= pTab
->pIndex
;
2388 pTab
->pIndex
= pIndex
;
2392 Index
*pOther
= pTab
->pIndex
;
2393 while( pOther
->pNext
&& pOther
->pNext
->onError
!=OE_Replace
)
2394 pOther
= pOther
->pNext
;
2395 pIndex
->pNext
= pOther
->pNext
;
2396 pOther
->pNext
= pIndex
;
2401 /* Clean up before exiting */
2405 sqlite3ExprListDelete(pList
);
2406 sqlite3SrcListDelete(pTblName
);
2412 * This routine will drop an existing named index. This routine implements the
2413 * DROP INDEX statement.
2415 void sqlite3DropIndex(Parse
*pParse
, SrcList
*pName
)
2419 sqlite3
*db
= pParse
->db
;
2421 if( pParse
->nErr
|| sqlite3_malloc_failed
)
2422 goto exit_drop_index
;
2424 assert( pName
->nSrc
==1 );
2425 if( SQLITE_OK
!=sqlite3ReadSchema(pParse
) ){
2426 goto exit_drop_index
;
2428 pIndex
= sqlite3FindIndex(db
, pName
->a
[0].zName
, pName
->a
[0].zDatabase
);
2430 sqlite3ErrorMsg(pParse
, "no such index: %S", pName
, 0);
2431 pParse
->checkSchema
= 1;
2432 goto exit_drop_index
;
2434 if( pIndex
->autoIndex
){
2435 sqlite3ErrorMsg(pParse
, "index associated with UNIQUE "
2436 "or PRIMARY KEY constraint cannot be dropped", 0);
2437 goto exit_drop_index
;
2439 #ifndef SQLITE_OMIT_AUTHORIZATION
2441 int code
= SQLITE_DROP_INDEX
;
2442 Table
*pTab
= pIndex
->pTable
;
2443 const char *zDb
= db
->aDb
[pIndex
->iDb
].zName
;
2444 const char *zTab
= SCHEMA_TABLE(pIndex
->iDb
);
2445 if( sqlite3AuthCheck(pParse
, SQLITE_DELETE
, zTab
, 0, zDb
) ){
2446 goto exit_drop_index
;
2448 if( !OMIT_TEMPDB
&& pIndex
->iDb
) code
= SQLITE_DROP_TEMP_INDEX
;
2449 if( sqlite3AuthCheck(pParse
, code
, pIndex
->zName
, pTab
->zName
, zDb
) ){
2450 goto exit_drop_index
;
2455 /* Generate code to remove the index and from the master table */
2456 v
= sqlite3GetVdbe(pParse
);
2458 int iDb
= pIndex
->iDb
;
2459 sqlite3NestedParse(pParse
,
2460 "DELETE FROM %Q.%s WHERE name=%Q",
2461 db
->aDb
[iDb
].zName
, SCHEMA_TABLE(iDb
),
2464 sqlite3ChangeCookie(db
, v
, iDb
);
2465 destroyRootPage(pParse
, pIndex
->tnum
, iDb
);
2466 sqlite3VdbeOp3(v
, OP_DropIndex
, iDb
, 0, pIndex
->zName
, 0);
2470 sqlite3SrcListDelete(pName
);
2474 ** Append a new element to the given IdList. Create a new IdList if
2477 ** A new IdList is returned, or NULL if malloc() fails.
2479 IdList
*sqlite3IdListAppend(IdList
*pList
, Token
*pToken
){
2481 pList
= sqliteMalloc( sizeof(IdList
) );
2482 if( pList
==0 ) return 0;
2485 if( pList
->nId
>=pList
->nAlloc
){
2486 struct IdList_item
*a
;
2487 pList
->nAlloc
= pList
->nAlloc
*2 + 5;
2488 a
= sqliteRealloc(pList
->a
, pList
->nAlloc
*sizeof(pList
->a
[0]) );
2490 sqlite3IdListDelete(pList
);
2495 memset(&pList
->a
[pList
->nId
], 0, sizeof(pList
->a
[0]));
2496 pList
->a
[pList
->nId
].zName
= sqlite3NameFromToken(pToken
);
2502 ** Append a new table name to the given SrcList. Create a new SrcList if
2503 ** need be. A new entry is created in the SrcList even if pToken is NULL.
2505 ** A new SrcList is returned, or NULL if malloc() fails.
2507 ** If pDatabase is not null, it means that the table has an optional
2508 ** database name prefix. Like this: "database.table". The pDatabase
2509 ** points to the table name and the pTable points to the database name.
2510 ** The SrcList.a[].zName field is filled with the table name which might
2511 ** come from pTable (if pDatabase is NULL) or from pDatabase.
2512 ** SrcList.a[].zDatabase is filled with the database name from pTable,
2513 ** or with NULL if no database is specified.
2515 ** In other words, if call like this:
2517 ** sqlite3SrcListAppend(A,B,0);
2519 ** Then B is a table name and the database name is unspecified. If called
2522 ** sqlite3SrcListAppend(A,B,C);
2524 ** Then C is the table name and B is the database name.
2526 SrcList
*sqlite3SrcListAppend(SrcList
*pList
, Token
*pTable
, Token
*pDatabase
){
2527 struct SrcList_item
*pItem
;
2529 pList
= sqliteMalloc( sizeof(SrcList
) );
2530 if( pList
==0 ) return 0;
2533 if( pList
->nSrc
>=pList
->nAlloc
){
2536 pNew
= sqliteRealloc(pList
,
2537 sizeof(*pList
) + (pList
->nAlloc
-1)*sizeof(pList
->a
[0]) );
2539 sqlite3SrcListDelete(pList
);
2544 pItem
= &pList
->a
[pList
->nSrc
];
2545 memset(pItem
, 0, sizeof(pList
->a
[0]));
2546 if( pDatabase
&& pDatabase
->z
==0 ){
2549 if( pDatabase
&& pTable
){
2550 Token
*pTemp
= pDatabase
;
2554 pItem
->zName
= sqlite3NameFromToken(pTable
);
2555 pItem
->zDatabase
= sqlite3NameFromToken(pDatabase
);
2556 pItem
->iCursor
= -1;
2562 ** Assign cursors to all tables in a SrcList
2564 void sqlite3SrcListAssignCursors(Parse
*pParse
, SrcList
*pList
){
2566 struct SrcList_item
*pItem
;
2567 for(i
=0, pItem
=pList
->a
; i
<pList
->nSrc
; i
++, pItem
++){
2568 if( pItem
->iCursor
>=0 ) break;
2569 pItem
->iCursor
= pParse
->nTab
++;
2570 if( pItem
->pSelect
){
2571 sqlite3SrcListAssignCursors(pParse
, pItem
->pSelect
->pSrc
);
2577 ** Add an alias to the last identifier on the given identifier list.
2579 void sqlite3SrcListAddAlias(SrcList
*pList
, Token
*pToken
){
2580 if( pList
&& pList
->nSrc
>0 ){
2581 pList
->a
[pList
->nSrc
-1].zAlias
= sqlite3NameFromToken(pToken
);
2586 ** Delete an IdList.
2588 void sqlite3IdListDelete(IdList
*pList
){
2590 if( pList
==0 ) return;
2591 for(i
=0; i
<pList
->nId
; i
++){
2592 sqliteFree(pList
->a
[i
].zName
);
2594 sqliteFree(pList
->a
);
2599 ** Return the index in pList of the identifier named zId. Return -1
2602 int sqlite3IdListIndex(IdList
*pList
, const char *zName
){
2604 if( pList
==0 ) return -1;
2605 for(i
=0; i
<pList
->nId
; i
++){
2606 if( sqlite3StrICmp(pList
->a
[i
].zName
, zName
)==0 ) return i
;
2612 ** Delete an entire SrcList including all its substructure.
2614 void sqlite3SrcListDelete(SrcList
*pList
){
2616 struct SrcList_item
*pItem
;
2617 if( pList
==0 ) return;
2618 for(pItem
=pList
->a
, i
=0; i
<pList
->nSrc
; i
++, pItem
++){
2619 sqliteFree(pItem
->zDatabase
);
2620 sqliteFree(pItem
->zName
);
2621 sqliteFree(pItem
->zAlias
);
2622 sqlite3DeleteTable(0, pItem
->pTab
);
2623 sqlite3SelectDelete(pItem
->pSelect
);
2624 sqlite3ExprDelete(pItem
->pOn
);
2625 sqlite3IdListDelete(pItem
->pUsing
);
2631 ** Begin a transaction
2633 void sqlite3BeginTransaction(Parse
*pParse
, int type
){
2638 if( pParse
==0 || (db
=pParse
->db
)==0 || db
->aDb
[0].pBt
==0 ) return;
2639 if( pParse
->nErr
|| sqlite3_malloc_failed
) return;
2640 if( sqlite3AuthCheck(pParse
, SQLITE_TRANSACTION
, "BEGIN", 0, 0) ) return;
2642 v
= sqlite3GetVdbe(pParse
);
2644 if( type
!=TK_DEFERRED
){
2645 for(i
=0; i
<db
->nDb
; i
++){
2646 sqlite3VdbeAddOp(v
, OP_Transaction
, i
, (type
==TK_EXCLUSIVE
)+1);
2649 sqlite3VdbeAddOp(v
, OP_AutoCommit
, 0, 0);
2653 ** Commit a transaction
2655 void sqlite3CommitTransaction(Parse
*pParse
){
2659 if( pParse
==0 || (db
=pParse
->db
)==0 || db
->aDb
[0].pBt
==0 ) return;
2660 if( pParse
->nErr
|| sqlite3_malloc_failed
) return;
2661 if( sqlite3AuthCheck(pParse
, SQLITE_TRANSACTION
, "COMMIT", 0, 0) ) return;
2663 v
= sqlite3GetVdbe(pParse
);
2665 sqlite3VdbeAddOp(v
, OP_AutoCommit
, 1, 0);
2670 ** Rollback a transaction
2672 void sqlite3RollbackTransaction(Parse
*pParse
){
2676 if( pParse
==0 || (db
=pParse
->db
)==0 || db
->aDb
[0].pBt
==0 ) return;
2677 if( pParse
->nErr
|| sqlite3_malloc_failed
) return;
2678 if( sqlite3AuthCheck(pParse
, SQLITE_TRANSACTION
, "ROLLBACK", 0, 0) ) return;
2680 v
= sqlite3GetVdbe(pParse
);
2682 sqlite3VdbeAddOp(v
, OP_AutoCommit
, 1, 1);
2687 ** Make sure the TEMP database is open and available for use. Return
2688 ** the number of errors. Leave any error messages in the pParse structure.
2690 static int sqlite3OpenTempDatabase(Parse
*pParse
){
2691 sqlite3
*db
= pParse
->db
;
2692 if( db
->aDb
[1].pBt
==0 && !pParse
->explain
){
2693 int rc
= sqlite3BtreeFactory(db
, 0, 0, MAX_PAGES
, &db
->aDb
[1].pBt
);
2694 if( rc
!=SQLITE_OK
){
2695 sqlite3ErrorMsg(pParse
, "unable to open a temporary database "
2696 "file for storing temporary tables");
2700 if( db
->flags
& !db
->autoCommit
){
2701 rc
= sqlite3BtreeBeginTrans(db
->aDb
[1].pBt
, 1);
2702 if( rc
!=SQLITE_OK
){
2703 sqlite3ErrorMsg(pParse
, "unable to get a write lock on "
2704 "the temporary database file");
2714 ** Generate VDBE code that will verify the schema cookie and start
2715 ** a read-transaction for all named database files.
2717 ** It is important that all schema cookies be verified and all
2718 ** read transactions be started before anything else happens in
2719 ** the VDBE program. But this routine can be called after much other
2720 ** code has been generated. So here is what we do:
2722 ** The first time this routine is called, we code an OP_Goto that
2723 ** will jump to a subroutine at the end of the program. Then we
2724 ** record every database that needs its schema verified in the
2725 ** pParse->cookieMask field. Later, after all other code has been
2726 ** generated, the subroutine that does the cookie verifications and
2727 ** starts the transactions will be coded and the OP_Goto P2 value
2728 ** will be made to point to that subroutine. The generation of the
2729 ** cookie verification subroutine code happens in sqlite3FinishCoding().
2731 ** If iDb<0 then code the OP_Goto only - don't set flag to verify the
2732 ** schema on any databases. This can be used to position the OP_Goto
2733 ** early in the code, before we know if any database tables will be used.
2735 void sqlite3CodeVerifySchema(Parse
*pParse
, int iDb
){
2740 v
= sqlite3GetVdbe(pParse
);
2741 if( v
==0 ) return; /* This only happens if there was a prior error */
2743 if( pParse
->cookieGoto
==0 ){
2744 pParse
->cookieGoto
= sqlite3VdbeAddOp(v
, OP_Goto
, 0, 0)+1;
2747 assert( iDb
<db
->nDb
);
2748 assert( db
->aDb
[iDb
].pBt
!=0 || iDb
==1 );
2751 if( (pParse
->cookieMask
& mask
)==0 ){
2752 pParse
->cookieMask
|= mask
;
2753 pParse
->cookieValue
[iDb
] = db
->aDb
[iDb
].schema_cookie
;
2754 if( !OMIT_TEMPDB
&& iDb
==1 ){
2755 sqlite3OpenTempDatabase(pParse
);
2762 ** Generate VDBE code that prepares for doing an operation that
2763 ** might change the database.
2765 ** This routine starts a new transaction if we are not already within
2766 ** a transaction. If we are already within a transaction, then a checkpoint
2767 ** is set if the setStatement parameter is true. A checkpoint should
2768 ** be set for operations that might fail (due to a constraint) part of
2769 ** the way through and which will need to undo some writes without having to
2770 ** rollback the whole transaction. For operations where all constraints
2771 ** can be checked before any changes are made to the database, it is never
2772 ** necessary to undo a write and the checkpoint should not be set.
2774 ** Only database iDb and the temp database are made writable by this call.
2775 ** If iDb==0, then the main and temp databases are made writable. If
2776 ** iDb==1 then only the temp database is made writable. If iDb>1 then the
2777 ** specified auxiliary database and the temp database are made writable.
2779 void sqlite3BeginWriteOperation(Parse
*pParse
, int setStatement
, int iDb
){
2780 Vdbe
*v
= sqlite3GetVdbe(pParse
);
2782 sqlite3CodeVerifySchema(pParse
, iDb
);
2783 pParse
->writeMask
|= 1<<iDb
;
2784 if( setStatement
&& pParse
->nested
==0 ){
2785 sqlite3VdbeAddOp(v
, OP_Statement
, iDb
, 0);
2787 if( (OMIT_TEMPDB
|| iDb
!=1) && pParse
->db
->aDb
[1].pBt
!=0 ){
2788 sqlite3BeginWriteOperation(pParse
, setStatement
, 1);
2793 ** Check to see if pIndex uses the collating sequence pColl. Return
2794 ** true if it does and false if it does not.
2796 #ifndef SQLITE_OMIT_REINDEX
2797 static int collationMatch(CollSeq
*pColl
, Index
*pIndex
){
2798 int n
= pIndex
->keyInfo
.nField
;
2799 CollSeq
**pp
= pIndex
->keyInfo
.aColl
;
2801 if( *pp
==pColl
) return 1;
2809 ** Recompute all indices of pTab that use the collating sequence pColl.
2810 ** If pColl==0 then recompute all indices of pTab.
2812 #ifndef SQLITE_OMIT_REINDEX
2813 void reindexTable(Parse
*pParse
, Table
*pTab
, CollSeq
*pColl
){
2814 Index
*pIndex
; /* An index associated with pTab */
2816 for(pIndex
=pTab
->pIndex
; pIndex
; pIndex
=pIndex
->pNext
){
2817 if( pColl
==0 || collationMatch(pColl
,pIndex
) ){
2818 sqlite3BeginWriteOperation(pParse
, 0, pTab
->iDb
);
2819 sqlite3RefillIndex(pParse
, pIndex
, -1);
2826 ** Recompute all indices of all tables in all databases where the
2827 ** indices use the collating sequence pColl. If pColl==0 then recompute
2828 ** all indices everywhere.
2830 #ifndef SQLITE_OMIT_REINDEX
2831 void reindexDatabases(Parse
*pParse
, CollSeq
*pColl
){
2832 Db
*pDb
; /* A single database */
2833 int iDb
; /* The database index number */
2834 sqlite3
*db
= pParse
->db
; /* The database connection */
2835 HashElem
*k
; /* For looping over tables in pDb */
2836 Table
*pTab
; /* A table in the database */
2838 for(iDb
=0, pDb
=db
->aDb
; iDb
<db
->nDb
; iDb
++, pDb
++){
2839 if( pDb
==0 ) continue;
2840 for(k
=sqliteHashFirst(&pDb
->tblHash
); k
; k
=sqliteHashNext(k
)){
2841 pTab
= (Table
*)sqliteHashData(k
);
2842 reindexTable(pParse
, pTab
, pColl
);
2849 ** Generate code for the REINDEX command.
2852 ** REINDEX <collation> -- 2
2853 ** REINDEX ?<database>.?<tablename> -- 3
2854 ** REINDEX ?<database>.?<indexname> -- 4
2856 ** Form 1 causes all indices in all attached databases to be rebuilt.
2857 ** Form 2 rebuilds all indices in all databases that use the named
2858 ** collating function. Forms 3 and 4 rebuild the named index or all
2859 ** indices associated with the named table.
2861 #ifndef SQLITE_OMIT_REINDEX
2862 void sqlite3Reindex(Parse
*pParse
, Token
*pName1
, Token
*pName2
){
2863 CollSeq
*pColl
; /* Collating sequence to be reindexed, or NULL */
2864 char *z
; /* Name of a table or index */
2865 const char *zDb
; /* Name of the database */
2866 Table
*pTab
; /* A table in the database */
2867 Index
*pIndex
; /* An index associated with pTab */
2868 int iDb
; /* The database index number */
2869 sqlite3
*db
= pParse
->db
; /* The database connection */
2870 Token
*pObjName
; /* Name of the table or index to be reindexed */
2872 /* Read the database schema. If an error occurs, leave an error message
2873 ** and code in pParse and return NULL. */
2874 if( SQLITE_OK
!=sqlite3ReadSchema(pParse
) ){
2878 if( pName1
==0 || pName1
->z
==0 ){
2879 reindexDatabases(pParse
, 0);
2881 }else if( pName2
==0 || pName2
->z
==0 ){
2882 pColl
= sqlite3FindCollSeq(db
, db
->enc
, pName1
->z
, pName1
->n
, 0);
2884 reindexDatabases(pParse
, pColl
);
2888 iDb
= sqlite3TwoPartName(pParse
, pName1
, pName2
, &pObjName
);
2890 z
= sqlite3NameFromToken(pObjName
);
2891 zDb
= db
->aDb
[iDb
].zName
;
2892 pTab
= sqlite3FindTable(db
, z
, zDb
);
2894 reindexTable(pParse
, pTab
, 0);
2898 pIndex
= sqlite3FindIndex(db
, z
, zDb
);
2901 sqlite3BeginWriteOperation(pParse
, 0, iDb
);
2902 sqlite3RefillIndex(pParse
, pIndex
, -1);
2905 sqlite3ErrorMsg(pParse
, "unable to identify the object to be reindexed");