xref: /illumos-gate/usr/src/lib/libsqlite/src/main.c (revision 1da57d55)
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 ** Main file for the SQLite library.  The routines in this file
13 ** implement the programmer interface to the library.  Routines in
14 ** other files are for internal use by SQLite and should not be
15 ** accessed by users of the library.
16 **
17 ** $Id: main.c,v 1.164.2.2 2004/06/26 14:40:05 drh Exp $
18 */
19 #include "sqliteInt.h"
20 #include "os.h"
21 #include <ctype.h>
22 
23 /*
24 ** A pointer to this structure is used to communicate information
25 ** from sqliteInit into the sqliteInitCallback.
26 */
27 typedef struct {
28   sqlite *db;         /* The database being initialized */
29   char **pzErrMsg;    /* Error message stored here */
30 } InitData;
31 
32 /*
33 ** Fill the InitData structure with an error message that indicates
34 ** that the database is corrupt.
35 */
corruptSchema(InitData * pData,const char * zExtra)36 static void corruptSchema(InitData *pData, const char *zExtra){
37   sqliteSetString(pData->pzErrMsg, "malformed database schema",
38      zExtra!=0 && zExtra[0]!=0 ? " - " : (char*)0, zExtra, (char*)0);
39 }
40 
41 /*
42 ** This is the callback routine for the code that initializes the
43 ** database.  See sqliteInit() below for additional information.
44 **
45 ** Each callback contains the following information:
46 **
47 **     argv[0] = "file-format" or "schema-cookie" or "table" or "index"
48 **     argv[1] = table or index name or meta statement type.
49 **     argv[2] = root page number for table or index.  NULL for meta.
50 **     argv[3] = SQL text for a CREATE TABLE or CREATE INDEX statement.
51 **     argv[4] = "1" for temporary files, "0" for main database, "2" or more
52 **               for auxiliary database files.
53 **
54 */
55 static
sqliteInitCallback(void * pInit,int argc,char ** argv,char ** azColName)56 int sqliteInitCallback(void *pInit, int argc, char **argv, char **azColName){
57   InitData *pData = (InitData*)pInit;
58   int nErr = 0;
59 
60   assert( argc==5 );
61   if( argv==0 ) return 0;   /* Might happen if EMPTY_RESULT_CALLBACKS are on */
62   if( argv[0]==0 ){
63     corruptSchema(pData, 0);
64     return 1;
65   }
66   switch( argv[0][0] ){
67     case 'v':
68     case 'i':
69     case 't': {  /* CREATE TABLE, CREATE INDEX, or CREATE VIEW statements */
70       sqlite *db = pData->db;
71       if( argv[2]==0 || argv[4]==0 ){
72         corruptSchema(pData, 0);
73         return 1;
74       }
75       if( argv[3] && argv[3][0] ){
76         /* Call the parser to process a CREATE TABLE, INDEX or VIEW.
77         ** But because db->init.busy is set to 1, no VDBE code is generated
78         ** or executed.  All the parser does is build the internal data
79         ** structures that describe the table, index, or view.
80         */
81         char *zErr;
82         assert( db->init.busy );
83         db->init.iDb = atoi(argv[4]);
84         assert( db->init.iDb>=0 && db->init.iDb<db->nDb );
85         db->init.newTnum = atoi(argv[2]);
86         if( sqlite_exec(db, argv[3], 0, 0, &zErr) ){
87           corruptSchema(pData, zErr);
88           sqlite_freemem(zErr);
89         }
90         db->init.iDb = 0;
91       }else{
92         /* If the SQL column is blank it means this is an index that
93         ** was created to be the PRIMARY KEY or to fulfill a UNIQUE
94         ** constraint for a CREATE TABLE.  The index should have already
95         ** been created when we processed the CREATE TABLE.  All we have
96         ** to do here is record the root page number for that index.
97         */
98         int iDb;
99         Index *pIndex;
100 
101         iDb = atoi(argv[4]);
102         assert( iDb>=0 && iDb<db->nDb );
103         pIndex = sqliteFindIndex(db, argv[1], db->aDb[iDb].zName);
104         if( pIndex==0 || pIndex->tnum!=0 ){
105           /* This can occur if there exists an index on a TEMP table which
106           ** has the same name as another index on a permanent index.  Since
107           ** the permanent table is hidden by the TEMP table, we can also
108           ** safely ignore the index on the permanent table.
109           */
110           /* Do Nothing */;
111         }else{
112           pIndex->tnum = atoi(argv[2]);
113         }
114       }
115       break;
116     }
117     default: {
118       /* This can not happen! */
119       nErr = 1;
120       assert( nErr==0 );
121     }
122   }
123   return nErr;
124 }
125 
126 /*
127 ** This is a callback procedure used to reconstruct a table.  The
128 ** name of the table to be reconstructed is passed in as argv[0].
129 **
130 ** This routine is used to automatically upgrade a database from
131 ** format version 1 or 2 to version 3.  The correct operation of
132 ** this routine relys on the fact that no indices are used when
133 ** copying a table out to a temporary file.
134 **
135 ** The change from version 2 to version 3 occurred between SQLite
136 ** version 2.5.6 and 2.6.0 on 2002-July-18.
137 */
138 static
upgrade_3_callback(void * pInit,int argc,char ** argv,char ** NotUsed)139 int upgrade_3_callback(void *pInit, int argc, char **argv, char **NotUsed){
140   InitData *pData = (InitData*)pInit;
141   int rc;
142   Table *pTab;
143   Trigger *pTrig;
144   char *zErr = 0;
145 
146   pTab = sqliteFindTable(pData->db, argv[0], 0);
147   assert( pTab!=0 );
148   assert( sqliteStrICmp(pTab->zName, argv[0])==0 );
149   if( pTab ){
150     pTrig = pTab->pTrigger;
151     pTab->pTrigger = 0;  /* Disable all triggers before rebuilding the table */
152   }
153   rc = sqlite_exec_printf(pData->db,
154     "CREATE TEMP TABLE sqlite_x AS SELECT * FROM '%q'; "
155     "DELETE FROM '%q'; "
156     "INSERT INTO '%q' SELECT * FROM sqlite_x; "
157     "DROP TABLE sqlite_x;",
158     0, 0, &zErr, argv[0], argv[0], argv[0]);
159   if( zErr ){
160     if( *pData->pzErrMsg ) sqlite_freemem(*pData->pzErrMsg);
161     *pData->pzErrMsg = zErr;
162   }
163 
164   /* If an error occurred in the SQL above, then the transaction will
165   ** rollback which will delete the internal symbol tables.  This will
166   ** cause the structure that pTab points to be deleted.  In case that
167   ** happened, we need to refetch pTab.
168   */
169   pTab = sqliteFindTable(pData->db, argv[0], 0);
170   if( pTab ){
171     assert( sqliteStrICmp(pTab->zName, argv[0])==0 );
172     pTab->pTrigger = pTrig;  /* Re-enable triggers */
173   }
174   return rc!=SQLITE_OK;
175 }
176 
177 
178 
179 /*
180 ** Attempt to read the database schema and initialize internal
181 ** data structures for a single database file.  The index of the
182 ** database file is given by iDb.  iDb==0 is used for the main
183 ** database.  iDb==1 should never be used.  iDb>=2 is used for
184 ** auxiliary databases.  Return one of the SQLITE_ error codes to
185 ** indicate success or failure.
186 */
sqliteInitOne(sqlite * db,int iDb,char ** pzErrMsg)187 static int sqliteInitOne(sqlite *db, int iDb, char **pzErrMsg){
188   int rc;
189   BtCursor *curMain;
190   int size;
191   Table *pTab;
192   char const *azArg[6];
193   char zDbNum[30];
194   int meta[SQLITE_N_BTREE_META];
195   InitData initData;
196   char const *zMasterSchema;
197   char const *zMasterName;
198   char *zSql = 0;
199 
200   /*
201   ** The master database table has a structure like this
202   */
203   static char master_schema[] =
204      "CREATE TABLE sqlite_master(\n"
205      "  type text,\n"
206      "  name text,\n"
207      "  tbl_name text,\n"
208      "  rootpage integer,\n"
209      "  sql text\n"
210      ")"
211   ;
212   static char temp_master_schema[] =
213      "CREATE TEMP TABLE sqlite_temp_master(\n"
214      "  type text,\n"
215      "  name text,\n"
216      "  tbl_name text,\n"
217      "  rootpage integer,\n"
218      "  sql text\n"
219      ")"
220   ;
221 
222   assert( iDb>=0 && iDb<db->nDb );
223 
224   /* zMasterSchema and zInitScript are set to point at the master schema
225   ** and initialisation script appropriate for the database being
226   ** initialised. zMasterName is the name of the master table.
227   */
228   if( iDb==1 ){
229     zMasterSchema = temp_master_schema;
230     zMasterName = TEMP_MASTER_NAME;
231   }else{
232     zMasterSchema = master_schema;
233     zMasterName = MASTER_NAME;
234   }
235 
236   /* Construct the schema table.
237   */
238   sqliteSafetyOff(db);
239   azArg[0] = "table";
240   azArg[1] = zMasterName;
241   azArg[2] = "2";
242   azArg[3] = zMasterSchema;
243   sprintf(zDbNum, "%d", iDb);
244   azArg[4] = zDbNum;
245   azArg[5] = 0;
246   initData.db = db;
247   initData.pzErrMsg = pzErrMsg;
248   sqliteInitCallback(&initData, 5, (char **)azArg, 0);
249   pTab = sqliteFindTable(db, zMasterName, db->aDb[iDb].zName);
250   if( pTab ){
251     pTab->readOnly = 1;
252   }else{
253     return SQLITE_NOMEM;
254   }
255   sqliteSafetyOn(db);
256 
257   /* Create a cursor to hold the database open
258   */
259   if( db->aDb[iDb].pBt==0 ) return SQLITE_OK;
260   rc = sqliteBtreeCursor(db->aDb[iDb].pBt, 2, 0, &curMain);
261   if( rc ){
262     sqliteSetString(pzErrMsg, sqlite_error_string(rc), (char*)0);
263     return rc;
264   }
265 
266   /* Get the database meta information
267   */
268   rc = sqliteBtreeGetMeta(db->aDb[iDb].pBt, meta);
269   if( rc ){
270     sqliteSetString(pzErrMsg, sqlite_error_string(rc), (char*)0);
271     sqliteBtreeCloseCursor(curMain);
272     return rc;
273   }
274   db->aDb[iDb].schema_cookie = meta[1];
275   if( iDb==0 ){
276     db->next_cookie = meta[1];
277     db->file_format = meta[2];
278     size = meta[3];
279     if( size==0 ){ size = MAX_PAGES; }
280     db->cache_size = size;
281     db->safety_level = meta[4];
282     if( meta[6]>0 && meta[6]<=2 && db->temp_store==0 ){
283       db->temp_store = meta[6];
284     }
285     if( db->safety_level==0 ) db->safety_level = 2;
286 
287     /*
288     **  file_format==1    Version 2.1.0.
289     **  file_format==2    Version 2.2.0. Add support for INTEGER PRIMARY KEY.
290     **  file_format==3    Version 2.6.0. Fix empty-string index bug.
291     **  file_format==4    Version 2.7.0. Add support for separate numeric and
292     **                    text datatypes.
293     */
294     if( db->file_format==0 ){
295       /* This happens if the database was initially empty */
296       db->file_format = 4;
297     }else if( db->file_format>4 ){
298       sqliteBtreeCloseCursor(curMain);
299       sqliteSetString(pzErrMsg, "unsupported file format", (char*)0);
300       return SQLITE_ERROR;
301     }
302   }else if( iDb!=1 && (db->file_format!=meta[2] || db->file_format<4) ){
303     assert( db->file_format>=4 );
304     if( meta[2]==0 ){
305       sqliteSetString(pzErrMsg, "cannot attach empty database: ",
306          db->aDb[iDb].zName, (char*)0);
307     }else{
308       sqliteSetString(pzErrMsg, "incompatible file format in auxiliary "
309          "database: ", db->aDb[iDb].zName, (char*)0);
310     }
311     sqliteBtreeClose(db->aDb[iDb].pBt);
312     db->aDb[iDb].pBt = 0;
313     return SQLITE_FORMAT;
314   }
315   sqliteBtreeSetCacheSize(db->aDb[iDb].pBt, db->cache_size);
316   sqliteBtreeSetSafetyLevel(db->aDb[iDb].pBt, meta[4]==0 ? 2 : meta[4]);
317 
318   /* Read the schema information out of the schema tables
319   */
320   assert( db->init.busy );
321   sqliteSafetyOff(db);
322 
323   /* The following SQL will read the schema from the master tables.
324   ** The first version works with SQLite file formats 2 or greater.
325   ** The second version is for format 1 files.
326   **
327   ** Beginning with file format 2, the rowid for new table entries
328   ** (including entries in sqlite_master) is an increasing integer.
329   ** So for file format 2 and later, we can play back sqlite_master
330   ** and all the CREATE statements will appear in the right order.
331   ** But with file format 1, table entries were random and so we
332   ** have to make sure the CREATE TABLEs occur before their corresponding
333   ** CREATE INDEXs.  (We don't have to deal with CREATE VIEW or
334   ** CREATE TRIGGER in file format 1 because those constructs did
335   ** not exist then.)
336   */
337   if( db->file_format>=2 ){
338     sqliteSetString(&zSql,
339         "SELECT type, name, rootpage, sql, ", zDbNum, " FROM \"",
340        db->aDb[iDb].zName, "\".", zMasterName, (char*)0);
341   }else{
342     sqliteSetString(&zSql,
343         "SELECT type, name, rootpage, sql, ", zDbNum, " FROM \"",
344        db->aDb[iDb].zName, "\".", zMasterName,
345        " WHERE type IN ('table', 'index')"
346        " ORDER BY CASE type WHEN 'table' THEN 0 ELSE 1 END", (char*)0);
347   }
348   rc = sqlite_exec(db, zSql, sqliteInitCallback, &initData, 0);
349 
350   sqliteFree(zSql);
351   sqliteSafetyOn(db);
352   sqliteBtreeCloseCursor(curMain);
353   if( sqlite_malloc_failed ){
354     sqliteSetString(pzErrMsg, "out of memory", (char*)0);
355     rc = SQLITE_NOMEM;
356     sqliteResetInternalSchema(db, 0);
357   }
358   if( rc==SQLITE_OK ){
359     DbSetProperty(db, iDb, DB_SchemaLoaded);
360   }else{
361     sqliteResetInternalSchema(db, iDb);
362   }
363   return rc;
364 }
365 
366 /*
367 ** Initialize all database files - the main database file, the file
368 ** used to store temporary tables, and any additional database files
369 ** created using ATTACH statements.  Return a success code.  If an
370 ** error occurs, write an error message into *pzErrMsg.
371 **
372 ** After the database is initialized, the SQLITE_Initialized
373 ** bit is set in the flags field of the sqlite structure.  An
374 ** attempt is made to initialize the database as soon as it
375 ** is opened.  If that fails (perhaps because another process
376 ** has the sqlite_master table locked) than another attempt
377 ** is made the first time the database is accessed.
378 */
sqliteInit(sqlite * db,char ** pzErrMsg)379 int sqliteInit(sqlite *db, char **pzErrMsg){
380   int i, rc;
381 
382   if( db->init.busy ) return SQLITE_OK;
383   assert( (db->flags & SQLITE_Initialized)==0 );
384   rc = SQLITE_OK;
385   db->init.busy = 1;
386   for(i=0; rc==SQLITE_OK && i<db->nDb; i++){
387     if( DbHasProperty(db, i, DB_SchemaLoaded) || i==1 ) continue;
388     rc = sqliteInitOne(db, i, pzErrMsg);
389     if( rc ){
390       sqliteResetInternalSchema(db, i);
391     }
392   }
393 
394   /* Once all the other databases have been initialised, load the schema
395   ** for the TEMP database. This is loaded last, as the TEMP database
396   ** schema may contain references to objects in other databases.
397   */
398   if( rc==SQLITE_OK && db->nDb>1 && !DbHasProperty(db, 1, DB_SchemaLoaded) ){
399     rc = sqliteInitOne(db, 1, pzErrMsg);
400     if( rc ){
401       sqliteResetInternalSchema(db, 1);
402     }
403   }
404 
405   db->init.busy = 0;
406   if( rc==SQLITE_OK ){
407     db->flags |= SQLITE_Initialized;
408     sqliteCommitInternalChanges(db);
409   }
410 
411   /* If the database is in formats 1 or 2, then upgrade it to
412   ** version 3.  This will reconstruct all indices.  If the
413   ** upgrade fails for any reason (ex: out of disk space, database
414   ** is read only, interrupt received, etc.) then fail the init.
415   */
416   if( rc==SQLITE_OK && db->file_format<3 ){
417     char *zErr = 0;
418     InitData initData;
419     int meta[SQLITE_N_BTREE_META];
420 
421     db->magic = SQLITE_MAGIC_OPEN;
422     initData.db = db;
423     initData.pzErrMsg = &zErr;
424     db->file_format = 3;
425     rc = sqlite_exec(db,
426       "BEGIN; SELECT name FROM sqlite_master WHERE type='table';",
427       upgrade_3_callback,
428       &initData,
429       &zErr);
430     if( rc==SQLITE_OK ){
431       sqliteBtreeGetMeta(db->aDb[0].pBt, meta);
432       meta[2] = 4;
433       sqliteBtreeUpdateMeta(db->aDb[0].pBt, meta);
434       sqlite_exec(db, "COMMIT", 0, 0, 0);
435     }
436     if( rc!=SQLITE_OK ){
437       sqliteSetString(pzErrMsg,
438         "unable to upgrade database to the version 2.6 format",
439         zErr ? ": " : 0, zErr, (char*)0);
440     }
441     sqlite_freemem(zErr);
442   }
443 
444   if( rc!=SQLITE_OK ){
445     db->flags &= ~SQLITE_Initialized;
446   }
447   return rc;
448 }
449 
450 /*
451 ** The version of the library
452 */
453 const char rcsid[] = "@(#) \044Id: SQLite version " SQLITE_VERSION " $";
454 const char sqlite_version[] = SQLITE_VERSION;
455 
456 /*
457 ** Does the library expect data to be encoded as UTF-8 or iso8859?  The
458 ** following global constant always lets us know.
459 */
460 #ifdef SQLITE_UTF8
461 const char sqlite_encoding[] = "UTF-8";
462 #else
463 const char sqlite_encoding[] = "iso8859";
464 #endif
465 
466 /*
467 ** Open a new SQLite database.  Construct an "sqlite" structure to define
468 ** the state of this database and return a pointer to that structure.
469 **
470 ** An attempt is made to initialize the in-memory data structures that
471 ** hold the database schema.  But if this fails (because the schema file
472 ** is locked) then that step is deferred until the first call to
473 ** sqlite_exec().
474 */
sqlite_open(const char * zFilename,int mode,char ** pzErrMsg)475 sqlite *sqlite_open(const char *zFilename, int mode, char **pzErrMsg){
476   sqlite *db;
477   int rc, i;
478 
479   /* Allocate the sqlite data structure */
480   db = sqliteMalloc( sizeof(sqlite) );
481   if( pzErrMsg ) *pzErrMsg = 0;
482   if( db==0 ) goto no_mem_on_open;
483   db->onError = OE_Default;
484   db->priorNewRowid = 0;
485   db->magic = SQLITE_MAGIC_BUSY;
486   db->nDb = 2;
487   db->aDb = db->aDbStatic;
488   /* db->flags |= SQLITE_ShortColNames; */
489   sqliteHashInit(&db->aFunc, SQLITE_HASH_STRING, 1);
490   for(i=0; i<db->nDb; i++){
491     sqliteHashInit(&db->aDb[i].tblHash, SQLITE_HASH_STRING, 0);
492     sqliteHashInit(&db->aDb[i].idxHash, SQLITE_HASH_STRING, 0);
493     sqliteHashInit(&db->aDb[i].trigHash, SQLITE_HASH_STRING, 0);
494     sqliteHashInit(&db->aDb[i].aFKey, SQLITE_HASH_STRING, 1);
495   }
496 
497   /* Open the backend database driver */
498   if( zFilename[0]==':' && strcmp(zFilename,":memory:")==0 ){
499     db->temp_store = 2;
500   }
501   rc = sqliteBtreeFactory(db, zFilename, 0, MAX_PAGES, &db->aDb[0].pBt);
502   if( rc!=SQLITE_OK ){
503     switch( rc ){
504       default: {
505         sqliteSetString(pzErrMsg, "unable to open database: ",
506            zFilename, (char*)0);
507       }
508     }
509     sqliteFree(db);
510     sqliteStrRealloc(pzErrMsg);
511     return 0;
512   }
513   db->aDb[0].zName = "main";
514   db->aDb[1].zName = "temp";
515 
516   /* Attempt to read the schema */
517   sqliteRegisterBuiltinFunctions(db);
518   rc = sqliteInit(db, pzErrMsg);
519   db->magic = SQLITE_MAGIC_OPEN;
520   if( sqlite_malloc_failed ){
521     sqlite_close(db);
522     goto no_mem_on_open;
523   }else if( rc!=SQLITE_OK && rc!=SQLITE_BUSY ){
524     sqlite_close(db);
525     sqliteStrRealloc(pzErrMsg);
526     return 0;
527   }else if( pzErrMsg ){
528     sqliteFree(*pzErrMsg);
529     *pzErrMsg = 0;
530   }
531 
532   /* Return a pointer to the newly opened database structure */
533   return db;
534 
535 no_mem_on_open:
536   sqliteSetString(pzErrMsg, "out of memory", (char*)0);
537   sqliteStrRealloc(pzErrMsg);
538   return 0;
539 }
540 
541 /*
542 ** Return the ROWID of the most recent insert
543 */
sqlite_last_insert_rowid(sqlite * db)544 int sqlite_last_insert_rowid(sqlite *db){
545   return db->lastRowid;
546 }
547 
548 /*
549 ** Return the number of changes in the most recent call to sqlite_exec().
550 */
sqlite_changes(sqlite * db)551 int sqlite_changes(sqlite *db){
552   return db->nChange;
553 }
554 
555 /*
556 ** Return the number of changes produced by the last INSERT, UPDATE, or
557 ** DELETE statement to complete execution. The count does not include
558 ** changes due to SQL statements executed in trigger programs that were
559 ** triggered by that statement
560 */
sqlite_last_statement_changes(sqlite * db)561 int sqlite_last_statement_changes(sqlite *db){
562   return db->lsChange;
563 }
564 
565 /*
566 ** Close an existing SQLite database
567 */
sqlite_close(sqlite * db)568 void sqlite_close(sqlite *db){
569   HashElem *i;
570   int j;
571   db->want_to_close = 1;
572   if( sqliteSafetyCheck(db) || sqliteSafetyOn(db) ){
573     /* printf("DID NOT CLOSE\n"); fflush(stdout); */
574     return;
575   }
576   db->magic = SQLITE_MAGIC_CLOSED;
577   for(j=0; j<db->nDb; j++){
578     struct Db *pDb = &db->aDb[j];
579     if( pDb->pBt ){
580       sqliteBtreeClose(pDb->pBt);
581       pDb->pBt = 0;
582     }
583   }
584   sqliteResetInternalSchema(db, 0);
585   assert( db->nDb<=2 );
586   assert( db->aDb==db->aDbStatic );
587   for(i=sqliteHashFirst(&db->aFunc); i; i=sqliteHashNext(i)){
588     FuncDef *pFunc, *pNext;
589     for(pFunc = (FuncDef*)sqliteHashData(i); pFunc; pFunc=pNext){
590       pNext = pFunc->pNext;
591       sqliteFree(pFunc);
592     }
593   }
594   sqliteHashClear(&db->aFunc);
595   sqliteFree(db);
596 }
597 
598 /*
599 ** Rollback all database files.
600 */
sqliteRollbackAll(sqlite * db)601 void sqliteRollbackAll(sqlite *db){
602   int i;
603   for(i=0; i<db->nDb; i++){
604     if( db->aDb[i].pBt ){
605       sqliteBtreeRollback(db->aDb[i].pBt);
606       db->aDb[i].inTrans = 0;
607     }
608   }
609   sqliteResetInternalSchema(db, 0);
610   /* sqliteRollbackInternalChanges(db); */
611 }
612 
613 /*
614 ** Execute SQL code.  Return one of the SQLITE_ success/failure
615 ** codes.  Also write an error message into memory obtained from
616 ** malloc() and make *pzErrMsg point to that message.
617 **
618 ** If the SQL is a query, then for each row in the query result
619 ** the xCallback() function is called.  pArg becomes the first
620 ** argument to xCallback().  If xCallback=NULL then no callback
621 ** is invoked, even for queries.
622 */
sqlite_exec(sqlite * db,const char * zSql,sqlite_callback xCallback,void * pArg,char ** pzErrMsg)623 int sqlite_exec(
624   sqlite *db,                 /* The database on which the SQL executes */
625   const char *zSql,           /* The SQL to be executed */
626   sqlite_callback xCallback,  /* Invoke this callback routine */
627   void *pArg,                 /* First argument to xCallback() */
628   char **pzErrMsg             /* Write error messages here */
629 ){
630   int rc = SQLITE_OK;
631   const char *zLeftover;
632   sqlite_vm *pVm;
633   int nRetry = 0;
634   int nChange = 0;
635   int nCallback;
636 
637   if( zSql==0 ) return SQLITE_OK;
638   while( rc==SQLITE_OK && zSql[0] ){
639     pVm = 0;
640     rc = sqlite_compile(db, zSql, &zLeftover, &pVm, pzErrMsg);
641     if( rc!=SQLITE_OK ){
642       assert( pVm==0 || sqlite_malloc_failed );
643       return rc;
644     }
645     if( pVm==0 ){
646       /* This happens if the zSql input contained only whitespace */
647       break;
648     }
649     db->nChange += nChange;
650     nCallback = 0;
651     while(1){
652       int nArg;
653       char **azArg, **azCol;
654       rc = sqlite_step(pVm, &nArg, (const char***)&azArg,(const char***)&azCol);
655       if( rc==SQLITE_ROW ){
656         if( xCallback!=0 && xCallback(pArg, nArg, azArg, azCol) ){
657           sqlite_finalize(pVm, 0);
658           return SQLITE_ABORT;
659         }
660         nCallback++;
661       }else{
662         if( rc==SQLITE_DONE && nCallback==0
663           && (db->flags & SQLITE_NullCallback)!=0 && xCallback!=0 ){
664           xCallback(pArg, nArg, azArg, azCol);
665         }
666         rc = sqlite_finalize(pVm, pzErrMsg);
667         if( rc==SQLITE_SCHEMA && nRetry<2 ){
668           nRetry++;
669           rc = SQLITE_OK;
670           break;
671         }
672         if( db->pVdbe==0 ){
673           nChange = db->nChange;
674         }
675         nRetry = 0;
676         zSql = zLeftover;
677         while( isspace(zSql[0]) ) zSql++;
678         break;
679       }
680     }
681   }
682   return rc;
683 }
684 
685 
686 /*
687 ** Compile a single statement of SQL into a virtual machine.  Return one
688 ** of the SQLITE_ success/failure codes.  Also write an error message into
689 ** memory obtained from malloc() and make *pzErrMsg point to that message.
690 */
sqlite_compile(sqlite * db,const char * zSql,const char ** pzTail,sqlite_vm ** ppVm,char ** pzErrMsg)691 int sqlite_compile(
692   sqlite *db,                 /* The database on which the SQL executes */
693   const char *zSql,           /* The SQL to be executed */
694   const char **pzTail,        /* OUT: Next statement after the first */
695   sqlite_vm **ppVm,           /* OUT: The virtual machine */
696   char **pzErrMsg             /* OUT: Write error messages here */
697 ){
698   Parse sParse;
699 
700   if( pzErrMsg ) *pzErrMsg = 0;
701   if( sqliteSafetyOn(db) ) goto exec_misuse;
702   if( !db->init.busy ){
703     if( (db->flags & SQLITE_Initialized)==0 ){
704       int rc, cnt = 1;
705       while( (rc = sqliteInit(db, pzErrMsg))==SQLITE_BUSY
706          && db->xBusyCallback
707          && db->xBusyCallback(db->pBusyArg, "", cnt++)!=0 ){}
708       if( rc!=SQLITE_OK ){
709         sqliteStrRealloc(pzErrMsg);
710         sqliteSafetyOff(db);
711         return rc;
712       }
713       if( pzErrMsg ){
714         sqliteFree(*pzErrMsg);
715         *pzErrMsg = 0;
716       }
717     }
718     if( db->file_format<3 ){
719       sqliteSafetyOff(db);
720       sqliteSetString(pzErrMsg, "obsolete database file format", (char*)0);
721       return SQLITE_ERROR;
722     }
723   }
724   assert( (db->flags & SQLITE_Initialized)!=0 || db->init.busy );
725   if( db->pVdbe==0 ){ db->nChange = 0; }
726   memset(&sParse, 0, sizeof(sParse));
727   sParse.db = db;
728   sqliteRunParser(&sParse, zSql, pzErrMsg);
729   if( db->xTrace && !db->init.busy ){
730     /* Trace only the statment that was compiled.
731     ** Make a copy of that part of the SQL string since zSQL is const
732     ** and we must pass a zero terminated string to the trace function
733     ** The copy is unnecessary if the tail pointer is pointing at the
734     ** beginnig or end of the SQL string.
735     */
736     if( sParse.zTail && sParse.zTail!=zSql && *sParse.zTail ){
737       char *tmpSql = sqliteStrNDup(zSql, sParse.zTail - zSql);
738       if( tmpSql ){
739         db->xTrace(db->pTraceArg, tmpSql);
740         free(tmpSql);
741       }else{
742         /* If a memory error occurred during the copy,
743         ** trace entire SQL string and fall through to the
744         ** sqlite_malloc_failed test to report the error.
745         */
746         db->xTrace(db->pTraceArg, zSql);
747       }
748     }else{
749       db->xTrace(db->pTraceArg, zSql);
750     }
751   }
752   if( sqlite_malloc_failed ){
753     sqliteSetString(pzErrMsg, "out of memory", (char*)0);
754     sParse.rc = SQLITE_NOMEM;
755     sqliteRollbackAll(db);
756     sqliteResetInternalSchema(db, 0);
757     db->flags &= ~SQLITE_InTrans;
758   }
759   if( sParse.rc==SQLITE_DONE ) sParse.rc = SQLITE_OK;
760   if( sParse.rc!=SQLITE_OK && pzErrMsg && *pzErrMsg==0 ){
761     sqliteSetString(pzErrMsg, sqlite_error_string(sParse.rc), (char*)0);
762   }
763   sqliteStrRealloc(pzErrMsg);
764   if( sParse.rc==SQLITE_SCHEMA ){
765     sqliteResetInternalSchema(db, 0);
766   }
767   assert( ppVm );
768   *ppVm = (sqlite_vm*)sParse.pVdbe;
769   if( pzTail ) *pzTail = sParse.zTail;
770   if( sqliteSafetyOff(db) ) goto exec_misuse;
771   return sParse.rc;
772 
773 exec_misuse:
774   if( pzErrMsg ){
775     *pzErrMsg = 0;
776     sqliteSetString(pzErrMsg, sqlite_error_string(SQLITE_MISUSE), (char*)0);
777     sqliteStrRealloc(pzErrMsg);
778   }
779   return SQLITE_MISUSE;
780 }
781 
782 
783 /*
784 ** The following routine destroys a virtual machine that is created by
785 ** the sqlite_compile() routine.
786 **
787 ** The integer returned is an SQLITE_ success/failure code that describes
788 ** the result of executing the virtual machine.  An error message is
789 ** written into memory obtained from malloc and *pzErrMsg is made to
790 ** point to that error if pzErrMsg is not NULL.  The calling routine
791 ** should use sqlite_freemem() to delete the message when it has finished
792 ** with it.
793 */
sqlite_finalize(sqlite_vm * pVm,char ** pzErrMsg)794 int sqlite_finalize(
795   sqlite_vm *pVm,            /* The virtual machine to be destroyed */
796   char **pzErrMsg            /* OUT: Write error messages here */
797 ){
798   int rc = sqliteVdbeFinalize((Vdbe*)pVm, pzErrMsg);
799   sqliteStrRealloc(pzErrMsg);
800   return rc;
801 }
802 
803 /*
804 ** Terminate the current execution of a virtual machine then
805 ** reset the virtual machine back to its starting state so that it
806 ** can be reused.  Any error message resulting from the prior execution
807 ** is written into *pzErrMsg.  A success code from the prior execution
808 ** is returned.
809 */
sqlite_reset(sqlite_vm * pVm,char ** pzErrMsg)810 int sqlite_reset(
811   sqlite_vm *pVm,            /* The virtual machine to be destroyed */
812   char **pzErrMsg            /* OUT: Write error messages here */
813 ){
814   int rc = sqliteVdbeReset((Vdbe*)pVm, pzErrMsg);
815   sqliteVdbeMakeReady((Vdbe*)pVm, -1, 0);
816   sqliteStrRealloc(pzErrMsg);
817   return rc;
818 }
819 
820 /*
821 ** Return a static string that describes the kind of error specified in the
822 ** argument.
823 */
sqlite_error_string(int rc)824 const char *sqlite_error_string(int rc){
825   const char *z;
826   switch( rc ){
827     case SQLITE_OK:         z = "not an error";                          break;
828     case SQLITE_ERROR:      z = "SQL logic error or missing database";   break;
829     case SQLITE_INTERNAL:   z = "internal SQLite implementation flaw";   break;
830     case SQLITE_PERM:       z = "access permission denied";              break;
831     case SQLITE_ABORT:      z = "callback requested query abort";        break;
832     case SQLITE_BUSY:       z = "database is locked";                    break;
833     case SQLITE_LOCKED:     z = "database table is locked";              break;
834     case SQLITE_NOMEM:      z = "out of memory";                         break;
835     case SQLITE_READONLY:   z = "attempt to write a readonly database";  break;
836     case SQLITE_INTERRUPT:  z = "interrupted";                           break;
837     case SQLITE_IOERR:      z = "disk I/O error";                        break;
838     case SQLITE_CORRUPT:    z = "database disk image is malformed";      break;
839     case SQLITE_NOTFOUND:   z = "table or record not found";             break;
840     case SQLITE_FULL:       z = "database is full";                      break;
841     case SQLITE_CANTOPEN:   z = "unable to open database file";          break;
842     case SQLITE_PROTOCOL:   z = "database locking protocol failure";     break;
843     case SQLITE_EMPTY:      z = "table contains no data";                break;
844     case SQLITE_SCHEMA:     z = "database schema has changed";           break;
845     case SQLITE_TOOBIG:     z = "too much data for one table row";       break;
846     case SQLITE_CONSTRAINT: z = "constraint failed";                     break;
847     case SQLITE_MISMATCH:   z = "datatype mismatch";                     break;
848     case SQLITE_MISUSE:     z = "library routine called out of sequence";break;
849     case SQLITE_NOLFS:      z = "kernel lacks large file support";       break;
850     case SQLITE_AUTH:       z = "authorization denied";                  break;
851     case SQLITE_FORMAT:     z = "auxiliary database format error";       break;
852     case SQLITE_RANGE:      z = "bind index out of range";               break;
853     case SQLITE_NOTADB:     z = "file is encrypted or is not a database";break;
854     default:                z = "unknown error";                         break;
855   }
856   return z;
857 }
858 
859 /*
860 ** This routine implements a busy callback that sleeps and tries
861 ** again until a timeout value is reached.  The timeout value is
862 ** an integer number of milliseconds passed in as the first
863 ** argument.
864 */
sqliteDefaultBusyCallback(void * Timeout,const char * NotUsed,int count)865 static int sqliteDefaultBusyCallback(
866  void *Timeout,           /* Maximum amount of time to wait */
867  const char *NotUsed,     /* The name of the table that is busy */
868  int count                /* Number of times table has been busy */
869 ){
870 #if SQLITE_MIN_SLEEP_MS==1
871   static const char delays[] =
872      { 1, 2, 5, 10, 15, 20, 25, 25,  25,  50,  50,  50, 100};
873   static const short int totals[] =
874      { 0, 1, 3,  8, 18, 33, 53, 78, 103, 128, 178, 228, 287};
875 # define NDELAY (sizeof(delays)/sizeof(delays[0]))
876   int timeout = (int)(long)Timeout;
877   int delay, prior;
878 
879   if( count <= NDELAY ){
880     delay = delays[count-1];
881     prior = totals[count-1];
882   }else{
883     delay = delays[NDELAY-1];
884     prior = totals[NDELAY-1] + delay*(count-NDELAY-1);
885   }
886   if( prior + delay > timeout ){
887     delay = timeout - prior;
888     if( delay<=0 ) return 0;
889   }
890   sqliteOsSleep(delay);
891   return 1;
892 #else
893   int timeout = (int)(long)Timeout;
894   if( (count+1)*1000 > timeout ){
895     return 0;
896   }
897   sqliteOsSleep(1000);
898   return 1;
899 #endif
900 }
901 
902 /*
903 ** This routine sets the busy callback for an Sqlite database to the
904 ** given callback function with the given argument.
905 */
sqlite_busy_handler(sqlite * db,int (* xBusy)(void *,const char *,int),void * pArg)906 void sqlite_busy_handler(
907   sqlite *db,
908   int (*xBusy)(void*,const char*,int),
909   void *pArg
910 ){
911   db->xBusyCallback = xBusy;
912   db->pBusyArg = pArg;
913 }
914 
915 #ifndef SQLITE_OMIT_PROGRESS_CALLBACK
916 /*
917 ** This routine sets the progress callback for an Sqlite database to the
918 ** given callback function with the given argument. The progress callback will
919 ** be invoked every nOps opcodes.
920 */
sqlite_progress_handler(sqlite * db,int nOps,int (* xProgress)(void *),void * pArg)921 void sqlite_progress_handler(
922   sqlite *db,
923   int nOps,
924   int (*xProgress)(void*),
925   void *pArg
926 ){
927   if( nOps>0 ){
928     db->xProgress = xProgress;
929     db->nProgressOps = nOps;
930     db->pProgressArg = pArg;
931   }else{
932     db->xProgress = 0;
933     db->nProgressOps = 0;
934     db->pProgressArg = 0;
935   }
936 }
937 #endif
938 
939 
940 /*
941 ** This routine installs a default busy handler that waits for the
942 ** specified number of milliseconds before returning 0.
943 */
sqlite_busy_timeout(sqlite * db,int ms)944 void sqlite_busy_timeout(sqlite *db, int ms){
945   if( ms>0 ){
946     sqlite_busy_handler(db, sqliteDefaultBusyCallback, (void*)(long)ms);
947   }else{
948     sqlite_busy_handler(db, 0, 0);
949   }
950 }
951 
952 /*
953 ** Cause any pending operation to stop at its earliest opportunity.
954 */
sqlite_interrupt(sqlite * db)955 void sqlite_interrupt(sqlite *db){
956   db->flags |= SQLITE_Interrupt;
957 }
958 
959 /*
960 ** Windows systems should call this routine to free memory that
961 ** is returned in the in the errmsg parameter of sqlite_open() when
962 ** SQLite is a DLL.  For some reason, it does not work to call free()
963 ** directly.
964 **
965 ** Note that we need to call free() not sqliteFree() here, since every
966 ** string that is exported from SQLite should have already passed through
967 ** sqliteStrRealloc().
968 */
sqlite_freemem(void * p)969 void sqlite_freemem(void *p){ free(p); }
970 
971 /*
972 ** Windows systems need functions to call to return the sqlite_version
973 ** and sqlite_encoding strings since they are unable to access constants
974 ** within DLLs.
975 */
sqlite_libversion(void)976 const char *sqlite_libversion(void){ return sqlite_version; }
sqlite_libencoding(void)977 const char *sqlite_libencoding(void){ return sqlite_encoding; }
978 
979 /*
980 ** Create new user-defined functions.  The sqlite_create_function()
981 ** routine creates a regular function and sqlite_create_aggregate()
982 ** creates an aggregate function.
983 **
984 ** Passing a NULL xFunc argument or NULL xStep and xFinalize arguments
985 ** disables the function.  Calling sqlite_create_function() with the
986 ** same name and number of arguments as a prior call to
987 ** sqlite_create_aggregate() disables the prior call to
988 ** sqlite_create_aggregate(), and vice versa.
989 **
990 ** If nArg is -1 it means that this function will accept any number
991 ** of arguments, including 0.  The maximum allowed value of nArg is 127.
992 */
sqlite_create_function(sqlite * db,const char * zName,int nArg,void (* xFunc)(sqlite_func *,int,const char **),void * pUserData)993 int sqlite_create_function(
994   sqlite *db,          /* Add the function to this database connection */
995   const char *zName,   /* Name of the function to add */
996   int nArg,            /* Number of arguments */
997   void (*xFunc)(sqlite_func*,int,const char**),  /* The implementation */
998   void *pUserData      /* User data */
999 ){
1000   FuncDef *p;
1001   int nName;
1002   if( db==0 || zName==0 || sqliteSafetyCheck(db) ) return 1;
1003   if( nArg<-1 || nArg>127 ) return 1;
1004   nName = strlen(zName);
1005   if( nName>255 ) return 1;
1006   p = sqliteFindFunction(db, zName, nName, nArg, 1);
1007   if( p==0 ) return 1;
1008   p->xFunc = xFunc;
1009   p->xStep = 0;
1010   p->xFinalize = 0;
1011   p->pUserData = pUserData;
1012   return 0;
1013 }
sqlite_create_aggregate(sqlite * db,const char * zName,int nArg,void (* xStep)(sqlite_func *,int,const char **),void (* xFinalize)(sqlite_func *),void * pUserData)1014 int sqlite_create_aggregate(
1015   sqlite *db,          /* Add the function to this database connection */
1016   const char *zName,   /* Name of the function to add */
1017   int nArg,            /* Number of arguments */
1018   void (*xStep)(sqlite_func*,int,const char**), /* The step function */
1019   void (*xFinalize)(sqlite_func*),              /* The finalizer */
1020   void *pUserData      /* User data */
1021 ){
1022   FuncDef *p;
1023   int nName;
1024   if( db==0 || zName==0 || sqliteSafetyCheck(db) ) return 1;
1025   if( nArg<-1 || nArg>127 ) return 1;
1026   nName = strlen(zName);
1027   if( nName>255 ) return 1;
1028   p = sqliteFindFunction(db, zName, nName, nArg, 1);
1029   if( p==0 ) return 1;
1030   p->xFunc = 0;
1031   p->xStep = xStep;
1032   p->xFinalize = xFinalize;
1033   p->pUserData = pUserData;
1034   return 0;
1035 }
1036 
1037 /*
1038 ** Change the datatype for all functions with a given name.  See the
1039 ** header comment for the prototype of this function in sqlite.h for
1040 ** additional information.
1041 */
sqlite_function_type(sqlite * db,const char * zName,int dataType)1042 int sqlite_function_type(sqlite *db, const char *zName, int dataType){
1043   FuncDef *p = (FuncDef*)sqliteHashFind(&db->aFunc, zName, strlen(zName));
1044   while( p ){
1045     p->dataType = dataType;
1046     p = p->pNext;
1047   }
1048   return SQLITE_OK;
1049 }
1050 
1051 /*
1052 ** Register a trace function.  The pArg from the previously registered trace
1053 ** is returned.
1054 **
1055 ** A NULL trace function means that no tracing is executes.  A non-NULL
1056 ** trace is a pointer to a function that is invoked at the start of each
1057 ** sqlite_exec().
1058 */
sqlite_trace(sqlite * db,void (* xTrace)(void *,const char *),void * pArg)1059 void *sqlite_trace(sqlite *db, void (*xTrace)(void*,const char*), void *pArg){
1060   void *pOld = db->pTraceArg;
1061   db->xTrace = xTrace;
1062   db->pTraceArg = pArg;
1063   return pOld;
1064 }
1065 
1066 /*** EXPERIMENTAL ***
1067 **
1068 ** Register a function to be invoked when a transaction comments.
1069 ** If either function returns non-zero, then the commit becomes a
1070 ** rollback.
1071 */
sqlite_commit_hook(sqlite * db,int (* xCallback)(void *),void * pArg)1072 void *sqlite_commit_hook(
1073   sqlite *db,               /* Attach the hook to this database */
1074   int (*xCallback)(void*),  /* Function to invoke on each commit */
1075   void *pArg                /* Argument to the function */
1076 ){
1077   void *pOld = db->pCommitArg;
1078   db->xCommitCallback = xCallback;
1079   db->pCommitArg = pArg;
1080   return pOld;
1081 }
1082 
1083 
1084 /*
1085 ** This routine is called to create a connection to a database BTree
1086 ** driver.  If zFilename is the name of a file, then that file is
1087 ** opened and used.  If zFilename is the magic name ":memory:" then
1088 ** the database is stored in memory (and is thus forgotten as soon as
1089 ** the connection is closed.)  If zFilename is NULL then the database
1090 ** is for temporary use only and is deleted as soon as the connection
1091 ** is closed.
1092 **
1093 ** A temporary database can be either a disk file (that is automatically
1094 ** deleted when the file is closed) or a set of red-black trees held in memory,
1095 ** depending on the values of the TEMP_STORE compile-time macro and the
1096 ** db->temp_store variable, according to the following chart:
1097 **
1098 **       TEMP_STORE     db->temp_store     Location of temporary database
1099 **       ----------     --------------     ------------------------------
1100 **           0               any             file
1101 **           1                1              file
1102 **           1                2              memory
1103 **           1                0              file
1104 **           2                1              file
1105 **           2                2              memory
1106 **           2                0              memory
1107 **           3               any             memory
1108 */
sqliteBtreeFactory(const sqlite * db,const char * zFilename,int omitJournal,int nCache,Btree ** ppBtree)1109 int sqliteBtreeFactory(
1110   const sqlite *db,	    /* Main database when opening aux otherwise 0 */
1111   const char *zFilename,    /* Name of the file containing the BTree database */
1112   int omitJournal,          /* if TRUE then do not journal this file */
1113   int nCache,               /* How many pages in the page cache */
1114   Btree **ppBtree){         /* Pointer to new Btree object written here */
1115 
1116   assert( ppBtree != 0);
1117 
1118 #ifndef SQLITE_OMIT_INMEMORYDB
1119   if( zFilename==0 ){
1120     if (TEMP_STORE == 0) {
1121       /* Always use file based temporary DB */
1122       return sqliteBtreeOpen(0, omitJournal, nCache, ppBtree);
1123     } else if (TEMP_STORE == 1 || TEMP_STORE == 2) {
1124       /* Switch depending on compile-time and/or runtime settings. */
1125       int location = db->temp_store==0 ? TEMP_STORE : db->temp_store;
1126 
1127       if (location == 1) {
1128         return sqliteBtreeOpen(zFilename, omitJournal, nCache, ppBtree);
1129       } else {
1130         return sqliteRbtreeOpen(0, 0, 0, ppBtree);
1131       }
1132     } else {
1133       /* Always use in-core DB */
1134       return sqliteRbtreeOpen(0, 0, 0, ppBtree);
1135     }
1136   }else if( zFilename[0]==':' && strcmp(zFilename,":memory:")==0 ){
1137     return sqliteRbtreeOpen(0, 0, 0, ppBtree);
1138   }else
1139 #endif
1140   {
1141     return sqliteBtreeOpen(zFilename, omitJournal, nCache, ppBtree);
1142   }
1143 }
1144