diff options
author | Wez Furlong <wez@php.net> | 2004-07-10 12:27:51 +0000 |
---|---|---|
committer | Wez Furlong <wez@php.net> | 2004-07-10 12:27:51 +0000 |
commit | e563b4eafa63ba8beb88defa1e36f037a7a97a60 (patch) | |
tree | 2e72dfa1c4b7fe62fde9ab326a67047ba2f4cc9e /ext/sqlite/libsqlite/src/attach.c | |
parent | cd732f1a3f5df97407797fe7ebb97830552479ad (diff) | |
download | php-git-e563b4eafa63ba8beb88defa1e36f037a7a97a60.tar.gz |
Upgrade bundled library to 2.8.14 + misc fixes
(http://www.sqlite.org/cvstrac/chngview?cn=1742)
Diffstat (limited to 'ext/sqlite/libsqlite/src/attach.c')
-rw-r--r-- | ext/sqlite/libsqlite/src/attach.c | 39 |
1 files changed, 32 insertions, 7 deletions
diff --git a/ext/sqlite/libsqlite/src/attach.c b/ext/sqlite/libsqlite/src/attach.c index 5269238e0f..4e445ec413 100644 --- a/ext/sqlite/libsqlite/src/attach.c +++ b/ext/sqlite/libsqlite/src/attach.c @@ -23,12 +23,15 @@ ** The pFilename and pDbname arguments are the tokens that define the ** filename and dbname in the ATTACH statement. */ -void sqliteAttach(Parse *pParse, Token *pFilename, Token *pDbname){ +void sqliteAttach(Parse *pParse, Token *pFilename, Token *pDbname, Token *pKey){ Db *aNew; int rc, i; char *zFile, *zName; sqlite *db; + Vdbe *v; + v = sqliteGetVdbe(pParse); + sqliteVdbeAddOp(v, OP_Halt, 0, 0); if( pParse->explain ) return; db = pParse->db; if( db->file_format<4 ){ @@ -88,6 +91,22 @@ void sqliteAttach(Parse *pParse, Token *pFilename, Token *pDbname){ if( rc ){ sqliteErrorMsg(pParse, "unable to open database: %s", zFile); } +#if SQLITE_HAS_CODEC + { + extern int sqliteCodecAttach(sqlite*, int, void*, int); + char *zKey = 0; + int nKey; + if( pKey && pKey->z && pKey->n ){ + sqliteSetNString(&zKey, pKey->z, pKey->n, 0); + sqliteDequote(zKey); + nKey = strlen(zKey); + }else{ + zKey = 0; + nKey = 0; + } + sqliteCodecAttach(db, db->nDb-1, zKey, nKey); + } +#endif sqliteFree(zFile); db->flags &= ~SQLITE_Initialized; if( pParse->nErr ) return; @@ -117,13 +136,18 @@ void sqliteAttach(Parse *pParse, Token *pFilename, Token *pDbname){ void sqliteDetach(Parse *pParse, Token *pDbname){ int i; sqlite *db; + Vdbe *v; + Db *pDb; + v = sqliteGetVdbe(pParse); + sqliteVdbeAddOp(v, OP_Halt, 0, 0); if( pParse->explain ) return; db = pParse->db; for(i=0; i<db->nDb; i++){ - if( db->aDb[i].pBt==0 || db->aDb[i].zName==0 ) continue; - if( strlen(db->aDb[i].zName)!=pDbname->n ) continue; - if( sqliteStrNICmp(db->aDb[i].zName, pDbname->z, pDbname->n)==0 ) break; + pDb = &db->aDb[i]; + if( pDb->pBt==0 || pDb->zName==0 ) continue; + if( strlen(pDb->zName)!=pDbname->n ) continue; + if( sqliteStrNICmp(pDb->zName, pDbname->z, pDbname->n)==0 ) break; } if( i>=db->nDb ){ sqliteErrorMsg(pParse, "no such database: %T", pDbname); @@ -138,10 +162,11 @@ void sqliteDetach(Parse *pParse, Token *pDbname){ return; } #endif /* SQLITE_OMIT_AUTHORIZATION */ - sqliteBtreeClose(db->aDb[i].pBt); - db->aDb[i].pBt = 0; - sqliteFree(db->aDb[i].zName); + sqliteBtreeClose(pDb->pBt); + pDb->pBt = 0; + sqliteFree(pDb->zName); sqliteResetInternalSchema(db, i); + if( pDb->pAux && pDb->xFreeAux ) pDb->xFreeAux(pDb->pAux); db->nDb--; if( i<db->nDb ){ db->aDb[i] = db->aDb[db->nDb]; |