extensions/sqlite/sqlite-source/attach.c
changeset 1645 27307df4d711
parent 1203 633c25ce6405
     1.1 --- a/extensions/sqlite/sqlite-source/attach.c	Sun Oct 28 05:06:12 2007 +0000
     1.2 +++ b/extensions/sqlite/sqlite-source/attach.c	Sun Oct 28 05:48:06 2007 +0000
     1.3 @@ -73,8 +73,8 @@
     1.4    const char *zName;
     1.5    const char *zFile;
     1.6    Db *aNew;
     1.7 +  char *zErrDyn = 0;
     1.8    char zErr[128];
     1.9 -  char *zErrDyn = 0;
    1.10  
    1.11    zFile = (const char *)sqlite3_value_text(argv[0]);
    1.12    zName = (const char *)sqlite3_value_text(argv[1]);
    1.13 @@ -102,7 +102,8 @@
    1.14    for(i=0; i<db->nDb; i++){
    1.15      char *z = db->aDb[i].zName;
    1.16      if( z && zName && sqlite3StrICmp(z, zName)==0 ){
    1.17 -      sqlite3_snprintf(sizeof(zErr), zErr, "database %s is already in use", zName);
    1.18 +      sqlite3_snprintf(sizeof(zErr), zErr, 
    1.19 +                       "database %s is already in use", zName);
    1.20        goto attach_error;
    1.21      }
    1.22    }
    1.23 @@ -111,14 +112,16 @@
    1.24    ** hash tables.
    1.25    */
    1.26    if( db->aDb==db->aDbStatic ){
    1.27 -    aNew = sqliteMalloc( sizeof(db->aDb[0])*3 );
    1.28 +    aNew = sqlite3_malloc( sizeof(db->aDb[0])*3 );
    1.29      if( aNew==0 ){
    1.30 +      db->mallocFailed = 1;
    1.31        return;
    1.32      }
    1.33      memcpy(aNew, db->aDb, sizeof(db->aDb[0])*2);
    1.34    }else{
    1.35 -    aNew = sqliteRealloc(db->aDb, sizeof(db->aDb[0])*(db->nDb+1) );
    1.36 +    aNew = sqlite3_realloc(db->aDb, sizeof(db->aDb[0])*(db->nDb+1) );
    1.37      if( aNew==0 ){
    1.38 +      db->mallocFailed = 1;
    1.39        return;
    1.40      } 
    1.41    }
    1.42 @@ -130,9 +133,11 @@
    1.43    ** it to obtain the database schema. At this point the schema may
    1.44    ** or may not be initialised.
    1.45    */
    1.46 -  rc = sqlite3BtreeFactory(db, zFile, 0, SQLITE_DEFAULT_CACHE_SIZE, &aNew->pBt);
    1.47 +  rc = sqlite3BtreeFactory(db, zFile, 0, SQLITE_DEFAULT_CACHE_SIZE,
    1.48 +                           db->openFlags | SQLITE_OPEN_MAIN_DB,
    1.49 +                           &aNew->pBt);
    1.50    if( rc==SQLITE_OK ){
    1.51 -    aNew->pSchema = sqlite3SchemaGet(aNew->pBt);
    1.52 +    aNew->pSchema = sqlite3SchemaGet(db, aNew->pBt);
    1.53      if( !aNew->pSchema ){
    1.54        rc = SQLITE_NOMEM;
    1.55      }else if( aNew->pSchema->file_format && aNew->pSchema->enc!=ENC(db) ){
    1.56 @@ -142,7 +147,7 @@
    1.57      }
    1.58      sqlite3PagerLockingMode(sqlite3BtreePager(aNew->pBt), db->dfltLockMode);
    1.59    }
    1.60 -  aNew->zName = sqliteStrDup(zName);
    1.61 +  aNew->zName = sqlite3DbStrDup(db, zName);
    1.62    aNew->safety_level = 3;
    1.63  
    1.64  #if SQLITE_HAS_CODEC
    1.65 @@ -155,7 +160,7 @@
    1.66      switch( t ){
    1.67        case SQLITE_INTEGER:
    1.68        case SQLITE_FLOAT:
    1.69 -        zErrDyn = sqliteStrDup("Invalid key value");
    1.70 +        zErrDyn = sqlite3DbStrDup(db, "Invalid key value");
    1.71          rc = SQLITE_ERROR;
    1.72          break;
    1.73          
    1.74 @@ -195,8 +200,8 @@
    1.75      }
    1.76      sqlite3ResetInternalSchema(db, 0);
    1.77      db->nDb = iDb;
    1.78 -    if( rc==SQLITE_NOMEM ){
    1.79 -      sqlite3FailedMalloc();
    1.80 +    if( rc==SQLITE_NOMEM || rc==SQLITE_IOERR_NOMEM ){
    1.81 +      db->mallocFailed = 1;
    1.82        sqlite3_snprintf(sizeof(zErr),zErr, "out of memory");
    1.83      }else{
    1.84        sqlite3_snprintf(sizeof(zErr),zErr, "unable to open database: %s", zFile);
    1.85 @@ -210,7 +215,7 @@
    1.86    /* Return an error if we get here */
    1.87    if( zErrDyn ){
    1.88      sqlite3_result_error(context, zErrDyn, -1);
    1.89 -    sqliteFree(zErrDyn);
    1.90 +    sqlite3_free(zErrDyn);
    1.91    }else{
    1.92      zErr[sizeof(zErr)-1] = 0;
    1.93      sqlite3_result_error(context, zErr, -1);
    1.94 @@ -292,14 +297,14 @@
    1.95    sqlite3* db = pParse->db;
    1.96  
    1.97  #ifndef SQLITE_OMIT_AUTHORIZATION
    1.98 -  assert( sqlite3MallocFailed() || pAuthArg );
    1.99 +  assert( db->mallocFailed || pAuthArg );
   1.100    if( pAuthArg ){
   1.101 -    char *zAuthArg = sqlite3NameFromToken(&pAuthArg->span);
   1.102 +    char *zAuthArg = sqlite3NameFromToken(db, &pAuthArg->span);
   1.103      if( !zAuthArg ){
   1.104        goto attach_end;
   1.105      }
   1.106      rc = sqlite3AuthCheck(pParse, type, zAuthArg, 0, 0);
   1.107 -    sqliteFree(zAuthArg);
   1.108 +    sqlite3_free(zAuthArg);
   1.109      if(rc!=SQLITE_OK ){
   1.110        goto attach_end;
   1.111      }
   1.112 @@ -323,7 +328,7 @@
   1.113    sqlite3ExprCode(pParse, pDbname);
   1.114    sqlite3ExprCode(pParse, pKey);
   1.115  
   1.116 -  assert( v || sqlite3MallocFailed() );
   1.117 +  assert( v || db->mallocFailed );
   1.118    if( v ){
   1.119      sqlite3VdbeAddOp(v, OP_Function, 0, nFunc);
   1.120      pFunc = sqlite3FindFunction(db, zFunc, strlen(zFunc), nFunc, SQLITE_UTF8,0);
   1.121 @@ -424,7 +429,7 @@
   1.122    zDb = pFix->zDb;
   1.123    for(i=0, pItem=pList->a; i<pList->nSrc; i++, pItem++){
   1.124      if( pItem->zDatabase==0 ){
   1.125 -      pItem->zDatabase = sqliteStrDup(zDb);
   1.126 +      pItem->zDatabase = sqlite3DbStrDup(pFix->pParse->db, zDb);
   1.127      }else if( sqlite3StrICmp(pItem->zDatabase,zDb)!=0 ){
   1.128        sqlite3ErrorMsg(pFix->pParse,
   1.129           "%s %T cannot reference objects in database %s",