Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1114)

Side by Side Diff: third_party/sqlite/sqlite-src-3100200/src/build.c

Issue 1610543003: [sql] Import reference version of SQLite 3.10.2. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 ** 2001 September 15 2 ** 2001 September 15
3 ** 3 **
4 ** The author disclaims copyright to this source code. In place of 4 ** The author disclaims copyright to this source code. In place of
5 ** a legal notice, here is a blessing: 5 ** a legal notice, here is a blessing:
6 ** 6 **
7 ** May you do good and not evil. 7 ** May you do good and not evil.
8 ** May you find forgiveness for yourself and forgive others. 8 ** May you find forgiveness for yourself and forgive others.
9 ** May you share freely, never taking more than you give. 9 ** May you share freely, never taking more than you give.
10 ** 10 **
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
135 ** 135 **
136 ** Note that if an error occurred, it might be the case that 136 ** Note that if an error occurred, it might be the case that
137 ** no VDBE code was generated. 137 ** no VDBE code was generated.
138 */ 138 */
139 void sqlite3FinishCoding(Parse *pParse){ 139 void sqlite3FinishCoding(Parse *pParse){
140 sqlite3 *db; 140 sqlite3 *db;
141 Vdbe *v; 141 Vdbe *v;
142 142
143 assert( pParse->pToplevel==0 ); 143 assert( pParse->pToplevel==0 );
144 db = pParse->db; 144 db = pParse->db;
145 if( db->mallocFailed ) return;
146 if( pParse->nested ) return; 145 if( pParse->nested ) return;
147 if( pParse->nErr ) return; 146 if( db->mallocFailed || pParse->nErr ){
147 if( pParse->rc==SQLITE_OK ) pParse->rc = SQLITE_ERROR;
148 return;
149 }
148 150
149 /* Begin by generating some termination code at the end of the 151 /* Begin by generating some termination code at the end of the
150 ** vdbe program 152 ** vdbe program
151 */ 153 */
152 v = sqlite3GetVdbe(pParse); 154 v = sqlite3GetVdbe(pParse);
153 assert( !pParse->isMultiWrite 155 assert( !pParse->isMultiWrite
154 || sqlite3VdbeAssertMayAbort(v, pParse->mayAbort)); 156 || sqlite3VdbeAssertMayAbort(v, pParse->mayAbort));
155 if( v ){ 157 if( v ){
156 while( sqlite3VdbeDeletePriorOpcode(v, OP_Close) ){} 158 while( sqlite3VdbeDeletePriorOpcode(v, OP_Close) ){}
157 sqlite3VdbeAddOp0(v, OP_Halt); 159 sqlite3VdbeAddOp0(v, OP_Halt);
(...skipping 25 matching lines...) Expand all
183 if( DbMaskTest(pParse->cookieMask, iDb)==0 ) continue; 185 if( DbMaskTest(pParse->cookieMask, iDb)==0 ) continue;
184 sqlite3VdbeUsesBtree(v, iDb); 186 sqlite3VdbeUsesBtree(v, iDb);
185 sqlite3VdbeAddOp4Int(v, 187 sqlite3VdbeAddOp4Int(v,
186 OP_Transaction, /* Opcode */ 188 OP_Transaction, /* Opcode */
187 iDb, /* P1 */ 189 iDb, /* P1 */
188 DbMaskTest(pParse->writeMask,iDb), /* P2 */ 190 DbMaskTest(pParse->writeMask,iDb), /* P2 */
189 pParse->cookieValue[iDb], /* P3 */ 191 pParse->cookieValue[iDb], /* P3 */
190 db->aDb[iDb].pSchema->iGeneration /* P4 */ 192 db->aDb[iDb].pSchema->iGeneration /* P4 */
191 ); 193 );
192 if( db->init.busy==0 ) sqlite3VdbeChangeP5(v, 1); 194 if( db->init.busy==0 ) sqlite3VdbeChangeP5(v, 1);
195 VdbeComment((v,
196 "usesStmtJournal=%d", pParse->mayAbort && pParse->isMultiWrite));
193 } 197 }
194 #ifndef SQLITE_OMIT_VIRTUALTABLE 198 #ifndef SQLITE_OMIT_VIRTUALTABLE
195 for(i=0; i<pParse->nVtabLock; i++){ 199 for(i=0; i<pParse->nVtabLock; i++){
196 char *vtab = (char *)sqlite3GetVTable(db, pParse->apVtabLock[i]); 200 char *vtab = (char *)sqlite3GetVTable(db, pParse->apVtabLock[i]);
197 sqlite3VdbeAddOp4(v, OP_VBegin, 0, 0, 0, vtab, P4_VTAB); 201 sqlite3VdbeAddOp4(v, OP_VBegin, 0, 0, 0, vtab, P4_VTAB);
198 } 202 }
199 pParse->nVtabLock = 0; 203 pParse->nVtabLock = 0;
200 #endif 204 #endif
201 205
202 /* Once all the cookies have been verified and transactions opened, 206 /* Once all the cookies have been verified and transactions opened,
203 ** obtain the required table-locks. This is a no-op unless the 207 ** obtain the required table-locks. This is a no-op unless the
204 ** shared-cache feature is enabled. 208 ** shared-cache feature is enabled.
205 */ 209 */
206 codeTableLocks(pParse); 210 codeTableLocks(pParse);
207 211
208 /* Initialize any AUTOINCREMENT data structures required. 212 /* Initialize any AUTOINCREMENT data structures required.
209 */ 213 */
210 sqlite3AutoincrementBegin(pParse); 214 sqlite3AutoincrementBegin(pParse);
211 215
212 /* Code constant expressions that where factored out of inner loops */ 216 /* Code constant expressions that where factored out of inner loops */
213 if( pParse->pConstExpr ){ 217 if( pParse->pConstExpr ){
214 ExprList *pEL = pParse->pConstExpr; 218 ExprList *pEL = pParse->pConstExpr;
215 pParse->okConstFactor = 0; 219 pParse->okConstFactor = 0;
216 for(i=0; i<pEL->nExpr; i++){ 220 for(i=0; i<pEL->nExpr; i++){
217 sqlite3ExprCode(pParse, pEL->a[i].pExpr, pEL->a[i].u.iConstExprReg); 221 sqlite3ExprCode(pParse, pEL->a[i].pExpr, pEL->a[i].u.iConstExprReg);
218 } 222 }
219 } 223 }
220 224
221 /* Finally, jump back to the beginning of the executable code. */ 225 /* Finally, jump back to the beginning of the executable code. */
222 sqlite3VdbeAddOp2(v, OP_Goto, 0, 1); 226 sqlite3VdbeGoto(v, 1);
223 } 227 }
224 } 228 }
225 229
226 230
227 /* Get the VDBE program ready for execution 231 /* Get the VDBE program ready for execution
228 */ 232 */
229 if( v && ALWAYS(pParse->nErr==0) && !db->mallocFailed ){ 233 if( v && pParse->nErr==0 && !db->mallocFailed ){
230 assert( pParse->iCacheLevel==0 ); /* Disables and re-enables match */ 234 assert( pParse->iCacheLevel==0 ); /* Disables and re-enables match */
231 /* A minimum of one cursor is required if autoincrement is used 235 /* A minimum of one cursor is required if autoincrement is used
232 * See ticket [a696379c1f08866] */ 236 * See ticket [a696379c1f08866] */
233 if( pParse->pAinc!=0 && pParse->nTab==0 ) pParse->nTab = 1; 237 if( pParse->pAinc!=0 && pParse->nTab==0 ) pParse->nTab = 1;
234 sqlite3VdbeMakeReady(v, pParse); 238 sqlite3VdbeMakeReady(v, pParse);
235 pParse->rc = SQLITE_DONE; 239 pParse->rc = SQLITE_DONE;
236 pParse->colNamesSet = 0; 240 pParse->colNamesSet = 0;
237 }else{ 241 }else{
238 pParse->rc = SQLITE_ERROR; 242 pParse->rc = SQLITE_ERROR;
239 } 243 }
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
300 ** If zDatabase is 0, all databases are searched for the table and the 304 ** If zDatabase is 0, all databases are searched for the table and the
301 ** first matching table is returned. (No checking for duplicate table 305 ** first matching table is returned. (No checking for duplicate table
302 ** names is done.) The search order is TEMP first, then MAIN, then any 306 ** names is done.) The search order is TEMP first, then MAIN, then any
303 ** auxiliary databases added using the ATTACH command. 307 ** auxiliary databases added using the ATTACH command.
304 ** 308 **
305 ** See also sqlite3LocateTable(). 309 ** See also sqlite3LocateTable().
306 */ 310 */
307 Table *sqlite3FindTable(sqlite3 *db, const char *zName, const char *zDatabase){ 311 Table *sqlite3FindTable(sqlite3 *db, const char *zName, const char *zDatabase){
308 Table *p = 0; 312 Table *p = 0;
309 int i; 313 int i;
310 assert( zName!=0 ); 314
311 /* All mutexes are required for schema access. Make sure we hold them. */ 315 /* All mutexes are required for schema access. Make sure we hold them. */
312 assert( zDatabase!=0 || sqlite3BtreeHoldsAllMutexes(db) ); 316 assert( zDatabase!=0 || sqlite3BtreeHoldsAllMutexes(db) );
313 #if SQLITE_USER_AUTHENTICATION 317 #if SQLITE_USER_AUTHENTICATION
314 /* Only the admin user is allowed to know that the sqlite_user table 318 /* Only the admin user is allowed to know that the sqlite_user table
315 ** exists */ 319 ** exists */
316 if( db->auth.authLevel<UAUTH_Admin && sqlite3UserAuthTable(zName)!=0 ){ 320 if( db->auth.authLevel<UAUTH_Admin && sqlite3UserAuthTable(zName)!=0 ){
317 return 0; 321 return 0;
318 } 322 }
319 #endif 323 #endif
320 for(i=OMIT_TEMPDB; i<db->nDb; i++){ 324 for(i=OMIT_TEMPDB; i<db->nDb; i++){
(...skipping 26 matching lines...) Expand all
347 351
348 /* Read the database schema. If an error occurs, leave an error message 352 /* Read the database schema. If an error occurs, leave an error message
349 ** and code in pParse and return NULL. */ 353 ** and code in pParse and return NULL. */
350 if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){ 354 if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){
351 return 0; 355 return 0;
352 } 356 }
353 357
354 p = sqlite3FindTable(pParse->db, zName, zDbase); 358 p = sqlite3FindTable(pParse->db, zName, zDbase);
355 if( p==0 ){ 359 if( p==0 ){
356 const char *zMsg = isView ? "no such view" : "no such table"; 360 const char *zMsg = isView ? "no such view" : "no such table";
361 #ifndef SQLITE_OMIT_VIRTUALTABLE
362 if( sqlite3FindDbName(pParse->db, zDbase)<1 ){
363 /* If zName is the not the name of a table in the schema created using
364 ** CREATE, then check to see if it is the name of an virtual table that
365 ** can be an eponymous virtual table. */
366 Module *pMod = (Module*)sqlite3HashFind(&pParse->db->aModule, zName);
367 if( pMod && sqlite3VtabEponymousTableInit(pParse, pMod) ){
368 return pMod->pEpoTab;
369 }
370 }
371 #endif
357 if( zDbase ){ 372 if( zDbase ){
358 sqlite3ErrorMsg(pParse, "%s: %s.%s", zMsg, zDbase, zName); 373 sqlite3ErrorMsg(pParse, "%s: %s.%s", zMsg, zDbase, zName);
359 }else{ 374 }else{
360 sqlite3ErrorMsg(pParse, "%s: %s", zMsg, zName); 375 sqlite3ErrorMsg(pParse, "%s: %s", zMsg, zName);
361 } 376 }
362 pParse->checkSchema = 1; 377 pParse->checkSchema = 1;
363 } 378 }
364 #if SQLITE_USER_AUTHENICATION 379
365 else if( pParse->db->auth.authLevel<UAUTH_User ){
366 sqlite3ErrorMsg(pParse, "user not authenticated");
367 p = 0;
368 }
369 #endif
370 return p; 380 return p;
371 } 381 }
372 382
373 /* 383 /*
374 ** Locate the table identified by *p. 384 ** Locate the table identified by *p.
375 ** 385 **
376 ** This is a wrapper around sqlite3LocateTable(). The difference between 386 ** This is a wrapper around sqlite3LocateTable(). The difference between
377 ** sqlite3LocateTable() and this function is that this function restricts 387 ** sqlite3LocateTable() and this function is that this function restricts
378 ** the search to schema (p->pSchema) if it is not NULL. p->pSchema may be 388 ** the search to schema (p->pSchema) if it is not NULL. p->pSchema may be
379 ** non-NULL if it is part of a view or trigger program definition. See 389 ** non-NULL if it is part of a view or trigger program definition. See
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
424 return p; 434 return p;
425 } 435 }
426 436
427 /* 437 /*
428 ** Reclaim the memory used by an index 438 ** Reclaim the memory used by an index
429 */ 439 */
430 static void freeIndex(sqlite3 *db, Index *p){ 440 static void freeIndex(sqlite3 *db, Index *p){
431 #ifndef SQLITE_OMIT_ANALYZE 441 #ifndef SQLITE_OMIT_ANALYZE
432 sqlite3DeleteIndexSamples(db, p); 442 sqlite3DeleteIndexSamples(db, p);
433 #endif 443 #endif
434 if( db==0 || db->pnBytesFreed==0 ) sqlite3KeyInfoUnref(p->pKeyInfo);
435 sqlite3ExprDelete(db, p->pPartIdxWhere); 444 sqlite3ExprDelete(db, p->pPartIdxWhere);
445 sqlite3ExprListDelete(db, p->aColExpr);
436 sqlite3DbFree(db, p->zColAff); 446 sqlite3DbFree(db, p->zColAff);
437 if( p->isResized ) sqlite3DbFree(db, p->azColl); 447 if( p->isResized ) sqlite3DbFree(db, (void *)p->azColl);
438 #ifdef SQLITE_ENABLE_STAT3_OR_STAT4 448 #ifdef SQLITE_ENABLE_STAT3_OR_STAT4
439 sqlite3_free(p->aiRowEst); 449 sqlite3_free(p->aiRowEst);
440 #endif 450 #endif
441 sqlite3DbFree(db, p); 451 sqlite3DbFree(db, p);
442 } 452 }
443 453
444 /* 454 /*
445 ** For the index called zIdxName which is found in the database iDb, 455 ** For the index called zIdxName which is found in the database iDb,
446 ** unlike that index from its Table then remove the index from 456 ** unlike that index from its Table then remove the index from
447 ** the index hash table and free all memory structures associated 457 ** the index hash table and free all memory structures associated
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
552 ** This routine is called when a commit occurs. 562 ** This routine is called when a commit occurs.
553 */ 563 */
554 void sqlite3CommitInternalChanges(sqlite3 *db){ 564 void sqlite3CommitInternalChanges(sqlite3 *db){
555 db->flags &= ~SQLITE_InternChanges; 565 db->flags &= ~SQLITE_InternChanges;
556 } 566 }
557 567
558 /* 568 /*
559 ** Delete memory allocated for the column names of a table or view (the 569 ** Delete memory allocated for the column names of a table or view (the
560 ** Table.aCol[] array). 570 ** Table.aCol[] array).
561 */ 571 */
562 static void sqliteDeleteColumnNames(sqlite3 *db, Table *pTable){ 572 void sqlite3DeleteColumnNames(sqlite3 *db, Table *pTable){
563 int i; 573 int i;
564 Column *pCol; 574 Column *pCol;
565 assert( pTable!=0 ); 575 assert( pTable!=0 );
566 if( (pCol = pTable->aCol)!=0 ){ 576 if( (pCol = pTable->aCol)!=0 ){
567 for(i=0; i<pTable->nCol; i++, pCol++){ 577 for(i=0; i<pTable->nCol; i++, pCol++){
568 sqlite3DbFree(db, pCol->zName); 578 sqlite3DbFree(db, pCol->zName);
569 sqlite3ExprDelete(db, pCol->pDflt); 579 sqlite3ExprDelete(db, pCol->pDflt);
570 sqlite3DbFree(db, pCol->zDflt); 580 sqlite3DbFree(db, pCol->zDflt);
571 sqlite3DbFree(db, pCol->zType); 581 sqlite3DbFree(db, pCol->zType);
572 sqlite3DbFree(db, pCol->zColl); 582 sqlite3DbFree(db, pCol->zColl);
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
619 assert( pOld==pIndex || pOld==0 ); 629 assert( pOld==pIndex || pOld==0 );
620 } 630 }
621 freeIndex(db, pIndex); 631 freeIndex(db, pIndex);
622 } 632 }
623 633
624 /* Delete any foreign keys attached to this table. */ 634 /* Delete any foreign keys attached to this table. */
625 sqlite3FkDelete(db, pTable); 635 sqlite3FkDelete(db, pTable);
626 636
627 /* Delete the Table structure itself. 637 /* Delete the Table structure itself.
628 */ 638 */
629 sqliteDeleteColumnNames(db, pTable); 639 sqlite3DeleteColumnNames(db, pTable);
630 sqlite3DbFree(db, pTable->zName); 640 sqlite3DbFree(db, pTable->zName);
631 sqlite3DbFree(db, pTable->zColAff); 641 sqlite3DbFree(db, pTable->zColAff);
632 sqlite3SelectDelete(db, pTable->pSelect); 642 sqlite3SelectDelete(db, pTable->pSelect);
633 #ifndef SQLITE_OMIT_CHECK
634 sqlite3ExprListDelete(db, pTable->pCheck); 643 sqlite3ExprListDelete(db, pTable->pCheck);
635 #endif
636 #ifndef SQLITE_OMIT_VIRTUALTABLE 644 #ifndef SQLITE_OMIT_VIRTUALTABLE
637 sqlite3VtabClear(db, pTable); 645 sqlite3VtabClear(db, pTable);
638 #endif 646 #endif
639 sqlite3DbFree(db, pTable); 647 sqlite3DbFree(db, pTable);
640 648
641 /* Verify that no lookaside memory was used by schema tables */ 649 /* Verify that no lookaside memory was used by schema tables */
642 assert( nLookaside==0 || nLookaside==db->lookaside.nOut ); 650 assert( nLookaside==0 || nLookaside==db->lookaside.nOut );
643 } 651 }
644 652
645 /* 653 /*
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
755 Token *pName1, /* The "xxx" in the name "xxx.yyy" or "xxx" */ 763 Token *pName1, /* The "xxx" in the name "xxx.yyy" or "xxx" */
756 Token *pName2, /* The "yyy" in the name "xxx.yyy" */ 764 Token *pName2, /* The "yyy" in the name "xxx.yyy" */
757 Token **pUnqual /* Write the unqualified object name here */ 765 Token **pUnqual /* Write the unqualified object name here */
758 ){ 766 ){
759 int iDb; /* Database holding the object */ 767 int iDb; /* Database holding the object */
760 sqlite3 *db = pParse->db; 768 sqlite3 *db = pParse->db;
761 769
762 if( ALWAYS(pName2!=0) && pName2->n>0 ){ 770 if( ALWAYS(pName2!=0) && pName2->n>0 ){
763 if( db->init.busy ) { 771 if( db->init.busy ) {
764 sqlite3ErrorMsg(pParse, "corrupt database"); 772 sqlite3ErrorMsg(pParse, "corrupt database");
765 pParse->nErr++;
766 return -1; 773 return -1;
767 } 774 }
768 *pUnqual = pName2; 775 *pUnqual = pName2;
769 iDb = sqlite3FindDb(db, pName1); 776 iDb = sqlite3FindDb(db, pName1);
770 if( iDb<0 ){ 777 if( iDb<0 ){
771 sqlite3ErrorMsg(pParse, "unknown database %T", pName1); 778 sqlite3ErrorMsg(pParse, "unknown database %T", pName1);
772 pParse->nErr++;
773 return -1; 779 return -1;
774 } 780 }
775 }else{ 781 }else{
776 assert( db->init.iDb==0 || db->init.busy ); 782 assert( db->init.iDb==0 || db->init.busy );
777 iDb = db->init.iDb; 783 iDb = db->init.iDb;
778 *pUnqual = pName1; 784 *pUnqual = pName1;
779 } 785 }
780 return iDb; 786 return iDb;
781 } 787 }
782 788
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
921 if( !IN_DECLARE_VTAB ){ 927 if( !IN_DECLARE_VTAB ){
922 char *zDb = db->aDb[iDb].zName; 928 char *zDb = db->aDb[iDb].zName;
923 if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){ 929 if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){
924 goto begin_table_error; 930 goto begin_table_error;
925 } 931 }
926 pTable = sqlite3FindTable(db, zName, zDb); 932 pTable = sqlite3FindTable(db, zName, zDb);
927 if( pTable ){ 933 if( pTable ){
928 if( !noErr ){ 934 if( !noErr ){
929 sqlite3ErrorMsg(pParse, "table %T already exists", pName); 935 sqlite3ErrorMsg(pParse, "table %T already exists", pName);
930 }else{ 936 }else{
931 assert( !db->init.busy ); 937 assert( !db->init.busy || CORRUPT_DB );
932 sqlite3CodeVerifySchema(pParse, iDb); 938 sqlite3CodeVerifySchema(pParse, iDb);
933 } 939 }
934 goto begin_table_error; 940 goto begin_table_error;
935 } 941 }
936 if( sqlite3FindIndex(db, zName, zDb)!=0 ){ 942 if( sqlite3FindIndex(db, zName, zDb)!=0 ){
937 sqlite3ErrorMsg(pParse, "there is already an index named %s", zName); 943 sqlite3ErrorMsg(pParse, "there is already an index named %s", zName);
938 goto begin_table_error; 944 goto begin_table_error;
939 } 945 }
940 } 946 }
941 947
(...skipping 25 matching lines...) Expand all
967 973
968 /* Begin generating the code that will insert the table record into 974 /* Begin generating the code that will insert the table record into
969 ** the SQLITE_MASTER table. Note in particular that we must go ahead 975 ** the SQLITE_MASTER table. Note in particular that we must go ahead
970 ** and allocate the record number for the table entry now. Before any 976 ** and allocate the record number for the table entry now. Before any
971 ** PRIMARY KEY or UNIQUE keywords are parsed. Those keywords will cause 977 ** PRIMARY KEY or UNIQUE keywords are parsed. Those keywords will cause
972 ** indices to be created and the table record must come before the 978 ** indices to be created and the table record must come before the
973 ** indices. Hence, the record number for the table must be allocated 979 ** indices. Hence, the record number for the table must be allocated
974 ** now. 980 ** now.
975 */ 981 */
976 if( !db->init.busy && (v = sqlite3GetVdbe(pParse))!=0 ){ 982 if( !db->init.busy && (v = sqlite3GetVdbe(pParse))!=0 ){
977 int j1; 983 int addr1;
978 int fileFormat; 984 int fileFormat;
979 int reg1, reg2, reg3; 985 int reg1, reg2, reg3;
980 sqlite3BeginWriteOperation(pParse, 0, iDb); 986 /* nullRow[] is an OP_Record encoding of a row containing 5 NULLs */
987 static const char nullRow[] = { 6, 0, 0, 0, 0, 0 };
988 sqlite3BeginWriteOperation(pParse, 1, iDb);
981 989
982 #ifndef SQLITE_OMIT_VIRTUALTABLE 990 #ifndef SQLITE_OMIT_VIRTUALTABLE
983 if( isVirtual ){ 991 if( isVirtual ){
984 sqlite3VdbeAddOp0(v, OP_VBegin); 992 sqlite3VdbeAddOp0(v, OP_VBegin);
985 } 993 }
986 #endif 994 #endif
987 995
988 /* If the file format and encoding in the database have not been set, 996 /* If the file format and encoding in the database have not been set,
989 ** set them now. 997 ** set them now.
990 */ 998 */
991 reg1 = pParse->regRowid = ++pParse->nMem; 999 reg1 = pParse->regRowid = ++pParse->nMem;
992 reg2 = pParse->regRoot = ++pParse->nMem; 1000 reg2 = pParse->regRoot = ++pParse->nMem;
993 reg3 = ++pParse->nMem; 1001 reg3 = ++pParse->nMem;
994 sqlite3VdbeAddOp3(v, OP_ReadCookie, iDb, reg3, BTREE_FILE_FORMAT); 1002 sqlite3VdbeAddOp3(v, OP_ReadCookie, iDb, reg3, BTREE_FILE_FORMAT);
995 sqlite3VdbeUsesBtree(v, iDb); 1003 sqlite3VdbeUsesBtree(v, iDb);
996 j1 = sqlite3VdbeAddOp1(v, OP_If, reg3); VdbeCoverage(v); 1004 addr1 = sqlite3VdbeAddOp1(v, OP_If, reg3); VdbeCoverage(v);
997 fileFormat = (db->flags & SQLITE_LegacyFileFmt)!=0 ? 1005 fileFormat = (db->flags & SQLITE_LegacyFileFmt)!=0 ?
998 1 : SQLITE_MAX_FILE_FORMAT; 1006 1 : SQLITE_MAX_FILE_FORMAT;
999 sqlite3VdbeAddOp2(v, OP_Integer, fileFormat, reg3); 1007 sqlite3VdbeAddOp2(v, OP_Integer, fileFormat, reg3);
1000 sqlite3VdbeAddOp3(v, OP_SetCookie, iDb, BTREE_FILE_FORMAT, reg3); 1008 sqlite3VdbeAddOp3(v, OP_SetCookie, iDb, BTREE_FILE_FORMAT, reg3);
1001 sqlite3VdbeAddOp2(v, OP_Integer, ENC(db), reg3); 1009 sqlite3VdbeAddOp2(v, OP_Integer, ENC(db), reg3);
1002 sqlite3VdbeAddOp3(v, OP_SetCookie, iDb, BTREE_TEXT_ENCODING, reg3); 1010 sqlite3VdbeAddOp3(v, OP_SetCookie, iDb, BTREE_TEXT_ENCODING, reg3);
1003 sqlite3VdbeJumpHere(v, j1); 1011 sqlite3VdbeJumpHere(v, addr1);
1004 1012
1005 /* This just creates a place-holder record in the sqlite_master table. 1013 /* This just creates a place-holder record in the sqlite_master table.
1006 ** The record created does not contain anything yet. It will be replaced 1014 ** The record created does not contain anything yet. It will be replaced
1007 ** by the real entry in code generated at sqlite3EndTable(). 1015 ** by the real entry in code generated at sqlite3EndTable().
1008 ** 1016 **
1009 ** The rowid for the new entry is left in register pParse->regRowid. 1017 ** The rowid for the new entry is left in register pParse->regRowid.
1010 ** The root page number of the new table is left in reg pParse->regRoot. 1018 ** The root page number of the new table is left in reg pParse->regRoot.
1011 ** The rowid and root page number values are needed by the code that 1019 ** The rowid and root page number values are needed by the code that
1012 ** sqlite3EndTable will generate. 1020 ** sqlite3EndTable will generate.
1013 */ 1021 */
1014 #if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE) 1022 #if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE)
1015 if( isView || isVirtual ){ 1023 if( isView || isVirtual ){
1016 sqlite3VdbeAddOp2(v, OP_Integer, 0, reg2); 1024 sqlite3VdbeAddOp2(v, OP_Integer, 0, reg2);
1017 }else 1025 }else
1018 #endif 1026 #endif
1019 { 1027 {
1020 pParse->addrCrTab = sqlite3VdbeAddOp2(v, OP_CreateTable, iDb, reg2); 1028 pParse->addrCrTab = sqlite3VdbeAddOp2(v, OP_CreateTable, iDb, reg2);
1021 } 1029 }
1022 sqlite3OpenMasterTable(pParse, iDb); 1030 sqlite3OpenMasterTable(pParse, iDb);
1023 sqlite3VdbeAddOp2(v, OP_NewRowid, 0, reg1); 1031 sqlite3VdbeAddOp2(v, OP_NewRowid, 0, reg1);
1024 sqlite3VdbeAddOp2(v, OP_Null, 0, reg3); 1032 sqlite3VdbeAddOp4(v, OP_Blob, 6, reg3, 0, nullRow, P4_STATIC);
1025 sqlite3VdbeAddOp3(v, OP_Insert, 0, reg3, reg1); 1033 sqlite3VdbeAddOp3(v, OP_Insert, 0, reg3, reg1);
1026 sqlite3VdbeChangeP5(v, OPFLAG_APPEND); 1034 sqlite3VdbeChangeP5(v, OPFLAG_APPEND);
1027 sqlite3VdbeAddOp0(v, OP_Close); 1035 sqlite3VdbeAddOp0(v, OP_Close);
1028 } 1036 }
1029 1037
1030 /* Normal (non-error) return. */ 1038 /* Normal (non-error) return. */
1031 return; 1039 return;
1032 1040
1033 /* If an error occurs, we jump here */ 1041 /* If an error occurs, we jump here */
1034 begin_table_error: 1042 begin_table_error:
1035 sqlite3DbFree(db, zName); 1043 sqlite3DbFree(db, zName);
1036 return; 1044 return;
1037 } 1045 }
1038 1046
1039 /* 1047 /* Set properties of a table column based on the (magical)
1040 ** This macro is used to compare two strings in a case-insensitive manner. 1048 ** name of the column.
1041 ** It is slightly faster than calling sqlite3StrICmp() directly, but
1042 ** produces larger code.
1043 **
1044 ** WARNING: This macro is not compatible with the strcmp() family. It
1045 ** returns true if the two strings are equal, otherwise false.
1046 */ 1049 */
1047 #define STRICMP(x, y) (\ 1050 #if SQLITE_ENABLE_HIDDEN_COLUMNS
1048 sqlite3UpperToLower[*(unsigned char *)(x)]== \ 1051 void sqlite3ColumnPropertiesFromName(Table *pTab, Column *pCol){
1049 sqlite3UpperToLower[*(unsigned char *)(y)] \ 1052 if( sqlite3_strnicmp(pCol->zName, "__hidden__", 10)==0 ){
1050 && sqlite3StrICmp((x)+1,(y)+1)==0 ) 1053 pCol->colFlags |= COLFLAG_HIDDEN;
1054 }else if( pTab && pCol!=pTab->aCol && (pCol[-1].colFlags & COLFLAG_HIDDEN) ){
1055 pTab->tabFlags |= TF_OOOHidden;
1056 }
1057 }
1058 #endif
1059
1051 1060
1052 /* 1061 /*
1053 ** Add a new column to the table currently being constructed. 1062 ** Add a new column to the table currently being constructed.
1054 ** 1063 **
1055 ** The parser calls this routine once for each column declaration 1064 ** The parser calls this routine once for each column declaration
1056 ** in a CREATE TABLE statement. sqlite3StartTable() gets called 1065 ** in a CREATE TABLE statement. sqlite3StartTable() gets called
1057 ** first to get things going. Then this routine is called for each 1066 ** first to get things going. Then this routine is called for each
1058 ** column. 1067 ** column.
1059 */ 1068 */
1060 void sqlite3AddColumn(Parse *pParse, Token *pName){ 1069 void sqlite3AddColumn(Parse *pParse, Token *pName){
1061 Table *p; 1070 Table *p;
1062 int i; 1071 int i;
1063 char *z; 1072 char *z;
1064 Column *pCol; 1073 Column *pCol;
1065 sqlite3 *db = pParse->db; 1074 sqlite3 *db = pParse->db;
1066 if( (p = pParse->pNewTable)==0 ) return; 1075 if( (p = pParse->pNewTable)==0 ) return;
1067 #if SQLITE_MAX_COLUMN 1076 #if SQLITE_MAX_COLUMN
1068 if( p->nCol+1>db->aLimit[SQLITE_LIMIT_COLUMN] ){ 1077 if( p->nCol+1>db->aLimit[SQLITE_LIMIT_COLUMN] ){
1069 sqlite3ErrorMsg(pParse, "too many columns on %s", p->zName); 1078 sqlite3ErrorMsg(pParse, "too many columns on %s", p->zName);
1070 return; 1079 return;
1071 } 1080 }
1072 #endif 1081 #endif
1073 z = sqlite3NameFromToken(db, pName); 1082 z = sqlite3NameFromToken(db, pName);
1074 if( z==0 ) return; 1083 if( z==0 ) return;
1075 for(i=0; i<p->nCol; i++){ 1084 for(i=0; i<p->nCol; i++){
1076 if( STRICMP(z, p->aCol[i].zName) ){ 1085 if( sqlite3_stricmp(z, p->aCol[i].zName)==0 ){
1077 sqlite3ErrorMsg(pParse, "duplicate column name: %s", z); 1086 sqlite3ErrorMsg(pParse, "duplicate column name: %s", z);
1078 sqlite3DbFree(db, z); 1087 sqlite3DbFree(db, z);
1079 return; 1088 return;
1080 } 1089 }
1081 } 1090 }
1082 if( (p->nCol & 0x7)==0 ){ 1091 if( (p->nCol & 0x7)==0 ){
1083 Column *aNew; 1092 Column *aNew;
1084 aNew = sqlite3DbRealloc(db,p->aCol,(p->nCol+8)*sizeof(p->aCol[0])); 1093 aNew = sqlite3DbRealloc(db,p->aCol,(p->nCol+8)*sizeof(p->aCol[0]));
1085 if( aNew==0 ){ 1094 if( aNew==0 ){
1086 sqlite3DbFree(db, z); 1095 sqlite3DbFree(db, z);
1087 return; 1096 return;
1088 } 1097 }
1089 p->aCol = aNew; 1098 p->aCol = aNew;
1090 } 1099 }
1091 pCol = &p->aCol[p->nCol]; 1100 pCol = &p->aCol[p->nCol];
1092 memset(pCol, 0, sizeof(p->aCol[0])); 1101 memset(pCol, 0, sizeof(p->aCol[0]));
1093 pCol->zName = z; 1102 pCol->zName = z;
1103 sqlite3ColumnPropertiesFromName(p, pCol);
1094 1104
1095 /* If there is no type specified, columns have the default affinity 1105 /* If there is no type specified, columns have the default affinity
1096 ** 'NONE'. If there is a type specified, then sqlite3AddColumnType() will 1106 ** 'BLOB'. If there is a type specified, then sqlite3AddColumnType() will
1097 ** be called next to set pCol->affinity correctly. 1107 ** be called next to set pCol->affinity correctly.
1098 */ 1108 */
1099 pCol->affinity = SQLITE_AFF_NONE; 1109 pCol->affinity = SQLITE_AFF_BLOB;
1100 pCol->szEst = 1; 1110 pCol->szEst = 1;
1101 p->nCol++; 1111 p->nCol++;
1102 } 1112 }
1103 1113
1104 /* 1114 /*
1105 ** This routine is called by the parser while in the middle of 1115 ** This routine is called by the parser while in the middle of
1106 ** parsing a CREATE TABLE statement. A "NOT NULL" constraint has 1116 ** parsing a CREATE TABLE statement. A "NOT NULL" constraint has
1107 ** been seen on a column. This routine sets the notNull flag on 1117 ** been seen on a column. This routine sets the notNull flag on
1108 ** the column currently under construction. 1118 ** the column currently under construction.
1109 */ 1119 */
(...skipping 14 matching lines...) Expand all
1124 ** more than one of the substrings, entries toward the top of 1134 ** more than one of the substrings, entries toward the top of
1125 ** the table take priority. For example, if zType is 'BLOBINT', 1135 ** the table take priority. For example, if zType is 'BLOBINT',
1126 ** SQLITE_AFF_INTEGER is returned. 1136 ** SQLITE_AFF_INTEGER is returned.
1127 ** 1137 **
1128 ** Substring | Affinity 1138 ** Substring | Affinity
1129 ** -------------------------------- 1139 ** --------------------------------
1130 ** 'INT' | SQLITE_AFF_INTEGER 1140 ** 'INT' | SQLITE_AFF_INTEGER
1131 ** 'CHAR' | SQLITE_AFF_TEXT 1141 ** 'CHAR' | SQLITE_AFF_TEXT
1132 ** 'CLOB' | SQLITE_AFF_TEXT 1142 ** 'CLOB' | SQLITE_AFF_TEXT
1133 ** 'TEXT' | SQLITE_AFF_TEXT 1143 ** 'TEXT' | SQLITE_AFF_TEXT
1134 ** 'BLOB' | SQLITE_AFF_NONE 1144 ** 'BLOB' | SQLITE_AFF_BLOB
1135 ** 'REAL' | SQLITE_AFF_REAL 1145 ** 'REAL' | SQLITE_AFF_REAL
1136 ** 'FLOA' | SQLITE_AFF_REAL 1146 ** 'FLOA' | SQLITE_AFF_REAL
1137 ** 'DOUB' | SQLITE_AFF_REAL 1147 ** 'DOUB' | SQLITE_AFF_REAL
1138 ** 1148 **
1139 ** If none of the substrings in the above table are found, 1149 ** If none of the substrings in the above table are found,
1140 ** SQLITE_AFF_NUMERIC is returned. 1150 ** SQLITE_AFF_NUMERIC is returned.
1141 */ 1151 */
1142 char sqlite3AffinityType(const char *zIn, u8 *pszEst){ 1152 char sqlite3AffinityType(const char *zIn, u8 *pszEst){
1143 u32 h = 0; 1153 u32 h = 0;
1144 char aff = SQLITE_AFF_NUMERIC; 1154 char aff = SQLITE_AFF_NUMERIC;
1145 const char *zChar = 0; 1155 const char *zChar = 0;
1146 1156
1147 if( zIn==0 ) return aff; 1157 if( zIn==0 ) return aff;
1148 while( zIn[0] ){ 1158 while( zIn[0] ){
1149 h = (h<<8) + sqlite3UpperToLower[(*zIn)&0xff]; 1159 h = (h<<8) + sqlite3UpperToLower[(*zIn)&0xff];
1150 zIn++; 1160 zIn++;
1151 if( h==(('c'<<24)+('h'<<16)+('a'<<8)+'r') ){ /* CHAR */ 1161 if( h==(('c'<<24)+('h'<<16)+('a'<<8)+'r') ){ /* CHAR */
1152 aff = SQLITE_AFF_TEXT; 1162 aff = SQLITE_AFF_TEXT;
1153 zChar = zIn; 1163 zChar = zIn;
1154 }else if( h==(('c'<<24)+('l'<<16)+('o'<<8)+'b') ){ /* CLOB */ 1164 }else if( h==(('c'<<24)+('l'<<16)+('o'<<8)+'b') ){ /* CLOB */
1155 aff = SQLITE_AFF_TEXT; 1165 aff = SQLITE_AFF_TEXT;
1156 }else if( h==(('t'<<24)+('e'<<16)+('x'<<8)+'t') ){ /* TEXT */ 1166 }else if( h==(('t'<<24)+('e'<<16)+('x'<<8)+'t') ){ /* TEXT */
1157 aff = SQLITE_AFF_TEXT; 1167 aff = SQLITE_AFF_TEXT;
1158 }else if( h==(('b'<<24)+('l'<<16)+('o'<<8)+'b') /* BLOB */ 1168 }else if( h==(('b'<<24)+('l'<<16)+('o'<<8)+'b') /* BLOB */
1159 && (aff==SQLITE_AFF_NUMERIC || aff==SQLITE_AFF_REAL) ){ 1169 && (aff==SQLITE_AFF_NUMERIC || aff==SQLITE_AFF_REAL) ){
1160 aff = SQLITE_AFF_NONE; 1170 aff = SQLITE_AFF_BLOB;
1161 if( zIn[0]=='(' ) zChar = zIn; 1171 if( zIn[0]=='(' ) zChar = zIn;
1162 #ifndef SQLITE_OMIT_FLOATING_POINT 1172 #ifndef SQLITE_OMIT_FLOATING_POINT
1163 }else if( h==(('r'<<24)+('e'<<16)+('a'<<8)+'l') /* REAL */ 1173 }else if( h==(('r'<<24)+('e'<<16)+('a'<<8)+'l') /* REAL */
1164 && aff==SQLITE_AFF_NUMERIC ){ 1174 && aff==SQLITE_AFF_NUMERIC ){
1165 aff = SQLITE_AFF_REAL; 1175 aff = SQLITE_AFF_REAL;
1166 }else if( h==(('f'<<24)+('l'<<16)+('o'<<8)+'a') /* FLOA */ 1176 }else if( h==(('f'<<24)+('l'<<16)+('o'<<8)+'a') /* FLOA */
1167 && aff==SQLITE_AFF_NUMERIC ){ 1177 && aff==SQLITE_AFF_NUMERIC ){
1168 aff = SQLITE_AFF_REAL; 1178 aff = SQLITE_AFF_REAL;
1169 }else if( h==(('d'<<24)+('o'<<16)+('u'<<8)+'b') /* DOUB */ 1179 }else if( h==(('d'<<24)+('o'<<16)+('u'<<8)+'b') /* DOUB */
1170 && aff==SQLITE_AFF_NUMERIC ){ 1180 && aff==SQLITE_AFF_NUMERIC ){
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
1210 ** that contains the typename of the column and store that string 1220 ** that contains the typename of the column and store that string
1211 ** in zType. 1221 ** in zType.
1212 */ 1222 */
1213 void sqlite3AddColumnType(Parse *pParse, Token *pType){ 1223 void sqlite3AddColumnType(Parse *pParse, Token *pType){
1214 Table *p; 1224 Table *p;
1215 Column *pCol; 1225 Column *pCol;
1216 1226
1217 p = pParse->pNewTable; 1227 p = pParse->pNewTable;
1218 if( p==0 || NEVER(p->nCol<1) ) return; 1228 if( p==0 || NEVER(p->nCol<1) ) return;
1219 pCol = &p->aCol[p->nCol-1]; 1229 pCol = &p->aCol[p->nCol-1];
1220 assert( pCol->zType==0 ); 1230 assert( pCol->zType==0 || CORRUPT_DB );
1231 sqlite3DbFree(pParse->db, pCol->zType);
1221 pCol->zType = sqlite3NameFromToken(pParse->db, pType); 1232 pCol->zType = sqlite3NameFromToken(pParse->db, pType);
1222 pCol->affinity = sqlite3AffinityType(pCol->zType, &pCol->szEst); 1233 pCol->affinity = sqlite3AffinityType(pCol->zType, &pCol->szEst);
1223 } 1234 }
1224 1235
1225 /* 1236 /*
1226 ** The expression is the default value for the most recently added column 1237 ** The expression is the default value for the most recently added column
1227 ** of the table currently under construction. 1238 ** of the table currently under construction.
1228 ** 1239 **
1229 ** Default value expressions must be constant. Raise an exception if this 1240 ** Default value expressions must be constant. Raise an exception if this
1230 ** is not the case. 1241 ** is not the case.
(...skipping 20 matching lines...) Expand all
1251 pCol->pDflt = sqlite3ExprDup(db, pSpan->pExpr, EXPRDUP_REDUCE); 1262 pCol->pDflt = sqlite3ExprDup(db, pSpan->pExpr, EXPRDUP_REDUCE);
1252 sqlite3DbFree(db, pCol->zDflt); 1263 sqlite3DbFree(db, pCol->zDflt);
1253 pCol->zDflt = sqlite3DbStrNDup(db, (char*)pSpan->zStart, 1264 pCol->zDflt = sqlite3DbStrNDup(db, (char*)pSpan->zStart,
1254 (int)(pSpan->zEnd - pSpan->zStart)); 1265 (int)(pSpan->zEnd - pSpan->zStart));
1255 } 1266 }
1256 } 1267 }
1257 sqlite3ExprDelete(db, pSpan->pExpr); 1268 sqlite3ExprDelete(db, pSpan->pExpr);
1258 } 1269 }
1259 1270
1260 /* 1271 /*
1272 ** Backwards Compatibility Hack:
1273 **
1274 ** Historical versions of SQLite accepted strings as column names in
1275 ** indexes and PRIMARY KEY constraints and in UNIQUE constraints. Example:
1276 **
1277 ** CREATE TABLE xyz(a,b,c,d,e,PRIMARY KEY('a'),UNIQUE('b','c' COLLATE trim)
1278 ** CREATE INDEX abc ON xyz('c','d' DESC,'e' COLLATE nocase DESC);
1279 **
1280 ** This is goofy. But to preserve backwards compatibility we continue to
1281 ** accept it. This routine does the necessary conversion. It converts
1282 ** the expression given in its argument from a TK_STRING into a TK_ID
1283 ** if the expression is just a TK_STRING with an optional COLLATE clause.
1284 ** If the epxression is anything other than TK_STRING, the expression is
1285 ** unchanged.
1286 */
1287 static void sqlite3StringToId(Expr *p){
1288 if( p->op==TK_STRING ){
1289 p->op = TK_ID;
1290 }else if( p->op==TK_COLLATE && p->pLeft->op==TK_STRING ){
1291 p->pLeft->op = TK_ID;
1292 }
1293 }
1294
1295 /*
1261 ** Designate the PRIMARY KEY for the table. pList is a list of names 1296 ** Designate the PRIMARY KEY for the table. pList is a list of names
1262 ** of columns that form the primary key. If pList is NULL, then the 1297 ** of columns that form the primary key. If pList is NULL, then the
1263 ** most recently added column of the table is the primary key. 1298 ** most recently added column of the table is the primary key.
1264 ** 1299 **
1265 ** A table can have at most one primary key. If the table already has 1300 ** A table can have at most one primary key. If the table already has
1266 ** a primary key (and this is the second primary key) then create an 1301 ** a primary key (and this is the second primary key) then create an
1267 ** error. 1302 ** error.
1268 ** 1303 **
1269 ** If the PRIMARY KEY is on a single column whose datatype is INTEGER, 1304 ** If the PRIMARY KEY is on a single column whose datatype is INTEGER,
1270 ** then we will try to use that column as the rowid. Set the Table.iPKey 1305 ** then we will try to use that column as the rowid. Set the Table.iPKey
(...skipping 23 matching lines...) Expand all
1294 } 1329 }
1295 pTab->tabFlags |= TF_HasPrimaryKey; 1330 pTab->tabFlags |= TF_HasPrimaryKey;
1296 if( pList==0 ){ 1331 if( pList==0 ){
1297 iCol = pTab->nCol - 1; 1332 iCol = pTab->nCol - 1;
1298 pTab->aCol[iCol].colFlags |= COLFLAG_PRIMKEY; 1333 pTab->aCol[iCol].colFlags |= COLFLAG_PRIMKEY;
1299 zType = pTab->aCol[iCol].zType; 1334 zType = pTab->aCol[iCol].zType;
1300 nTerm = 1; 1335 nTerm = 1;
1301 }else{ 1336 }else{
1302 nTerm = pList->nExpr; 1337 nTerm = pList->nExpr;
1303 for(i=0; i<nTerm; i++){ 1338 for(i=0; i<nTerm; i++){
1304 for(iCol=0; iCol<pTab->nCol; iCol++){ 1339 Expr *pCExpr = sqlite3ExprSkipCollate(pList->a[i].pExpr);
1305 if( sqlite3StrICmp(pList->a[i].zName, pTab->aCol[iCol].zName)==0 ){ 1340 assert( pCExpr!=0 );
1306 pTab->aCol[iCol].colFlags |= COLFLAG_PRIMKEY; 1341 sqlite3StringToId(pCExpr);
1307 zType = pTab->aCol[iCol].zType; 1342 if( pCExpr->op==TK_ID ){
1308 break; 1343 const char *zCName = pCExpr->u.zToken;
1344 for(iCol=0; iCol<pTab->nCol; iCol++){
1345 if( sqlite3StrICmp(zCName, pTab->aCol[iCol].zName)==0 ){
1346 pTab->aCol[iCol].colFlags |= COLFLAG_PRIMKEY;
1347 zType = pTab->aCol[iCol].zType;
1348 break;
1349 }
1309 } 1350 }
1310 } 1351 }
1311 } 1352 }
1312 } 1353 }
1313 if( nTerm==1 1354 if( nTerm==1
1314 && zType && sqlite3StrICmp(zType, "INTEGER")==0 1355 && zType && sqlite3StrICmp(zType, "INTEGER")==0
1315 && sortOrder==SQLITE_SO_ASC 1356 && sortOrder!=SQLITE_SO_DESC
1316 ){ 1357 ){
1317 pTab->iPKey = iCol; 1358 pTab->iPKey = iCol;
1318 pTab->keyConf = (u8)onError; 1359 pTab->keyConf = (u8)onError;
1319 assert( autoInc==0 || autoInc==1 ); 1360 assert( autoInc==0 || autoInc==1 );
1320 pTab->tabFlags |= autoInc*TF_Autoincrement; 1361 pTab->tabFlags |= autoInc*TF_Autoincrement;
1321 if( pList ) pParse->iPkSortOrder = pList->a[0].sortOrder; 1362 if( pList ) pParse->iPkSortOrder = pList->a[0].sortOrder;
1322 }else if( autoInc ){ 1363 }else if( autoInc ){
1323 #ifndef SQLITE_OMIT_AUTOINCREMENT 1364 #ifndef SQLITE_OMIT_AUTOINCREMENT
1324 sqlite3ErrorMsg(pParse, "AUTOINCREMENT is only allowed on an " 1365 sqlite3ErrorMsg(pParse, "AUTOINCREMENT is only allowed on an "
1325 "INTEGER PRIMARY KEY"); 1366 "INTEGER PRIMARY KEY");
1326 #endif 1367 #endif
1327 }else{ 1368 }else{
1328 Vdbe *v = pParse->pVdbe;
1329 Index *p; 1369 Index *p;
1330 if( v ) pParse->addrSkipPK = sqlite3VdbeAddOp0(v, OP_Noop);
1331 p = sqlite3CreateIndex(pParse, 0, 0, 0, pList, onError, 0, 1370 p = sqlite3CreateIndex(pParse, 0, 0, 0, pList, onError, 0,
1332 0, sortOrder, 0); 1371 0, sortOrder, 0);
1333 if( p ){ 1372 if( p ){
1334 p->idxType = SQLITE_IDXTYPE_PRIMARYKEY; 1373 p->idxType = SQLITE_IDXTYPE_PRIMARYKEY;
1335 if( v ) sqlite3VdbeJumpHere(v, pParse->addrSkipPK);
1336 } 1374 }
1337 pList = 0; 1375 pList = 0;
1338 } 1376 }
1339 1377
1340 primary_key_exit: 1378 primary_key_exit:
1341 sqlite3ExprListDelete(pParse->db, pList); 1379 sqlite3ExprListDelete(pParse->db, pList);
1342 return; 1380 return;
1343 } 1381 }
1344 1382
1345 /* 1383 /*
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
1544 if( zStmt==0 ){ 1582 if( zStmt==0 ){
1545 db->mallocFailed = 1; 1583 db->mallocFailed = 1;
1546 return 0; 1584 return 0;
1547 } 1585 }
1548 sqlite3_snprintf(n, zStmt, "CREATE TABLE "); 1586 sqlite3_snprintf(n, zStmt, "CREATE TABLE ");
1549 k = sqlite3Strlen30(zStmt); 1587 k = sqlite3Strlen30(zStmt);
1550 identPut(zStmt, &k, p->zName); 1588 identPut(zStmt, &k, p->zName);
1551 zStmt[k++] = '('; 1589 zStmt[k++] = '(';
1552 for(pCol=p->aCol, i=0; i<p->nCol; i++, pCol++){ 1590 for(pCol=p->aCol, i=0; i<p->nCol; i++, pCol++){
1553 static const char * const azType[] = { 1591 static const char * const azType[] = {
1554 /* SQLITE_AFF_NONE */ "", 1592 /* SQLITE_AFF_BLOB */ "",
1555 /* SQLITE_AFF_TEXT */ " TEXT", 1593 /* SQLITE_AFF_TEXT */ " TEXT",
1556 /* SQLITE_AFF_NUMERIC */ " NUM", 1594 /* SQLITE_AFF_NUMERIC */ " NUM",
1557 /* SQLITE_AFF_INTEGER */ " INT", 1595 /* SQLITE_AFF_INTEGER */ " INT",
1558 /* SQLITE_AFF_REAL */ " REAL" 1596 /* SQLITE_AFF_REAL */ " REAL"
1559 }; 1597 };
1560 int len; 1598 int len;
1561 const char *zType; 1599 const char *zType;
1562 1600
1563 sqlite3_snprintf(n-k, &zStmt[k], zSep); 1601 sqlite3_snprintf(n-k, &zStmt[k], zSep);
1564 k += sqlite3Strlen30(&zStmt[k]); 1602 k += sqlite3Strlen30(&zStmt[k]);
1565 zSep = zSep2; 1603 zSep = zSep2;
1566 identPut(zStmt, &k, pCol->zName); 1604 identPut(zStmt, &k, pCol->zName);
1567 assert( pCol->affinity-SQLITE_AFF_NONE >= 0 ); 1605 assert( pCol->affinity-SQLITE_AFF_BLOB >= 0 );
1568 assert( pCol->affinity-SQLITE_AFF_NONE < ArraySize(azType) ); 1606 assert( pCol->affinity-SQLITE_AFF_BLOB < ArraySize(azType) );
1569 testcase( pCol->affinity==SQLITE_AFF_NONE ); 1607 testcase( pCol->affinity==SQLITE_AFF_BLOB );
1570 testcase( pCol->affinity==SQLITE_AFF_TEXT ); 1608 testcase( pCol->affinity==SQLITE_AFF_TEXT );
1571 testcase( pCol->affinity==SQLITE_AFF_NUMERIC ); 1609 testcase( pCol->affinity==SQLITE_AFF_NUMERIC );
1572 testcase( pCol->affinity==SQLITE_AFF_INTEGER ); 1610 testcase( pCol->affinity==SQLITE_AFF_INTEGER );
1573 testcase( pCol->affinity==SQLITE_AFF_REAL ); 1611 testcase( pCol->affinity==SQLITE_AFF_REAL );
1574 1612
1575 zType = azType[pCol->affinity - SQLITE_AFF_NONE]; 1613 zType = azType[pCol->affinity - SQLITE_AFF_BLOB];
1576 len = sqlite3Strlen30(zType); 1614 len = sqlite3Strlen30(zType);
1577 assert( pCol->affinity==SQLITE_AFF_NONE 1615 assert( pCol->affinity==SQLITE_AFF_BLOB
1578 || pCol->affinity==sqlite3AffinityType(zType, 0) ); 1616 || pCol->affinity==sqlite3AffinityType(zType, 0) );
1579 memcpy(&zStmt[k], zType, len); 1617 memcpy(&zStmt[k], zType, len);
1580 k += len; 1618 k += len;
1581 assert( k<=n ); 1619 assert( k<=n );
1582 } 1620 }
1583 sqlite3_snprintf(n-k, &zStmt[k], "%s", zEnd); 1621 sqlite3_snprintf(n-k, &zStmt[k], "%s", zEnd);
1584 return zStmt; 1622 return zStmt;
1585 } 1623 }
1586 1624
1587 /* 1625 /*
1588 ** Resize an Index object to hold N columns total. Return SQLITE_OK 1626 ** Resize an Index object to hold N columns total. Return SQLITE_OK
1589 ** on success and SQLITE_NOMEM on an OOM error. 1627 ** on success and SQLITE_NOMEM on an OOM error.
1590 */ 1628 */
1591 static int resizeIndexObject(sqlite3 *db, Index *pIdx, int N){ 1629 static int resizeIndexObject(sqlite3 *db, Index *pIdx, int N){
1592 char *zExtra; 1630 char *zExtra;
1593 int nByte; 1631 int nByte;
1594 if( pIdx->nColumn>=N ) return SQLITE_OK; 1632 if( pIdx->nColumn>=N ) return SQLITE_OK;
1595 assert( pIdx->isResized==0 ); 1633 assert( pIdx->isResized==0 );
1596 nByte = (sizeof(char*) + sizeof(i16) + 1)*N; 1634 nByte = (sizeof(char*) + sizeof(i16) + 1)*N;
1597 zExtra = sqlite3DbMallocZero(db, nByte); 1635 zExtra = sqlite3DbMallocZero(db, nByte);
1598 if( zExtra==0 ) return SQLITE_NOMEM; 1636 if( zExtra==0 ) return SQLITE_NOMEM;
1599 memcpy(zExtra, pIdx->azColl, sizeof(char*)*pIdx->nColumn); 1637 memcpy(zExtra, pIdx->azColl, sizeof(char*)*pIdx->nColumn);
1600 pIdx->azColl = (char**)zExtra; 1638 pIdx->azColl = (const char**)zExtra;
1601 zExtra += sizeof(char*)*N; 1639 zExtra += sizeof(char*)*N;
1602 memcpy(zExtra, pIdx->aiColumn, sizeof(i16)*pIdx->nColumn); 1640 memcpy(zExtra, pIdx->aiColumn, sizeof(i16)*pIdx->nColumn);
1603 pIdx->aiColumn = (i16*)zExtra; 1641 pIdx->aiColumn = (i16*)zExtra;
1604 zExtra += sizeof(i16)*N; 1642 zExtra += sizeof(i16)*N;
1605 memcpy(zExtra, pIdx->aSortOrder, pIdx->nColumn); 1643 memcpy(zExtra, pIdx->aSortOrder, pIdx->nColumn);
1606 pIdx->aSortOrder = (u8*)zExtra; 1644 pIdx->aSortOrder = (u8*)zExtra;
1607 pIdx->nColumn = N; 1645 pIdx->nColumn = N;
1608 pIdx->isResized = 1; 1646 pIdx->isResized = 1;
1609 return SQLITE_OK; 1647 return SQLITE_OK;
1610 } 1648 }
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
1675 int i, j; 1713 int i, j;
1676 sqlite3 *db = pParse->db; 1714 sqlite3 *db = pParse->db;
1677 Vdbe *v = pParse->pVdbe; 1715 Vdbe *v = pParse->pVdbe;
1678 1716
1679 /* Convert the OP_CreateTable opcode that would normally create the 1717 /* Convert the OP_CreateTable opcode that would normally create the
1680 ** root-page for the table into an OP_CreateIndex opcode. The index 1718 ** root-page for the table into an OP_CreateIndex opcode. The index
1681 ** created will become the PRIMARY KEY index. 1719 ** created will become the PRIMARY KEY index.
1682 */ 1720 */
1683 if( pParse->addrCrTab ){ 1721 if( pParse->addrCrTab ){
1684 assert( v ); 1722 assert( v );
1685 sqlite3VdbeGetOp(v, pParse->addrCrTab)->opcode = OP_CreateIndex; 1723 sqlite3VdbeChangeOpcode(v, pParse->addrCrTab, OP_CreateIndex);
1686 }
1687
1688 /* Bypass the creation of the PRIMARY KEY btree and the sqlite_master
1689 ** table entry.
1690 */
1691 if( pParse->addrSkipPK ){
1692 assert( v );
1693 sqlite3VdbeGetOp(v, pParse->addrSkipPK)->opcode = OP_Goto;
1694 } 1724 }
1695 1725
1696 /* Locate the PRIMARY KEY index. Or, if this table was originally 1726 /* Locate the PRIMARY KEY index. Or, if this table was originally
1697 ** an INTEGER PRIMARY KEY table, create a new PRIMARY KEY index. 1727 ** an INTEGER PRIMARY KEY table, create a new PRIMARY KEY index.
1698 */ 1728 */
1699 if( pTab->iPKey>=0 ){ 1729 if( pTab->iPKey>=0 ){
1700 ExprList *pList; 1730 ExprList *pList;
1701 pList = sqlite3ExprListAppend(pParse, 0, 0); 1731 Token ipkToken;
1732 ipkToken.z = pTab->aCol[pTab->iPKey].zName;
1733 ipkToken.n = sqlite3Strlen30(ipkToken.z);
1734 pList = sqlite3ExprListAppend(pParse, 0,
1735 sqlite3ExprAlloc(db, TK_ID, &ipkToken, 0));
1702 if( pList==0 ) return; 1736 if( pList==0 ) return;
1703 pList->a[0].zName = sqlite3DbStrDup(pParse->db,
1704 pTab->aCol[pTab->iPKey].zName);
1705 pList->a[0].sortOrder = pParse->iPkSortOrder; 1737 pList->a[0].sortOrder = pParse->iPkSortOrder;
1706 assert( pParse->pNewTable==pTab ); 1738 assert( pParse->pNewTable==pTab );
1707 pPk = sqlite3CreateIndex(pParse, 0, 0, 0, pList, pTab->keyConf, 0, 0, 0, 0); 1739 pPk = sqlite3CreateIndex(pParse, 0, 0, 0, pList, pTab->keyConf, 0, 0, 0, 0);
1708 if( pPk==0 ) return; 1740 if( pPk==0 ) return;
1709 pPk->idxType = SQLITE_IDXTYPE_PRIMARYKEY; 1741 pPk->idxType = SQLITE_IDXTYPE_PRIMARYKEY;
1710 pTab->iPKey = -1; 1742 pTab->iPKey = -1;
1711 }else{ 1743 }else{
1712 pPk = sqlite3PrimaryKeyIndex(pTab); 1744 pPk = sqlite3PrimaryKeyIndex(pTab);
1745
1746 /* Bypass the creation of the PRIMARY KEY btree and the sqlite_master
1747 ** table entry. This is only required if currently generating VDBE
1748 ** code for a CREATE TABLE (not when parsing one as part of reading
1749 ** a database schema). */
1750 if( v ){
1751 assert( db->init.busy==0 );
1752 sqlite3VdbeChangeOpcode(v, pPk->tnum, OP_Goto);
1753 }
1754
1755 /*
1756 ** Remove all redundant columns from the PRIMARY KEY. For example, change
1757 ** "PRIMARY KEY(a,b,a,b,c,b,c,d)" into just "PRIMARY KEY(a,b,c,d)". Later
1758 ** code assumes the PRIMARY KEY contains no repeated columns.
1759 */
1760 for(i=j=1; i<pPk->nKeyCol; i++){
1761 if( hasColumn(pPk->aiColumn, j, pPk->aiColumn[i]) ){
1762 pPk->nColumn--;
1763 }else{
1764 pPk->aiColumn[j++] = pPk->aiColumn[i];
1765 }
1766 }
1767 pPk->nKeyCol = j;
1713 } 1768 }
1714 pPk->isCovering = 1; 1769 pPk->isCovering = 1;
1715 assert( pPk!=0 ); 1770 assert( pPk!=0 );
1716 nPk = pPk->nKeyCol; 1771 nPk = pPk->nKeyCol;
1717 1772
1718 /* Make sure every column of the PRIMARY KEY is NOT NULL */ 1773 /* Make sure every column of the PRIMARY KEY is NOT NULL. (Except,
1719 for(i=0; i<nPk; i++){ 1774 ** do not enforce this for imposter tables.) */
1720 pTab->aCol[pPk->aiColumn[i]].notNull = 1; 1775 if( !db->init.imposterTable ){
1776 for(i=0; i<nPk; i++){
1777 pTab->aCol[pPk->aiColumn[i]].notNull = OE_Abort;
1778 }
1779 pPk->uniqNotNull = 1;
1721 } 1780 }
1722 pPk->uniqNotNull = 1;
1723 1781
1724 /* The root page of the PRIMARY KEY is the table root page */ 1782 /* The root page of the PRIMARY KEY is the table root page */
1725 pPk->tnum = pTab->tnum; 1783 pPk->tnum = pTab->tnum;
1726 1784
1727 /* Update the in-memory representation of all UNIQUE indices by converting 1785 /* Update the in-memory representation of all UNIQUE indices by converting
1728 ** the final rowid column into one or more columns of the PRIMARY KEY. 1786 ** the final rowid column into one or more columns of the PRIMARY KEY.
1729 */ 1787 */
1730 for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ 1788 for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
1731 int n; 1789 int n;
1732 if( IsPrimaryKeyIndex(pIdx) ) continue; 1790 if( IsPrimaryKeyIndex(pIdx) ) continue;
(...skipping 18 matching lines...) Expand all
1751 } 1809 }
1752 1810
1753 /* Add all table columns to the PRIMARY KEY index 1811 /* Add all table columns to the PRIMARY KEY index
1754 */ 1812 */
1755 if( nPk<pTab->nCol ){ 1813 if( nPk<pTab->nCol ){
1756 if( resizeIndexObject(db, pPk, pTab->nCol) ) return; 1814 if( resizeIndexObject(db, pPk, pTab->nCol) ) return;
1757 for(i=0, j=nPk; i<pTab->nCol; i++){ 1815 for(i=0, j=nPk; i<pTab->nCol; i++){
1758 if( !hasColumn(pPk->aiColumn, j, i) ){ 1816 if( !hasColumn(pPk->aiColumn, j, i) ){
1759 assert( j<pPk->nColumn ); 1817 assert( j<pPk->nColumn );
1760 pPk->aiColumn[j] = i; 1818 pPk->aiColumn[j] = i;
1761 pPk->azColl[j] = "BINARY"; 1819 pPk->azColl[j] = sqlite3StrBINARY;
1762 j++; 1820 j++;
1763 } 1821 }
1764 } 1822 }
1765 assert( pPk->nColumn==j ); 1823 assert( pPk->nColumn==j );
1766 assert( pTab->nCol==j ); 1824 assert( pTab->nCol==j );
1767 }else{ 1825 }else{
1768 pPk->nColumn = pTab->nCol; 1826 pPk->nColumn = pTab->nCol;
1769 } 1827 }
1770 } 1828 }
1771 1829
(...skipping 22 matching lines...) Expand all
1794 Token *pCons, /* The ',' token after the last column defn. */ 1852 Token *pCons, /* The ',' token after the last column defn. */
1795 Token *pEnd, /* The ')' before options in the CREATE TABLE */ 1853 Token *pEnd, /* The ')' before options in the CREATE TABLE */
1796 u8 tabOpts, /* Extra table options. Usually 0. */ 1854 u8 tabOpts, /* Extra table options. Usually 0. */
1797 Select *pSelect /* Select from a "CREATE ... AS SELECT" */ 1855 Select *pSelect /* Select from a "CREATE ... AS SELECT" */
1798 ){ 1856 ){
1799 Table *p; /* The new table */ 1857 Table *p; /* The new table */
1800 sqlite3 *db = pParse->db; /* The database connection */ 1858 sqlite3 *db = pParse->db; /* The database connection */
1801 int iDb; /* Database in which the table lives */ 1859 int iDb; /* Database in which the table lives */
1802 Index *pIdx; /* An implied index of the table */ 1860 Index *pIdx; /* An implied index of the table */
1803 1861
1804 if( (pEnd==0 && pSelect==0) || db->mallocFailed ){ 1862 if( pEnd==0 && pSelect==0 ){
1805 return; 1863 return;
1806 } 1864 }
1865 assert( !db->mallocFailed );
1807 p = pParse->pNewTable; 1866 p = pParse->pNewTable;
1808 if( p==0 ) return; 1867 if( p==0 ) return;
1809 1868
1810 assert( !db->init.busy || !pSelect ); 1869 assert( !db->init.busy || !pSelect );
1811 1870
1812 /* If the db->init.busy is 1 it means we are reading the SQL off the 1871 /* If the db->init.busy is 1 it means we are reading the SQL off the
1813 ** "sqlite_master" or "sqlite_temp_master" table on the disk. 1872 ** "sqlite_master" or "sqlite_temp_master" table on the disk.
1814 ** So do not write to the disk again. Extract the root page number 1873 ** So do not write to the disk again. Extract the root page number
1815 ** for the table from the db->init.newTnum field. (The page number 1874 ** for the table from the db->init.newTnum field. (The page number
1816 ** should have been put there by the sqliteOpenCb routine.) 1875 ** should have been put there by the sqliteOpenCb routine.)
1817 */ 1876 */
1818 if( db->init.busy ){ 1877 if( db->init.busy ){
1819 p->tnum = db->init.newTnum; 1878 p->tnum = db->init.newTnum;
1820 } 1879 }
1821 1880
1822 /* Special processing for WITHOUT ROWID Tables */ 1881 /* Special processing for WITHOUT ROWID Tables */
1823 if( tabOpts & TF_WithoutRowid ){ 1882 if( tabOpts & TF_WithoutRowid ){
1824 if( (p->tabFlags & TF_Autoincrement) ){ 1883 if( (p->tabFlags & TF_Autoincrement) ){
1825 sqlite3ErrorMsg(pParse, 1884 sqlite3ErrorMsg(pParse,
1826 "AUTOINCREMENT not allowed on WITHOUT ROWID tables"); 1885 "AUTOINCREMENT not allowed on WITHOUT ROWID tables");
1827 return; 1886 return;
1828 } 1887 }
1829 if( (p->tabFlags & TF_HasPrimaryKey)==0 ){ 1888 if( (p->tabFlags & TF_HasPrimaryKey)==0 ){
1830 sqlite3ErrorMsg(pParse, "PRIMARY KEY missing on table %s", p->zName); 1889 sqlite3ErrorMsg(pParse, "PRIMARY KEY missing on table %s", p->zName);
1831 }else{ 1890 }else{
1832 p->tabFlags |= TF_WithoutRowid; 1891 p->tabFlags |= TF_WithoutRowid | TF_NoVisibleRowid;
1833 convertToWithoutRowidTable(pParse, p); 1892 convertToWithoutRowidTable(pParse, p);
1834 } 1893 }
1835 } 1894 }
1836 1895
1837 iDb = sqlite3SchemaToIndex(db, p->pSchema); 1896 iDb = sqlite3SchemaToIndex(db, p->pSchema);
1838 1897
1839 #ifndef SQLITE_OMIT_CHECK 1898 #ifndef SQLITE_OMIT_CHECK
1840 /* Resolve names in all CHECK constraint expressions. 1899 /* Resolve names in all CHECK constraint expressions.
1841 */ 1900 */
1842 if( p->pCheck ){ 1901 if( p->pCheck ){
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
1890 ** Once the SELECT has been coded by sqlite3Select(), it is in a 1949 ** Once the SELECT has been coded by sqlite3Select(), it is in a
1891 ** suitable state to query for the column names and types to be used 1950 ** suitable state to query for the column names and types to be used
1892 ** by the new table. 1951 ** by the new table.
1893 ** 1952 **
1894 ** A shared-cache write-lock is not required to write to the new table, 1953 ** A shared-cache write-lock is not required to write to the new table,
1895 ** as a schema-lock must have already been obtained to create it. Since 1954 ** as a schema-lock must have already been obtained to create it. Since
1896 ** a schema-lock excludes all other database users, the write-lock would 1955 ** a schema-lock excludes all other database users, the write-lock would
1897 ** be redundant. 1956 ** be redundant.
1898 */ 1957 */
1899 if( pSelect ){ 1958 if( pSelect ){
1900 SelectDest dest; 1959 SelectDest dest; /* Where the SELECT should store results */
1901 Table *pSelTab; 1960 int regYield; /* Register holding co-routine entry-point */
1961 int addrTop; /* Top of the co-routine */
1962 int regRec; /* A record to be insert into the new table */
1963 int regRowid; /* Rowid of the next row to insert */
1964 int addrInsLoop; /* Top of the loop for inserting rows */
1965 Table *pSelTab; /* A table that describes the SELECT results */
1902 1966
1967 regYield = ++pParse->nMem;
1968 regRec = ++pParse->nMem;
1969 regRowid = ++pParse->nMem;
1903 assert(pParse->nTab==1); 1970 assert(pParse->nTab==1);
1971 sqlite3MayAbort(pParse);
1904 sqlite3VdbeAddOp3(v, OP_OpenWrite, 1, pParse->regRoot, iDb); 1972 sqlite3VdbeAddOp3(v, OP_OpenWrite, 1, pParse->regRoot, iDb);
1905 sqlite3VdbeChangeP5(v, OPFLAG_P2ISREG); 1973 sqlite3VdbeChangeP5(v, OPFLAG_P2ISREG);
1906 pParse->nTab = 2; 1974 pParse->nTab = 2;
1907 sqlite3SelectDestInit(&dest, SRT_Table, 1); 1975 addrTop = sqlite3VdbeCurrentAddr(v) + 1;
1976 sqlite3VdbeAddOp3(v, OP_InitCoroutine, regYield, 0, addrTop);
1977 sqlite3SelectDestInit(&dest, SRT_Coroutine, regYield);
1908 sqlite3Select(pParse, pSelect, &dest); 1978 sqlite3Select(pParse, pSelect, &dest);
1979 sqlite3VdbeAddOp1(v, OP_EndCoroutine, regYield);
1980 sqlite3VdbeJumpHere(v, addrTop - 1);
1981 if( pParse->nErr ) return;
1982 pSelTab = sqlite3ResultSetOfSelect(pParse, pSelect);
1983 if( pSelTab==0 ) return;
1984 assert( p->aCol==0 );
1985 p->nCol = pSelTab->nCol;
1986 p->aCol = pSelTab->aCol;
1987 pSelTab->nCol = 0;
1988 pSelTab->aCol = 0;
1989 sqlite3DeleteTable(db, pSelTab);
1990 addrInsLoop = sqlite3VdbeAddOp1(v, OP_Yield, dest.iSDParm);
1991 VdbeCoverage(v);
1992 sqlite3VdbeAddOp3(v, OP_MakeRecord, dest.iSdst, dest.nSdst, regRec);
1993 sqlite3TableAffinity(v, p, 0);
1994 sqlite3VdbeAddOp2(v, OP_NewRowid, 1, regRowid);
1995 sqlite3VdbeAddOp3(v, OP_Insert, 1, regRec, regRowid);
1996 sqlite3VdbeGoto(v, addrInsLoop);
1997 sqlite3VdbeJumpHere(v, addrInsLoop);
1909 sqlite3VdbeAddOp1(v, OP_Close, 1); 1998 sqlite3VdbeAddOp1(v, OP_Close, 1);
1910 if( pParse->nErr==0 ){
1911 pSelTab = sqlite3ResultSetOfSelect(pParse, pSelect);
1912 if( pSelTab==0 ) return;
1913 assert( p->aCol==0 );
1914 p->nCol = pSelTab->nCol;
1915 p->aCol = pSelTab->aCol;
1916 pSelTab->nCol = 0;
1917 pSelTab->aCol = 0;
1918 sqlite3DeleteTable(db, pSelTab);
1919 }
1920 } 1999 }
1921 2000
1922 /* Compute the complete text of the CREATE statement */ 2001 /* Compute the complete text of the CREATE statement */
1923 if( pSelect ){ 2002 if( pSelect ){
1924 zStmt = createTableStmt(db, p); 2003 zStmt = createTableStmt(db, p);
1925 }else{ 2004 }else{
1926 Token *pEnd2 = tabOpts ? &pParse->sLastToken : pEnd; 2005 Token *pEnd2 = tabOpts ? &pParse->sLastToken : pEnd;
1927 n = (int)(pEnd2->z - pParse->sNameToken.z); 2006 n = (int)(pEnd2->z - pParse->sNameToken.z);
1928 if( pEnd2->z[0]!=';' ) n += pEnd2->n; 2007 if( pEnd2->z[0]!=';' ) n += pEnd2->n;
1929 zStmt = sqlite3MPrintf(db, 2008 zStmt = sqlite3MPrintf(db,
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
2004 2083
2005 #ifndef SQLITE_OMIT_VIEW 2084 #ifndef SQLITE_OMIT_VIEW
2006 /* 2085 /*
2007 ** The parser calls this routine in order to create a new VIEW 2086 ** The parser calls this routine in order to create a new VIEW
2008 */ 2087 */
2009 void sqlite3CreateView( 2088 void sqlite3CreateView(
2010 Parse *pParse, /* The parsing context */ 2089 Parse *pParse, /* The parsing context */
2011 Token *pBegin, /* The CREATE token that begins the statement */ 2090 Token *pBegin, /* The CREATE token that begins the statement */
2012 Token *pName1, /* The token that holds the name of the view */ 2091 Token *pName1, /* The token that holds the name of the view */
2013 Token *pName2, /* The token that holds the name of the view */ 2092 Token *pName2, /* The token that holds the name of the view */
2093 ExprList *pCNames, /* Optional list of view column names */
2014 Select *pSelect, /* A SELECT statement that will become the new view */ 2094 Select *pSelect, /* A SELECT statement that will become the new view */
2015 int isTemp, /* TRUE for a TEMPORARY view */ 2095 int isTemp, /* TRUE for a TEMPORARY view */
2016 int noErr /* Suppress error messages if VIEW already exists */ 2096 int noErr /* Suppress error messages if VIEW already exists */
2017 ){ 2097 ){
2018 Table *p; 2098 Table *p;
2019 int n; 2099 int n;
2020 const char *z; 2100 const char *z;
2021 Token sEnd; 2101 Token sEnd;
2022 DbFixer sFix; 2102 DbFixer sFix;
2023 Token *pName = 0; 2103 Token *pName = 0;
2024 int iDb; 2104 int iDb;
2025 sqlite3 *db = pParse->db; 2105 sqlite3 *db = pParse->db;
2026 2106
2027 if( pParse->nVar>0 ){ 2107 if( pParse->nVar>0 ){
2028 sqlite3ErrorMsg(pParse, "parameters are not allowed in views"); 2108 sqlite3ErrorMsg(pParse, "parameters are not allowed in views");
2029 sqlite3SelectDelete(db, pSelect); 2109 goto create_view_fail;
2030 return;
2031 } 2110 }
2032 sqlite3StartTable(pParse, pName1, pName2, isTemp, 1, 0, noErr); 2111 sqlite3StartTable(pParse, pName1, pName2, isTemp, 1, 0, noErr);
2033 p = pParse->pNewTable; 2112 p = pParse->pNewTable;
2034 if( p==0 || pParse->nErr ){ 2113 if( p==0 || pParse->nErr ) goto create_view_fail;
2035 sqlite3SelectDelete(db, pSelect);
2036 return;
2037 }
2038 sqlite3TwoPartName(pParse, pName1, pName2, &pName); 2114 sqlite3TwoPartName(pParse, pName1, pName2, &pName);
2039 iDb = sqlite3SchemaToIndex(db, p->pSchema); 2115 iDb = sqlite3SchemaToIndex(db, p->pSchema);
2040 sqlite3FixInit(&sFix, pParse, iDb, "view", pName); 2116 sqlite3FixInit(&sFix, pParse, iDb, "view", pName);
2041 if( sqlite3FixSelect(&sFix, pSelect) ){ 2117 if( sqlite3FixSelect(&sFix, pSelect) ) goto create_view_fail;
2042 sqlite3SelectDelete(db, pSelect);
2043 return;
2044 }
2045 2118
2046 /* Make a copy of the entire SELECT statement that defines the view. 2119 /* Make a copy of the entire SELECT statement that defines the view.
2047 ** This will force all the Expr.token.z values to be dynamically 2120 ** This will force all the Expr.token.z values to be dynamically
2048 ** allocated rather than point to the input string - which means that 2121 ** allocated rather than point to the input string - which means that
2049 ** they will persist after the current sqlite3_exec() call returns. 2122 ** they will persist after the current sqlite3_exec() call returns.
2050 */ 2123 */
2051 p->pSelect = sqlite3SelectDup(db, pSelect, EXPRDUP_REDUCE); 2124 p->pSelect = sqlite3SelectDup(db, pSelect, EXPRDUP_REDUCE);
2052 sqlite3SelectDelete(db, pSelect); 2125 p->pCheck = sqlite3ExprListDup(db, pCNames, EXPRDUP_REDUCE);
2053 if( db->mallocFailed ){ 2126 if( db->mallocFailed ) goto create_view_fail;
2054 return;
2055 }
2056 if( !db->init.busy ){
2057 sqlite3ViewGetColumnNames(pParse, p);
2058 }
2059 2127
2060 /* Locate the end of the CREATE VIEW statement. Make sEnd point to 2128 /* Locate the end of the CREATE VIEW statement. Make sEnd point to
2061 ** the end. 2129 ** the end.
2062 */ 2130 */
2063 sEnd = pParse->sLastToken; 2131 sEnd = pParse->sLastToken;
2064 if( ALWAYS(sEnd.z[0]!=0) && sEnd.z[0]!=';' ){ 2132 assert( sEnd.z[0]!=0 );
2133 if( sEnd.z[0]!=';' ){
2065 sEnd.z += sEnd.n; 2134 sEnd.z += sEnd.n;
2066 } 2135 }
2067 sEnd.n = 0; 2136 sEnd.n = 0;
2068 n = (int)(sEnd.z - pBegin->z); 2137 n = (int)(sEnd.z - pBegin->z);
2138 assert( n>0 );
2069 z = pBegin->z; 2139 z = pBegin->z;
2070 while( ALWAYS(n>0) && sqlite3Isspace(z[n-1]) ){ n--; } 2140 while( sqlite3Isspace(z[n-1]) ){ n--; }
2071 sEnd.z = &z[n-1]; 2141 sEnd.z = &z[n-1];
2072 sEnd.n = 1; 2142 sEnd.n = 1;
2073 2143
2074 /* Use sqlite3EndTable() to add the view to the SQLITE_MASTER table */ 2144 /* Use sqlite3EndTable() to add the view to the SQLITE_MASTER table */
2075 sqlite3EndTable(pParse, 0, &sEnd, 0, 0); 2145 sqlite3EndTable(pParse, 0, &sEnd, 0, 0);
2146
2147 create_view_fail:
2148 sqlite3SelectDelete(db, pSelect);
2149 sqlite3ExprListDelete(db, pCNames);
2076 return; 2150 return;
2077 } 2151 }
2078 #endif /* SQLITE_OMIT_VIEW */ 2152 #endif /* SQLITE_OMIT_VIEW */
2079 2153
2080 #if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE) 2154 #if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE)
2081 /* 2155 /*
2082 ** The Table structure pTable is really a VIEW. Fill in the names of 2156 ** The Table structure pTable is really a VIEW. Fill in the names of
2083 ** the columns of the view in the pTable structure. Return the number 2157 ** the columns of the view in the pTable structure. Return the number
2084 ** of errors. If an error is seen leave an error message in pParse->zErrMsg. 2158 ** of errors. If an error is seen leave an error message in pParse->zErrMsg.
2085 */ 2159 */
2086 int sqlite3ViewGetColumnNames(Parse *pParse, Table *pTable){ 2160 int sqlite3ViewGetColumnNames(Parse *pParse, Table *pTable){
2087 Table *pSelTab; /* A fake table from which we get the result set */ 2161 Table *pSelTab; /* A fake table from which we get the result set */
2088 Select *pSel; /* Copy of the SELECT that implements the view */ 2162 Select *pSel; /* Copy of the SELECT that implements the view */
2089 int nErr = 0; /* Number of errors encountered */ 2163 int nErr = 0; /* Number of errors encountered */
2090 int n; /* Temporarily holds the number of cursors assigned */ 2164 int n; /* Temporarily holds the number of cursors assigned */
2091 sqlite3 *db = pParse->db; /* Database connection for malloc errors */ 2165 sqlite3 *db = pParse->db; /* Database connection for malloc errors */
2092 sqlite3_xauth xAuth; /* Saved xAuth pointer */ 2166 sqlite3_xauth xAuth; /* Saved xAuth pointer */
2167 u8 bEnabledLA; /* Saved db->lookaside.bEnabled state */
2093 2168
2094 assert( pTable ); 2169 assert( pTable );
2095 2170
2096 #ifndef SQLITE_OMIT_VIRTUALTABLE 2171 #ifndef SQLITE_OMIT_VIRTUALTABLE
2097 if( sqlite3VtabCallConnect(pParse, pTable) ){ 2172 if( sqlite3VtabCallConnect(pParse, pTable) ){
2098 return SQLITE_ERROR; 2173 return SQLITE_ERROR;
2099 } 2174 }
2100 if( IsVirtual(pTable) ) return 0; 2175 if( IsVirtual(pTable) ) return 0;
2101 #endif 2176 #endif
2102 2177
(...skipping 25 matching lines...) Expand all
2128 assert( pTable->nCol>=0 ); 2203 assert( pTable->nCol>=0 );
2129 2204
2130 /* If we get this far, it means we need to compute the table names. 2205 /* If we get this far, it means we need to compute the table names.
2131 ** Note that the call to sqlite3ResultSetOfSelect() will expand any 2206 ** Note that the call to sqlite3ResultSetOfSelect() will expand any
2132 ** "*" elements in the results set of the view and will assign cursors 2207 ** "*" elements in the results set of the view and will assign cursors
2133 ** to the elements of the FROM clause. But we do not want these changes 2208 ** to the elements of the FROM clause. But we do not want these changes
2134 ** to be permanent. So the computation is done on a copy of the SELECT 2209 ** to be permanent. So the computation is done on a copy of the SELECT
2135 ** statement that defines the view. 2210 ** statement that defines the view.
2136 */ 2211 */
2137 assert( pTable->pSelect ); 2212 assert( pTable->pSelect );
2138 pSel = sqlite3SelectDup(db, pTable->pSelect, 0); 2213 bEnabledLA = db->lookaside.bEnabled;
2139 if( pSel ){ 2214 if( pTable->pCheck ){
2140 u8 enableLookaside = db->lookaside.bEnabled;
2141 n = pParse->nTab;
2142 sqlite3SrcListAssignCursors(pParse, pSel->pSrc);
2143 pTable->nCol = -1;
2144 db->lookaside.bEnabled = 0; 2215 db->lookaside.bEnabled = 0;
2216 sqlite3ColumnsFromExprList(pParse, pTable->pCheck,
2217 &pTable->nCol, &pTable->aCol);
2218 }else{
2219 pSel = sqlite3SelectDup(db, pTable->pSelect, 0);
2220 if( pSel ){
2221 n = pParse->nTab;
2222 sqlite3SrcListAssignCursors(pParse, pSel->pSrc);
2223 pTable->nCol = -1;
2224 db->lookaside.bEnabled = 0;
2145 #ifndef SQLITE_OMIT_AUTHORIZATION 2225 #ifndef SQLITE_OMIT_AUTHORIZATION
2146 xAuth = db->xAuth; 2226 xAuth = db->xAuth;
2147 db->xAuth = 0; 2227 db->xAuth = 0;
2148 pSelTab = sqlite3ResultSetOfSelect(pParse, pSel); 2228 pSelTab = sqlite3ResultSetOfSelect(pParse, pSel);
2149 db->xAuth = xAuth; 2229 db->xAuth = xAuth;
2150 #else 2230 #else
2151 pSelTab = sqlite3ResultSetOfSelect(pParse, pSel); 2231 pSelTab = sqlite3ResultSetOfSelect(pParse, pSel);
2152 #endif 2232 #endif
2153 db->lookaside.bEnabled = enableLookaside; 2233 pParse->nTab = n;
2154 pParse->nTab = n; 2234 if( pSelTab ){
2155 if( pSelTab ){ 2235 assert( pTable->aCol==0 );
2156 assert( pTable->aCol==0 ); 2236 pTable->nCol = pSelTab->nCol;
2157 pTable->nCol = pSelTab->nCol; 2237 pTable->aCol = pSelTab->aCol;
2158 pTable->aCol = pSelTab->aCol; 2238 pSelTab->nCol = 0;
2159 pSelTab->nCol = 0; 2239 pSelTab->aCol = 0;
2160 pSelTab->aCol = 0; 2240 sqlite3DeleteTable(db, pSelTab);
2161 sqlite3DeleteTable(db, pSelTab); 2241 assert( sqlite3SchemaMutexHeld(db, 0, pTable->pSchema) );
2162 assert( sqlite3SchemaMutexHeld(db, 0, pTable->pSchema) ); 2242 }else{
2163 pTable->pSchema->schemaFlags |= DB_UnresetViews; 2243 pTable->nCol = 0;
2164 }else{ 2244 nErr++;
2165 pTable->nCol = 0; 2245 }
2246 sqlite3SelectDelete(db, pSel);
2247 } else {
2166 nErr++; 2248 nErr++;
2167 } 2249 }
2168 sqlite3SelectDelete(db, pSel);
2169 } else {
2170 nErr++;
2171 } 2250 }
2251 db->lookaside.bEnabled = bEnabledLA;
2252 pTable->pSchema->schemaFlags |= DB_UnresetViews;
2172 #endif /* SQLITE_OMIT_VIEW */ 2253 #endif /* SQLITE_OMIT_VIEW */
2173 return nErr; 2254 return nErr;
2174 } 2255 }
2175 #endif /* !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE) */ 2256 #endif /* !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE) */
2176 2257
2177 #ifndef SQLITE_OMIT_VIEW 2258 #ifndef SQLITE_OMIT_VIEW
2178 /* 2259 /*
2179 ** Clear the column names from every VIEW in database idx. 2260 ** Clear the column names from every VIEW in database idx.
2180 */ 2261 */
2181 static void sqliteViewResetAll(sqlite3 *db, int idx){ 2262 static void sqliteViewResetAll(sqlite3 *db, int idx){
2182 HashElem *i; 2263 HashElem *i;
2183 assert( sqlite3SchemaMutexHeld(db, idx, 0) ); 2264 assert( sqlite3SchemaMutexHeld(db, idx, 0) );
2184 if( !DbHasProperty(db, idx, DB_UnresetViews) ) return; 2265 if( !DbHasProperty(db, idx, DB_UnresetViews) ) return;
2185 for(i=sqliteHashFirst(&db->aDb[idx].pSchema->tblHash); i;i=sqliteHashNext(i)){ 2266 for(i=sqliteHashFirst(&db->aDb[idx].pSchema->tblHash); i;i=sqliteHashNext(i)){
2186 Table *pTab = sqliteHashData(i); 2267 Table *pTab = sqliteHashData(i);
2187 if( pTab->pSelect ){ 2268 if( pTab->pSelect ){
2188 sqliteDeleteColumnNames(db, pTab); 2269 sqlite3DeleteColumnNames(db, pTab);
2189 pTab->aCol = 0; 2270 pTab->aCol = 0;
2190 pTab->nCol = 0; 2271 pTab->nCol = 0;
2191 } 2272 }
2192 } 2273 }
2193 DbClearProperty(db, idx, DB_UnresetViews); 2274 DbClearProperty(db, idx, DB_UnresetViews);
2194 } 2275 }
2195 #else 2276 #else
2196 # define sqliteViewResetAll(A,B) 2277 # define sqliteViewResetAll(A,B)
2197 #endif /* SQLITE_OMIT_VIEW */ 2278 #endif /* SQLITE_OMIT_VIEW */
2198 2279
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
2428 Table *pTab; 2509 Table *pTab;
2429 Vdbe *v; 2510 Vdbe *v;
2430 sqlite3 *db = pParse->db; 2511 sqlite3 *db = pParse->db;
2431 int iDb; 2512 int iDb;
2432 2513
2433 if( db->mallocFailed ){ 2514 if( db->mallocFailed ){
2434 goto exit_drop_table; 2515 goto exit_drop_table;
2435 } 2516 }
2436 assert( pParse->nErr==0 ); 2517 assert( pParse->nErr==0 );
2437 assert( pName->nSrc==1 ); 2518 assert( pName->nSrc==1 );
2519 if( sqlite3ReadSchema(pParse) ) goto exit_drop_table;
2438 if( noErr ) db->suppressErr++; 2520 if( noErr ) db->suppressErr++;
2439 pTab = sqlite3LocateTableItem(pParse, isView, &pName->a[0]); 2521 pTab = sqlite3LocateTableItem(pParse, isView, &pName->a[0]);
2440 if( noErr ) db->suppressErr--; 2522 if( noErr ) db->suppressErr--;
2441 2523
2442 if( pTab==0 ){ 2524 if( pTab==0 ){
2443 if( noErr ) sqlite3CodeVerifyNamedSchema(pParse, pName->a[0].zDatabase); 2525 if( noErr ) sqlite3CodeVerifyNamedSchema(pParse, pName->a[0].zDatabase);
2444 goto exit_drop_table; 2526 goto exit_drop_table;
2445 } 2527 }
2446 iDb = sqlite3SchemaToIndex(db, pTab->pSchema); 2528 iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
2447 assert( iDb>=0 && iDb<db->nDb ); 2529 assert( iDb>=0 && iDb<db->nDb );
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after
2732 sqlite3VdbeJumpHere(v, addr1); 2814 sqlite3VdbeJumpHere(v, addr1);
2733 if( memRootPage<0 ) sqlite3VdbeAddOp2(v, OP_Clear, tnum, iDb); 2815 if( memRootPage<0 ) sqlite3VdbeAddOp2(v, OP_Clear, tnum, iDb);
2734 sqlite3VdbeAddOp4(v, OP_OpenWrite, iIdx, tnum, iDb, 2816 sqlite3VdbeAddOp4(v, OP_OpenWrite, iIdx, tnum, iDb,
2735 (char *)pKey, P4_KEYINFO); 2817 (char *)pKey, P4_KEYINFO);
2736 sqlite3VdbeChangeP5(v, OPFLAG_BULKCSR|((memRootPage>=0)?OPFLAG_P2ISREG:0)); 2818 sqlite3VdbeChangeP5(v, OPFLAG_BULKCSR|((memRootPage>=0)?OPFLAG_P2ISREG:0));
2737 2819
2738 addr1 = sqlite3VdbeAddOp2(v, OP_SorterSort, iSorter, 0); VdbeCoverage(v); 2820 addr1 = sqlite3VdbeAddOp2(v, OP_SorterSort, iSorter, 0); VdbeCoverage(v);
2739 assert( pKey!=0 || db->mallocFailed || pParse->nErr ); 2821 assert( pKey!=0 || db->mallocFailed || pParse->nErr );
2740 if( IsUniqueIndex(pIndex) && pKey!=0 ){ 2822 if( IsUniqueIndex(pIndex) && pKey!=0 ){
2741 int j2 = sqlite3VdbeCurrentAddr(v) + 3; 2823 int j2 = sqlite3VdbeCurrentAddr(v) + 3;
2742 sqlite3VdbeAddOp2(v, OP_Goto, 0, j2); 2824 sqlite3VdbeGoto(v, j2);
2743 addr2 = sqlite3VdbeCurrentAddr(v); 2825 addr2 = sqlite3VdbeCurrentAddr(v);
2744 sqlite3VdbeAddOp4Int(v, OP_SorterCompare, iSorter, j2, regRecord, 2826 sqlite3VdbeAddOp4Int(v, OP_SorterCompare, iSorter, j2, regRecord,
2745 pIndex->nKeyCol); VdbeCoverage(v); 2827 pIndex->nKeyCol); VdbeCoverage(v);
2746 sqlite3UniqueConstraint(pParse, OE_Abort, pIndex); 2828 sqlite3UniqueConstraint(pParse, OE_Abort, pIndex);
2747 }else{ 2829 }else{
2748 addr2 = sqlite3VdbeCurrentAddr(v); 2830 addr2 = sqlite3VdbeCurrentAddr(v);
2749 } 2831 }
2750 sqlite3VdbeAddOp3(v, OP_SorterData, iSorter, regRecord, iIdx); 2832 sqlite3VdbeAddOp3(v, OP_SorterData, iSorter, regRecord, iIdx);
2751 sqlite3VdbeAddOp3(v, OP_IdxInsert, iIdx, regRecord, 1); 2833 sqlite3VdbeAddOp3(v, OP_Last, iIdx, 0, -1);
2834 sqlite3VdbeAddOp3(v, OP_IdxInsert, iIdx, regRecord, 0);
2752 sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT); 2835 sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT);
2753 sqlite3ReleaseTempReg(pParse, regRecord); 2836 sqlite3ReleaseTempReg(pParse, regRecord);
2754 sqlite3VdbeAddOp2(v, OP_SorterNext, iSorter, addr2); VdbeCoverage(v); 2837 sqlite3VdbeAddOp2(v, OP_SorterNext, iSorter, addr2); VdbeCoverage(v);
2755 sqlite3VdbeJumpHere(v, addr1); 2838 sqlite3VdbeJumpHere(v, addr1);
2756 2839
2757 sqlite3VdbeAddOp1(v, OP_Close, iTab); 2840 sqlite3VdbeAddOp1(v, OP_Close, iTab);
2758 sqlite3VdbeAddOp1(v, OP_Close, iIdx); 2841 sqlite3VdbeAddOp1(v, OP_Close, iIdx);
2759 sqlite3VdbeAddOp1(v, OP_Close, iSorter); 2842 sqlite3VdbeAddOp1(v, OP_Close, iSorter);
2760 } 2843 }
2761 2844
(...skipping 14 matching lines...) Expand all
2776 int nByte; /* Bytes of space for Index object + arrays */ 2859 int nByte; /* Bytes of space for Index object + arrays */
2777 2860
2778 nByte = ROUND8(sizeof(Index)) + /* Index structure */ 2861 nByte = ROUND8(sizeof(Index)) + /* Index structure */
2779 ROUND8(sizeof(char*)*nCol) + /* Index.azColl */ 2862 ROUND8(sizeof(char*)*nCol) + /* Index.azColl */
2780 ROUND8(sizeof(LogEst)*(nCol+1) + /* Index.aiRowLogEst */ 2863 ROUND8(sizeof(LogEst)*(nCol+1) + /* Index.aiRowLogEst */
2781 sizeof(i16)*nCol + /* Index.aiColumn */ 2864 sizeof(i16)*nCol + /* Index.aiColumn */
2782 sizeof(u8)*nCol); /* Index.aSortOrder */ 2865 sizeof(u8)*nCol); /* Index.aSortOrder */
2783 p = sqlite3DbMallocZero(db, nByte + nExtra); 2866 p = sqlite3DbMallocZero(db, nByte + nExtra);
2784 if( p ){ 2867 if( p ){
2785 char *pExtra = ((char*)p)+ROUND8(sizeof(Index)); 2868 char *pExtra = ((char*)p)+ROUND8(sizeof(Index));
2786 p->azColl = (char**)pExtra; pExtra += ROUND8(sizeof(char*)*nCol); 2869 p->azColl = (const char**)pExtra; pExtra += ROUND8(sizeof(char*)*nCol);
2787 p->aiRowLogEst = (LogEst*)pExtra; pExtra += sizeof(LogEst)*(nCol+1); 2870 p->aiRowLogEst = (LogEst*)pExtra; pExtra += sizeof(LogEst)*(nCol+1);
2788 p->aiColumn = (i16*)pExtra; pExtra += sizeof(i16)*nCol; 2871 p->aiColumn = (i16*)pExtra; pExtra += sizeof(i16)*nCol;
2789 p->aSortOrder = (u8*)pExtra; 2872 p->aSortOrder = (u8*)pExtra;
2790 p->nColumn = nCol; 2873 p->nColumn = nCol;
2791 p->nKeyCol = nCol - 1; 2874 p->nKeyCol = nCol - 1;
2792 *ppExtra = ((char*)p) + nByte; 2875 *ppExtra = ((char*)p) + nByte;
2793 } 2876 }
2794 return p; 2877 return p;
2795 } 2878 }
2796 2879
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
2828 char *zName = 0; /* Name of the index */ 2911 char *zName = 0; /* Name of the index */
2829 int nName; /* Number of characters in zName */ 2912 int nName; /* Number of characters in zName */
2830 int i, j; 2913 int i, j;
2831 DbFixer sFix; /* For assigning database names to pTable */ 2914 DbFixer sFix; /* For assigning database names to pTable */
2832 int sortOrderMask; /* 1 to honor DESC in index. 0 to ignore. */ 2915 int sortOrderMask; /* 1 to honor DESC in index. 0 to ignore. */
2833 sqlite3 *db = pParse->db; 2916 sqlite3 *db = pParse->db;
2834 Db *pDb; /* The specific table containing the indexed database */ 2917 Db *pDb; /* The specific table containing the indexed database */
2835 int iDb; /* Index of the database that is being written */ 2918 int iDb; /* Index of the database that is being written */
2836 Token *pName = 0; /* Unqualified name of the index to create */ 2919 Token *pName = 0; /* Unqualified name of the index to create */
2837 struct ExprList_item *pListItem; /* For looping over pList */ 2920 struct ExprList_item *pListItem; /* For looping over pList */
2838 const Column *pTabCol; /* A column in the table */
2839 int nExtra = 0; /* Space allocated for zExtra[] */ 2921 int nExtra = 0; /* Space allocated for zExtra[] */
2840 int nExtraCol; /* Number of extra columns needed */ 2922 int nExtraCol; /* Number of extra columns needed */
2841 char *zExtra = 0; /* Extra space after the Index object */ 2923 char *zExtra = 0; /* Extra space after the Index object */
2842 Index *pPk = 0; /* PRIMARY KEY index for WITHOUT ROWID tables */ 2924 Index *pPk = 0; /* PRIMARY KEY index for WITHOUT ROWID tables */
2843 2925
2844 assert( pParse->nErr==0 ); /* Never called with prior errors */ 2926 if( db->mallocFailed || IN_DECLARE_VTAB || pParse->nErr>0 ){
2845 if( db->mallocFailed || IN_DECLARE_VTAB ){
2846 goto exit_create_index; 2927 goto exit_create_index;
2847 } 2928 }
2848 if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){ 2929 if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){
2849 goto exit_create_index; 2930 goto exit_create_index;
2850 } 2931 }
2851 2932
2852 /* 2933 /*
2853 ** Find the table that is to be indexed. Return early if not found. 2934 ** Find the table that is to be indexed. Return early if not found.
2854 */ 2935 */
2855 if( pTblName!=0 ){ 2936 if( pTblName!=0 ){
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
2984 goto exit_create_index; 3065 goto exit_create_index;
2985 } 3066 }
2986 } 3067 }
2987 #endif 3068 #endif
2988 3069
2989 /* If pList==0, it means this routine was called to make a primary 3070 /* If pList==0, it means this routine was called to make a primary
2990 ** key out of the last column added to the table under construction. 3071 ** key out of the last column added to the table under construction.
2991 ** So create a fake list to simulate this. 3072 ** So create a fake list to simulate this.
2992 */ 3073 */
2993 if( pList==0 ){ 3074 if( pList==0 ){
2994 pList = sqlite3ExprListAppend(pParse, 0, 0); 3075 Token prevCol;
3076 prevCol.z = pTab->aCol[pTab->nCol-1].zName;
3077 prevCol.n = sqlite3Strlen30(prevCol.z);
3078 pList = sqlite3ExprListAppend(pParse, 0,
3079 sqlite3ExprAlloc(db, TK_ID, &prevCol, 0));
2995 if( pList==0 ) goto exit_create_index; 3080 if( pList==0 ) goto exit_create_index;
2996 pList->a[0].zName = sqlite3DbStrDup(pParse->db, 3081 assert( pList->nExpr==1 );
2997 pTab->aCol[pTab->nCol-1].zName); 3082 sqlite3ExprListSetSortOrder(pList, sortOrder);
2998 pList->a[0].sortOrder = (u8)sortOrder; 3083 }else{
3084 sqlite3ExprListCheckLength(pParse, pList, "index");
2999 } 3085 }
3000 3086
3001 /* Figure out how many bytes of space are required to store explicitly 3087 /* Figure out how many bytes of space are required to store explicitly
3002 ** specified collation sequence names. 3088 ** specified collation sequence names.
3003 */ 3089 */
3004 for(i=0; i<pList->nExpr; i++){ 3090 for(i=0; i<pList->nExpr; i++){
3005 Expr *pExpr = pList->a[i].pExpr; 3091 Expr *pExpr = pList->a[i].pExpr;
3006 if( pExpr ){ 3092 assert( pExpr!=0 );
3007 assert( pExpr->op==TK_COLLATE ); 3093 if( pExpr->op==TK_COLLATE ){
3008 nExtra += (1 + sqlite3Strlen30(pExpr->u.zToken)); 3094 nExtra += (1 + sqlite3Strlen30(pExpr->u.zToken));
3009 } 3095 }
3010 } 3096 }
3011 3097
3012 /* 3098 /*
3013 ** Allocate the index structure. 3099 ** Allocate the index structure.
3014 */ 3100 */
3015 nName = sqlite3Strlen30(zName); 3101 nName = sqlite3Strlen30(zName);
3016 nExtraCol = pPk ? pPk->nKeyCol : 1; 3102 nExtraCol = pPk ? pPk->nKeyCol : 1;
3017 pIndex = sqlite3AllocateIndexObject(db, pList->nExpr + nExtraCol, 3103 pIndex = sqlite3AllocateIndexObject(db, pList->nExpr + nExtraCol,
(...skipping 20 matching lines...) Expand all
3038 assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); 3124 assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
3039 3125
3040 /* Check to see if we should honor DESC requests on index columns 3126 /* Check to see if we should honor DESC requests on index columns
3041 */ 3127 */
3042 if( pDb->pSchema->file_format>=4 ){ 3128 if( pDb->pSchema->file_format>=4 ){
3043 sortOrderMask = -1; /* Honor DESC */ 3129 sortOrderMask = -1; /* Honor DESC */
3044 }else{ 3130 }else{
3045 sortOrderMask = 0; /* Ignore DESC */ 3131 sortOrderMask = 0; /* Ignore DESC */
3046 } 3132 }
3047 3133
3048 /* Scan the names of the columns of the table to be indexed and 3134 /* Analyze the list of expressions that form the terms of the index and
3049 ** load the column indices into the Index structure. Report an error 3135 ** report any errors. In the common case where the expression is exactly
3050 ** if any column is not found. 3136 ** a table column, store that column in aiColumn[]. For general expressions,
3137 ** populate pIndex->aColExpr and store XN_EXPR (-2) in aiColumn[].
3051 ** 3138 **
3052 ** TODO: Add a test to make sure that the same column is not named 3139 ** TODO: Issue a warning if two or more columns of the index are identical.
3053 ** more than once within the same index. Only the first instance of 3140 ** TODO: Issue a warning if the table primary key is used as part of the
3054 ** the column will ever be used by the optimizer. Note that using the 3141 ** index key.
3055 ** same column more than once cannot be an error because that would
3056 ** break backwards compatibility - it needs to be a warning.
3057 */ 3142 */
3058 for(i=0, pListItem=pList->a; i<pList->nExpr; i++, pListItem++){ 3143 for(i=0, pListItem=pList->a; i<pList->nExpr; i++, pListItem++){
3059 const char *zColName = pListItem->zName; 3144 Expr *pCExpr; /* The i-th index expression */
3060 int requestedSortOrder; 3145 int requestedSortOrder; /* ASC or DESC on the i-th expression */
3061 char *zColl; /* Collation sequence name */ 3146 const char *zColl; /* Collation sequence name */
3062 3147
3063 for(j=0, pTabCol=pTab->aCol; j<pTab->nCol; j++, pTabCol++){ 3148 sqlite3StringToId(pListItem->pExpr);
3064 if( sqlite3StrICmp(zColName, pTabCol->zName)==0 ) break; 3149 sqlite3ResolveSelfReference(pParse, pTab, NC_IdxExpr, pListItem->pExpr, 0);
3150 if( pParse->nErr ) goto exit_create_index;
3151 pCExpr = sqlite3ExprSkipCollate(pListItem->pExpr);
3152 if( pCExpr->op!=TK_COLUMN ){
3153 if( pTab==pParse->pNewTable ){
3154 sqlite3ErrorMsg(pParse, "expressions prohibited in PRIMARY KEY and "
3155 "UNIQUE constraints");
3156 goto exit_create_index;
3157 }
3158 if( pIndex->aColExpr==0 ){
3159 ExprList *pCopy = sqlite3ExprListDup(db, pList, 0);
3160 pIndex->aColExpr = pCopy;
3161 if( !db->mallocFailed ){
3162 assert( pCopy!=0 );
3163 pListItem = &pCopy->a[i];
3164 }
3165 }
3166 j = XN_EXPR;
3167 pIndex->aiColumn[i] = XN_EXPR;
3168 pIndex->uniqNotNull = 0;
3169 }else{
3170 j = pCExpr->iColumn;
3171 assert( j<=0x7fff );
3172 if( j<0 ){
3173 j = pTab->iPKey;
3174 }else if( pTab->aCol[j].notNull==0 ){
3175 pIndex->uniqNotNull = 0;
3176 }
3177 pIndex->aiColumn[i] = (i16)j;
3065 } 3178 }
3066 if( j>=pTab->nCol ){ 3179 zColl = 0;
3067 sqlite3ErrorMsg(pParse, "table %s has no column named %s", 3180 if( pListItem->pExpr->op==TK_COLLATE ){
3068 pTab->zName, zColName);
3069 pParse->checkSchema = 1;
3070 goto exit_create_index;
3071 }
3072 assert( j<=0x7fff );
3073 pIndex->aiColumn[i] = (i16)j;
3074 if( pListItem->pExpr ){
3075 int nColl; 3181 int nColl;
3076 assert( pListItem->pExpr->op==TK_COLLATE );
3077 zColl = pListItem->pExpr->u.zToken; 3182 zColl = pListItem->pExpr->u.zToken;
3078 nColl = sqlite3Strlen30(zColl) + 1; 3183 nColl = sqlite3Strlen30(zColl) + 1;
3079 assert( nExtra>=nColl ); 3184 assert( nExtra>=nColl );
3080 memcpy(zExtra, zColl, nColl); 3185 memcpy(zExtra, zColl, nColl);
3081 zColl = zExtra; 3186 zColl = zExtra;
3082 zExtra += nColl; 3187 zExtra += nColl;
3083 nExtra -= nColl; 3188 nExtra -= nColl;
3084 }else{ 3189 }else if( j>=0 ){
3085 zColl = pTab->aCol[j].zColl; 3190 zColl = pTab->aCol[j].zColl;
3086 if( !zColl ) zColl = "BINARY";
3087 } 3191 }
3192 if( !zColl ) zColl = sqlite3StrBINARY;
3088 if( !db->init.busy && !sqlite3LocateCollSeq(pParse, zColl) ){ 3193 if( !db->init.busy && !sqlite3LocateCollSeq(pParse, zColl) ){
3089 goto exit_create_index; 3194 goto exit_create_index;
3090 } 3195 }
3091 pIndex->azColl[i] = zColl; 3196 pIndex->azColl[i] = zColl;
3092 requestedSortOrder = pListItem->sortOrder & sortOrderMask; 3197 requestedSortOrder = pListItem->sortOrder & sortOrderMask;
3093 pIndex->aSortOrder[i] = (u8)requestedSortOrder; 3198 pIndex->aSortOrder[i] = (u8)requestedSortOrder;
3094 if( pTab->aCol[j].notNull==0 ) pIndex->uniqNotNull = 0;
3095 } 3199 }
3200
3201 /* Append the table key to the end of the index. For WITHOUT ROWID
3202 ** tables (when pPk!=0) this will be the declared PRIMARY KEY. For
3203 ** normal tables (when pPk==0) this will be the rowid.
3204 */
3096 if( pPk ){ 3205 if( pPk ){
3097 for(j=0; j<pPk->nKeyCol; j++){ 3206 for(j=0; j<pPk->nKeyCol; j++){
3098 int x = pPk->aiColumn[j]; 3207 int x = pPk->aiColumn[j];
3208 assert( x>=0 );
3099 if( hasColumn(pIndex->aiColumn, pIndex->nKeyCol, x) ){ 3209 if( hasColumn(pIndex->aiColumn, pIndex->nKeyCol, x) ){
3100 pIndex->nColumn--; 3210 pIndex->nColumn--;
3101 }else{ 3211 }else{
3102 pIndex->aiColumn[i] = x; 3212 pIndex->aiColumn[i] = x;
3103 pIndex->azColl[i] = pPk->azColl[j]; 3213 pIndex->azColl[i] = pPk->azColl[j];
3104 pIndex->aSortOrder[i] = pPk->aSortOrder[j]; 3214 pIndex->aSortOrder[i] = pPk->aSortOrder[j];
3105 i++; 3215 i++;
3106 } 3216 }
3107 } 3217 }
3108 assert( i==pIndex->nColumn ); 3218 assert( i==pIndex->nColumn );
3109 }else{ 3219 }else{
3110 pIndex->aiColumn[i] = -1; 3220 pIndex->aiColumn[i] = XN_ROWID;
3111 pIndex->azColl[i] = "BINARY"; 3221 pIndex->azColl[i] = sqlite3StrBINARY;
3112 } 3222 }
3113 sqlite3DefaultRowEst(pIndex); 3223 sqlite3DefaultRowEst(pIndex);
3114 if( pParse->pNewTable==0 ) estimateIndexWidth(pIndex); 3224 if( pParse->pNewTable==0 ) estimateIndexWidth(pIndex);
3115 3225
3116 if( pTab==pParse->pNewTable ){ 3226 if( pTab==pParse->pNewTable ){
3117 /* This routine has been called to create an automatic index as a 3227 /* This routine has been called to create an automatic index as a
3118 ** result of a PRIMARY KEY or UNIQUE clause on a column definition, or 3228 ** result of a PRIMARY KEY or UNIQUE clause on a column definition, or
3119 ** a PRIMARY KEY or UNIQUE clause following the column definitions. 3229 ** a PRIMARY KEY or UNIQUE clause following the column definitions.
3120 ** i.e. one of: 3230 ** i.e. one of:
3121 ** 3231 **
(...skipping 17 matching lines...) Expand all
3139 for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ 3249 for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
3140 int k; 3250 int k;
3141 assert( IsUniqueIndex(pIdx) ); 3251 assert( IsUniqueIndex(pIdx) );
3142 assert( pIdx->idxType!=SQLITE_IDXTYPE_APPDEF ); 3252 assert( pIdx->idxType!=SQLITE_IDXTYPE_APPDEF );
3143 assert( IsUniqueIndex(pIndex) ); 3253 assert( IsUniqueIndex(pIndex) );
3144 3254
3145 if( pIdx->nKeyCol!=pIndex->nKeyCol ) continue; 3255 if( pIdx->nKeyCol!=pIndex->nKeyCol ) continue;
3146 for(k=0; k<pIdx->nKeyCol; k++){ 3256 for(k=0; k<pIdx->nKeyCol; k++){
3147 const char *z1; 3257 const char *z1;
3148 const char *z2; 3258 const char *z2;
3259 assert( pIdx->aiColumn[k]>=0 );
3149 if( pIdx->aiColumn[k]!=pIndex->aiColumn[k] ) break; 3260 if( pIdx->aiColumn[k]!=pIndex->aiColumn[k] ) break;
3150 z1 = pIdx->azColl[k]; 3261 z1 = pIdx->azColl[k];
3151 z2 = pIndex->azColl[k]; 3262 z2 = pIndex->azColl[k];
3152 if( z1!=z2 && sqlite3StrICmp(z1, z2) ) break; 3263 if( z1!=z2 && sqlite3StrICmp(z1, z2) ) break;
3153 } 3264 }
3154 if( k==pIdx->nKeyCol ){ 3265 if( k==pIdx->nKeyCol ){
3155 if( pIdx->onError!=pIndex->onError ){ 3266 if( pIdx->onError!=pIndex->onError ){
3156 /* This constraint creates the same index as a previous 3267 /* This constraint creates the same index as a previous
3157 ** constraint specified somewhere in the CREATE TABLE statement. 3268 ** constraint specified somewhere in the CREATE TABLE statement.
3158 ** However the ON CONFLICT clauses are different. If both this 3269 ** However the ON CONFLICT clauses are different. If both this
3159 ** constraint and the previous equivalent constraint have explicit 3270 ** constraint and the previous equivalent constraint have explicit
3160 ** ON CONFLICT clauses this is an error. Otherwise, use the 3271 ** ON CONFLICT clauses this is an error. Otherwise, use the
3161 ** explicitly specified behavior for the index. 3272 ** explicitly specified behavior for the index.
3162 */ 3273 */
3163 if( !(pIdx->onError==OE_Default || pIndex->onError==OE_Default) ){ 3274 if( !(pIdx->onError==OE_Default || pIndex->onError==OE_Default) ){
3164 sqlite3ErrorMsg(pParse, 3275 sqlite3ErrorMsg(pParse,
3165 "conflicting ON CONFLICT clauses specified", 0); 3276 "conflicting ON CONFLICT clauses specified", 0);
3166 } 3277 }
3167 if( pIdx->onError==OE_Default ){ 3278 if( pIdx->onError==OE_Default ){
3168 pIdx->onError = pIndex->onError; 3279 pIdx->onError = pIndex->onError;
3169 } 3280 }
3170 } 3281 }
3282 pRet = pIdx;
3171 goto exit_create_index; 3283 goto exit_create_index;
3172 } 3284 }
3173 } 3285 }
3174 } 3286 }
3175 3287
3176 /* Link the new Index structure to its table and to the other 3288 /* Link the new Index structure to its table and to the other
3177 ** in-memory database structures. 3289 ** in-memory database structures.
3178 */ 3290 */
3291 assert( pParse->nErr==0 );
3179 if( db->init.busy ){ 3292 if( db->init.busy ){
3180 Index *p; 3293 Index *p;
3181 assert( sqlite3SchemaMutexHeld(db, 0, pIndex->pSchema) ); 3294 assert( sqlite3SchemaMutexHeld(db, 0, pIndex->pSchema) );
3182 p = sqlite3HashInsert(&pIndex->pSchema->idxHash, 3295 p = sqlite3HashInsert(&pIndex->pSchema->idxHash,
3183 pIndex->zName, pIndex); 3296 pIndex->zName, pIndex);
3184 if( p ){ 3297 if( p ){
3185 assert( p==pIndex ); /* Malloc must have failed */ 3298 assert( p==pIndex ); /* Malloc must have failed */
3186 db->mallocFailed = 1; 3299 db->mallocFailed = 1;
3187 goto exit_create_index; 3300 goto exit_create_index;
3188 } 3301 }
3189 db->flags |= SQLITE_InternChanges; 3302 db->flags |= SQLITE_InternChanges;
3190 if( pTblName!=0 ){ 3303 if( pTblName!=0 ){
3191 pIndex->tnum = db->init.newTnum; 3304 pIndex->tnum = db->init.newTnum;
3192 } 3305 }
3193 } 3306 }
3194 3307
3195 /* If this is the initial CREATE INDEX statement (or CREATE TABLE if the 3308 /* If this is the initial CREATE INDEX statement (or CREATE TABLE if the
3196 ** index is an implied index for a UNIQUE or PRIMARY KEY constraint) then 3309 ** index is an implied index for a UNIQUE or PRIMARY KEY constraint) then
3197 ** emit code to allocate the index rootpage on disk and make an entry for 3310 ** emit code to allocate the index rootpage on disk and make an entry for
3198 ** the index in the sqlite_master table and populate the index with 3311 ** the index in the sqlite_master table and populate the index with
3199 ** content. But, do not do this if we are simply reading the sqlite_master 3312 ** content. But, do not do this if we are simply reading the sqlite_master
3200 ** table to parse the schema, or if this index is the PRIMARY KEY index 3313 ** table to parse the schema, or if this index is the PRIMARY KEY index
3201 ** of a WITHOUT ROWID table. 3314 ** of a WITHOUT ROWID table.
3202 ** 3315 **
3203 ** If pTblName==0 it means this index is generated as an implied PRIMARY KEY 3316 ** If pTblName==0 it means this index is generated as an implied PRIMARY KEY
3204 ** or UNIQUE index in a CREATE TABLE statement. Since the table 3317 ** or UNIQUE index in a CREATE TABLE statement. Since the table
3205 ** has just been created, it contains no data and the index initialization 3318 ** has just been created, it contains no data and the index initialization
3206 ** step can be skipped. 3319 ** step can be skipped.
3207 */ 3320 */
3208 else if( pParse->nErr==0 && (HasRowid(pTab) || pTblName!=0) ){ 3321 else if( HasRowid(pTab) || pTblName!=0 ){
3209 Vdbe *v; 3322 Vdbe *v;
3210 char *zStmt; 3323 char *zStmt;
3211 int iMem = ++pParse->nMem; 3324 int iMem = ++pParse->nMem;
3212 3325
3213 v = sqlite3GetVdbe(pParse); 3326 v = sqlite3GetVdbe(pParse);
3214 if( v==0 ) goto exit_create_index; 3327 if( v==0 ) goto exit_create_index;
3215 3328
3329 sqlite3BeginWriteOperation(pParse, 1, iDb);
3216 3330
3217 /* Create the rootpage for the index 3331 /* Create the rootpage for the index using CreateIndex. But before
3218 */ 3332 ** doing so, code a Noop instruction and store its address in
3219 sqlite3BeginWriteOperation(pParse, 1, iDb); 3333 ** Index.tnum. This is required in case this index is actually a
3334 ** PRIMARY KEY and the table is actually a WITHOUT ROWID table. In
3335 ** that case the convertToWithoutRowidTable() routine will replace
3336 ** the Noop with a Goto to jump over the VDBE code generated below. */
3337 pIndex->tnum = sqlite3VdbeAddOp0(v, OP_Noop);
3220 sqlite3VdbeAddOp2(v, OP_CreateIndex, iDb, iMem); 3338 sqlite3VdbeAddOp2(v, OP_CreateIndex, iDb, iMem);
3221 3339
3222 /* Gather the complete text of the CREATE INDEX statement into 3340 /* Gather the complete text of the CREATE INDEX statement into
3223 ** the zStmt variable 3341 ** the zStmt variable
3224 */ 3342 */
3225 if( pStart ){ 3343 if( pStart ){
3226 int n = (int)(pParse->sLastToken.z - pName->z) + pParse->sLastToken.n; 3344 int n = (int)(pParse->sLastToken.z - pName->z) + pParse->sLastToken.n;
3227 if( pName->z[n-1]==';' ) n--; 3345 if( pName->z[n-1]==';' ) n--;
3228 /* A named index with an explicit CREATE INDEX statement */ 3346 /* A named index with an explicit CREATE INDEX statement */
3229 zStmt = sqlite3MPrintf(db, "CREATE%s INDEX %.*s", 3347 zStmt = sqlite3MPrintf(db, "CREATE%s INDEX %.*s",
(...skipping 19 matching lines...) Expand all
3249 /* Fill the index with data and reparse the schema. Code an OP_Expire 3367 /* Fill the index with data and reparse the schema. Code an OP_Expire
3250 ** to invalidate all pre-compiled statements. 3368 ** to invalidate all pre-compiled statements.
3251 */ 3369 */
3252 if( pTblName ){ 3370 if( pTblName ){
3253 sqlite3RefillIndex(pParse, pIndex, iMem); 3371 sqlite3RefillIndex(pParse, pIndex, iMem);
3254 sqlite3ChangeCookie(pParse, iDb); 3372 sqlite3ChangeCookie(pParse, iDb);
3255 sqlite3VdbeAddParseSchemaOp(v, iDb, 3373 sqlite3VdbeAddParseSchemaOp(v, iDb,
3256 sqlite3MPrintf(db, "name='%q' AND type='index'", pIndex->zName)); 3374 sqlite3MPrintf(db, "name='%q' AND type='index'", pIndex->zName));
3257 sqlite3VdbeAddOp1(v, OP_Expire, 0); 3375 sqlite3VdbeAddOp1(v, OP_Expire, 0);
3258 } 3376 }
3377
3378 sqlite3VdbeJumpHere(v, pIndex->tnum);
3259 } 3379 }
3260 3380
3261 /* When adding an index to the list of indices for a table, make 3381 /* When adding an index to the list of indices for a table, make
3262 ** sure all indices labeled OE_Replace come after all those labeled 3382 ** sure all indices labeled OE_Replace come after all those labeled
3263 ** OE_Ignore. This is necessary for the correct constraint check 3383 ** OE_Ignore. This is necessary for the correct constraint check
3264 ** processing (in sqlite3GenerateConstraintChecks()) as part of 3384 ** processing (in sqlite3GenerateConstraintChecks()) as part of
3265 ** UPDATE and INSERT statements. 3385 ** UPDATE and INSERT statements.
3266 */ 3386 */
3267 if( db->init.busy || pTblName==0 ){ 3387 if( db->init.busy || pTblName==0 ){
3268 if( onError!=OE_Replace || pTab->pIndex==0 3388 if( onError!=OE_Replace || pTab->pIndex==0
(...skipping 382 matching lines...) Expand 10 before | Expand all | Expand 10 after
3651 ** Delete an entire SrcList including all its substructure. 3771 ** Delete an entire SrcList including all its substructure.
3652 */ 3772 */
3653 void sqlite3SrcListDelete(sqlite3 *db, SrcList *pList){ 3773 void sqlite3SrcListDelete(sqlite3 *db, SrcList *pList){
3654 int i; 3774 int i;
3655 struct SrcList_item *pItem; 3775 struct SrcList_item *pItem;
3656 if( pList==0 ) return; 3776 if( pList==0 ) return;
3657 for(pItem=pList->a, i=0; i<pList->nSrc; i++, pItem++){ 3777 for(pItem=pList->a, i=0; i<pList->nSrc; i++, pItem++){
3658 sqlite3DbFree(db, pItem->zDatabase); 3778 sqlite3DbFree(db, pItem->zDatabase);
3659 sqlite3DbFree(db, pItem->zName); 3779 sqlite3DbFree(db, pItem->zName);
3660 sqlite3DbFree(db, pItem->zAlias); 3780 sqlite3DbFree(db, pItem->zAlias);
3661 sqlite3DbFree(db, pItem->zIndex); 3781 if( pItem->fg.isIndexedBy ) sqlite3DbFree(db, pItem->u1.zIndexedBy);
3782 if( pItem->fg.isTabFunc ) sqlite3ExprListDelete(db, pItem->u1.pFuncArg);
3662 sqlite3DeleteTable(db, pItem->pTab); 3783 sqlite3DeleteTable(db, pItem->pTab);
3663 sqlite3SelectDelete(db, pItem->pSelect); 3784 sqlite3SelectDelete(db, pItem->pSelect);
3664 sqlite3ExprDelete(db, pItem->pOn); 3785 sqlite3ExprDelete(db, pItem->pOn);
3665 sqlite3IdListDelete(db, pItem->pUsing); 3786 sqlite3IdListDelete(db, pItem->pUsing);
3666 } 3787 }
3667 sqlite3DbFree(db, pList); 3788 sqlite3DbFree(db, pList);
3668 } 3789 }
3669 3790
3670 /* 3791 /*
3671 ** This routine is called by the parser to add a new term to the 3792 ** This routine is called by the parser to add a new term to the
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
3724 } 3845 }
3725 3846
3726 /* 3847 /*
3727 ** Add an INDEXED BY or NOT INDEXED clause to the most recently added 3848 ** Add an INDEXED BY or NOT INDEXED clause to the most recently added
3728 ** element of the source-list passed as the second argument. 3849 ** element of the source-list passed as the second argument.
3729 */ 3850 */
3730 void sqlite3SrcListIndexedBy(Parse *pParse, SrcList *p, Token *pIndexedBy){ 3851 void sqlite3SrcListIndexedBy(Parse *pParse, SrcList *p, Token *pIndexedBy){
3731 assert( pIndexedBy!=0 ); 3852 assert( pIndexedBy!=0 );
3732 if( p && ALWAYS(p->nSrc>0) ){ 3853 if( p && ALWAYS(p->nSrc>0) ){
3733 struct SrcList_item *pItem = &p->a[p->nSrc-1]; 3854 struct SrcList_item *pItem = &p->a[p->nSrc-1];
3734 assert( pItem->notIndexed==0 && pItem->zIndex==0 ); 3855 assert( pItem->fg.notIndexed==0 );
3856 assert( pItem->fg.isIndexedBy==0 );
3857 assert( pItem->fg.isTabFunc==0 );
3735 if( pIndexedBy->n==1 && !pIndexedBy->z ){ 3858 if( pIndexedBy->n==1 && !pIndexedBy->z ){
3736 /* A "NOT INDEXED" clause was supplied. See parse.y 3859 /* A "NOT INDEXED" clause was supplied. See parse.y
3737 ** construct "indexed_opt" for details. */ 3860 ** construct "indexed_opt" for details. */
3738 pItem->notIndexed = 1; 3861 pItem->fg.notIndexed = 1;
3739 }else{ 3862 }else{
3740 pItem->zIndex = sqlite3NameFromToken(pParse->db, pIndexedBy); 3863 pItem->u1.zIndexedBy = sqlite3NameFromToken(pParse->db, pIndexedBy);
3864 pItem->fg.isIndexedBy = (pItem->u1.zIndexedBy!=0);
3741 } 3865 }
3742 } 3866 }
3743 } 3867 }
3744 3868
3745 /* 3869 /*
3870 ** Add the list of function arguments to the SrcList entry for a
3871 ** table-valued-function.
3872 */
3873 void sqlite3SrcListFuncArgs(Parse *pParse, SrcList *p, ExprList *pList){
3874 if( p ){
3875 struct SrcList_item *pItem = &p->a[p->nSrc-1];
3876 assert( pItem->fg.notIndexed==0 );
3877 assert( pItem->fg.isIndexedBy==0 );
3878 assert( pItem->fg.isTabFunc==0 );
3879 pItem->u1.pFuncArg = pList;
3880 pItem->fg.isTabFunc = 1;
3881 }else{
3882 sqlite3ExprListDelete(pParse->db, pList);
3883 }
3884 }
3885
3886 /*
3746 ** When building up a FROM clause in the parser, the join operator 3887 ** When building up a FROM clause in the parser, the join operator
3747 ** is initially attached to the left operand. But the code generator 3888 ** is initially attached to the left operand. But the code generator
3748 ** expects the join operator to be on the right operand. This routine 3889 ** expects the join operator to be on the right operand. This routine
3749 ** Shifts all join operators from left to right for an entire FROM 3890 ** Shifts all join operators from left to right for an entire FROM
3750 ** clause. 3891 ** clause.
3751 ** 3892 **
3752 ** Example: Suppose the join is like this: 3893 ** Example: Suppose the join is like this:
3753 ** 3894 **
3754 ** A natural cross join B 3895 ** A natural cross join B
3755 ** 3896 **
3756 ** The operator is "natural cross join". The A and B operands are stored 3897 ** The operator is "natural cross join". The A and B operands are stored
3757 ** in p->a[0] and p->a[1], respectively. The parser initially stores the 3898 ** in p->a[0] and p->a[1], respectively. The parser initially stores the
3758 ** operator with A. This routine shifts that operator over to B. 3899 ** operator with A. This routine shifts that operator over to B.
3759 */ 3900 */
3760 void sqlite3SrcListShiftJoinType(SrcList *p){ 3901 void sqlite3SrcListShiftJoinType(SrcList *p){
3761 if( p ){ 3902 if( p ){
3762 int i; 3903 int i;
3763 assert( p->a || p->nSrc==0 );
3764 for(i=p->nSrc-1; i>0; i--){ 3904 for(i=p->nSrc-1; i>0; i--){
3765 p->a[i].jointype = p->a[i-1].jointype; 3905 p->a[i].fg.jointype = p->a[i-1].fg.jointype;
3766 } 3906 }
3767 p->a[0].jointype = 0; 3907 p->a[0].fg.jointype = 0;
3768 } 3908 }
3769 } 3909 }
3770 3910
3771 /* 3911 /*
3772 ** Begin a transaction 3912 ** Begin a transaction
3773 */ 3913 */
3774 void sqlite3BeginTransaction(Parse *pParse, int type){ 3914 void sqlite3BeginTransaction(Parse *pParse, int type){
3775 sqlite3 *db; 3915 sqlite3 *db;
3776 Vdbe *v; 3916 Vdbe *v;
3777 int i; 3917 int i;
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
4000 void sqlite3UniqueConstraint( 4140 void sqlite3UniqueConstraint(
4001 Parse *pParse, /* Parsing context */ 4141 Parse *pParse, /* Parsing context */
4002 int onError, /* Constraint type */ 4142 int onError, /* Constraint type */
4003 Index *pIdx /* The index that triggers the constraint */ 4143 Index *pIdx /* The index that triggers the constraint */
4004 ){ 4144 ){
4005 char *zErr; 4145 char *zErr;
4006 int j; 4146 int j;
4007 StrAccum errMsg; 4147 StrAccum errMsg;
4008 Table *pTab = pIdx->pTable; 4148 Table *pTab = pIdx->pTable;
4009 4149
4010 sqlite3StrAccumInit(&errMsg, 0, 0, 200); 4150 sqlite3StrAccumInit(&errMsg, pParse->db, 0, 0, 200);
4011 errMsg.db = pParse->db; 4151 if( pIdx->aColExpr ){
4012 for(j=0; j<pIdx->nKeyCol; j++){ 4152 sqlite3XPrintf(&errMsg, 0, "index '%q'", pIdx->zName);
4013 char *zCol = pTab->aCol[pIdx->aiColumn[j]].zName; 4153 }else{
4014 if( j ) sqlite3StrAccumAppend(&errMsg, ", ", 2); 4154 for(j=0; j<pIdx->nKeyCol; j++){
4015 sqlite3StrAccumAppendAll(&errMsg, pTab->zName); 4155 char *zCol;
4016 sqlite3StrAccumAppend(&errMsg, ".", 1); 4156 assert( pIdx->aiColumn[j]>=0 );
4017 sqlite3StrAccumAppendAll(&errMsg, zCol); 4157 zCol = pTab->aCol[pIdx->aiColumn[j]].zName;
4158 if( j ) sqlite3StrAccumAppend(&errMsg, ", ", 2);
4159 sqlite3XPrintf(&errMsg, 0, "%s.%s", pTab->zName, zCol);
4160 }
4018 } 4161 }
4019 zErr = sqlite3StrAccumFinish(&errMsg); 4162 zErr = sqlite3StrAccumFinish(&errMsg);
4020 sqlite3HaltConstraint(pParse, 4163 sqlite3HaltConstraint(pParse,
4021 IsPrimaryKeyIndex(pIdx) ? SQLITE_CONSTRAINT_PRIMARYKEY 4164 IsPrimaryKeyIndex(pIdx) ? SQLITE_CONSTRAINT_PRIMARYKEY
4022 : SQLITE_CONSTRAINT_UNIQUE, 4165 : SQLITE_CONSTRAINT_UNIQUE,
4023 onError, zErr, P4_DYNAMIC, P5_ConstraintUnique); 4166 onError, zErr, P4_DYNAMIC, P5_ConstraintUnique);
4024 } 4167 }
4025 4168
4026 4169
4027 /* 4170 /*
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
4179 ** Return a KeyInfo structure that is appropriate for the given Index. 4322 ** Return a KeyInfo structure that is appropriate for the given Index.
4180 ** 4323 **
4181 ** The KeyInfo structure for an index is cached in the Index object. 4324 ** The KeyInfo structure for an index is cached in the Index object.
4182 ** So there might be multiple references to the returned pointer. The 4325 ** So there might be multiple references to the returned pointer. The
4183 ** caller should not try to modify the KeyInfo object. 4326 ** caller should not try to modify the KeyInfo object.
4184 ** 4327 **
4185 ** The caller should invoke sqlite3KeyInfoUnref() on the returned object 4328 ** The caller should invoke sqlite3KeyInfoUnref() on the returned object
4186 ** when it has finished using it. 4329 ** when it has finished using it.
4187 */ 4330 */
4188 KeyInfo *sqlite3KeyInfoOfIndex(Parse *pParse, Index *pIdx){ 4331 KeyInfo *sqlite3KeyInfoOfIndex(Parse *pParse, Index *pIdx){
4332 int i;
4333 int nCol = pIdx->nColumn;
4334 int nKey = pIdx->nKeyCol;
4335 KeyInfo *pKey;
4189 if( pParse->nErr ) return 0; 4336 if( pParse->nErr ) return 0;
4190 #ifndef SQLITE_OMIT_SHARED_CACHE 4337 if( pIdx->uniqNotNull ){
4191 if( pIdx->pKeyInfo && pIdx->pKeyInfo->db!=pParse->db ){ 4338 pKey = sqlite3KeyInfoAlloc(pParse->db, nKey, nCol-nKey);
4192 sqlite3KeyInfoUnref(pIdx->pKeyInfo); 4339 }else{
4193 pIdx->pKeyInfo = 0; 4340 pKey = sqlite3KeyInfoAlloc(pParse->db, nCol, 0);
4194 } 4341 }
4195 #endif 4342 if( pKey ){
4196 if( pIdx->pKeyInfo==0 ){ 4343 assert( sqlite3KeyInfoIsWriteable(pKey) );
4197 int i; 4344 for(i=0; i<nCol; i++){
4198 int nCol = pIdx->nColumn; 4345 const char *zColl = pIdx->azColl[i];
4199 int nKey = pIdx->nKeyCol; 4346 pKey->aColl[i] = zColl==sqlite3StrBINARY ? 0 :
4200 KeyInfo *pKey; 4347 sqlite3LocateCollSeq(pParse, zColl);
4201 if( pIdx->uniqNotNull ){ 4348 pKey->aSortOrder[i] = pIdx->aSortOrder[i];
4202 pKey = sqlite3KeyInfoAlloc(pParse->db, nKey, nCol-nKey);
4203 }else{
4204 pKey = sqlite3KeyInfoAlloc(pParse->db, nCol, 0);
4205 } 4349 }
4206 if( pKey ){ 4350 if( pParse->nErr ){
4207 assert( sqlite3KeyInfoIsWriteable(pKey) ); 4351 sqlite3KeyInfoUnref(pKey);
4208 for(i=0; i<nCol; i++){ 4352 pKey = 0;
4209 char *zColl = pIdx->azColl[i];
4210 assert( zColl!=0 );
4211 pKey->aColl[i] = strcmp(zColl,"BINARY")==0 ? 0 :
4212 sqlite3LocateCollSeq(pParse, zColl);
4213 pKey->aSortOrder[i] = pIdx->aSortOrder[i];
4214 }
4215 if( pParse->nErr ){
4216 sqlite3KeyInfoUnref(pKey);
4217 }else{
4218 pIdx->pKeyInfo = pKey;
4219 }
4220 } 4353 }
4221 } 4354 }
4222 return sqlite3KeyInfoRef(pIdx->pKeyInfo); 4355 return pKey;
4223 } 4356 }
4224 4357
4225 #ifndef SQLITE_OMIT_CTE 4358 #ifndef SQLITE_OMIT_CTE
4226 /* 4359 /*
4227 ** This routine is invoked once per CTE by the parser while parsing a 4360 ** This routine is invoked once per CTE by the parser while parsing a
4228 ** WITH clause. 4361 ** WITH clause.
4229 */ 4362 */
4230 With *sqlite3WithAdd( 4363 With *sqlite3WithAdd(
4231 Parse *pParse, /* Parsing context */ 4364 Parse *pParse, /* Parsing context */
4232 With *pWith, /* Existing WITH clause, or NULL */ 4365 With *pWith, /* Existing WITH clause, or NULL */
(...skipping 28 matching lines...) Expand all
4261 4394
4262 if( pNew==0 ){ 4395 if( pNew==0 ){
4263 sqlite3ExprListDelete(db, pArglist); 4396 sqlite3ExprListDelete(db, pArglist);
4264 sqlite3SelectDelete(db, pQuery); 4397 sqlite3SelectDelete(db, pQuery);
4265 sqlite3DbFree(db, zName); 4398 sqlite3DbFree(db, zName);
4266 pNew = pWith; 4399 pNew = pWith;
4267 }else{ 4400 }else{
4268 pNew->a[pNew->nCte].pSelect = pQuery; 4401 pNew->a[pNew->nCte].pSelect = pQuery;
4269 pNew->a[pNew->nCte].pCols = pArglist; 4402 pNew->a[pNew->nCte].pCols = pArglist;
4270 pNew->a[pNew->nCte].zName = zName; 4403 pNew->a[pNew->nCte].zName = zName;
4271 pNew->a[pNew->nCte].zErr = 0; 4404 pNew->a[pNew->nCte].zCteErr = 0;
4272 pNew->nCte++; 4405 pNew->nCte++;
4273 } 4406 }
4274 4407
4275 return pNew; 4408 return pNew;
4276 } 4409 }
4277 4410
4278 /* 4411 /*
4279 ** Free the contents of the With object passed as the second argument. 4412 ** Free the contents of the With object passed as the second argument.
4280 */ 4413 */
4281 void sqlite3WithDelete(sqlite3 *db, With *pWith){ 4414 void sqlite3WithDelete(sqlite3 *db, With *pWith){
4282 if( pWith ){ 4415 if( pWith ){
4283 int i; 4416 int i;
4284 for(i=0; i<pWith->nCte; i++){ 4417 for(i=0; i<pWith->nCte; i++){
4285 struct Cte *pCte = &pWith->a[i]; 4418 struct Cte *pCte = &pWith->a[i];
4286 sqlite3ExprListDelete(db, pCte->pCols); 4419 sqlite3ExprListDelete(db, pCte->pCols);
4287 sqlite3SelectDelete(db, pCte->pSelect); 4420 sqlite3SelectDelete(db, pCte->pSelect);
4288 sqlite3DbFree(db, pCte->zName); 4421 sqlite3DbFree(db, pCte->zName);
4289 } 4422 }
4290 sqlite3DbFree(db, pWith); 4423 sqlite3DbFree(db, pWith);
4291 } 4424 }
4292 } 4425 }
4293 #endif /* !defined(SQLITE_OMIT_CTE) */ 4426 #endif /* !defined(SQLITE_OMIT_CTE) */
OLDNEW
« no previous file with comments | « third_party/sqlite/sqlite-src-3100200/src/btreeInt.h ('k') | third_party/sqlite/sqlite-src-3100200/src/callback.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698