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