Annotation of embedaddon/php/ext/sqlite/libsqlite/src/main.c, revision 1.1.1.1

1.1       misho       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 195361 2005-09-07 15:11:33Z iliaa $
                     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: */
                     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
                     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
                    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: */
                    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: */
                    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: */
                    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: */
                    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: */
                    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: */
                    561: int sqlite_last_statement_changes(sqlite *db){
                    562:   return db->lsChange;
                    563: }
                    564: 
                    565: /*
                    566: ** Close an existing SQLite database
                    567: */
                    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: */
                    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: */
                    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: */
                    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: */
                    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: */
                    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: */
                    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: */
                    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: */
                    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: */
                    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: */
                    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: */
                    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: */
                    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: */
                    976: const char *sqlite_libversion(void){ return sqlite_version; }
                    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: */
                    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: }
                   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: */
                   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: */
                   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: */
                   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: */
                   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: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>