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",