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