diff --git a/manifest b/manifest index f18e30309f..1b05642d43 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Changes\sto\sselect.c\sto\sfacilitate\sfull\scoverage\stesting.\s(CVS\s6658) -D 2009-05-19T19:04:58 +C Updates\sto\sthe\sextension\sloading\slogic\sto\ssupport\sfull\scoverage\stesting.\s(CVS\s6659) +D 2009-05-20T02:40:46 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0 F Makefile.in 583e87706abc3026960ed759aff6371faf84c211 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654 @@ -110,7 +110,7 @@ F src/btree.c 7c4b02afea7efb561361f20408414fec68df898c F src/btree.h 58d876d3ed944a8f4f1fd0e67024b385243fc9dd F src/btreeInt.h df64030d632f8c8ac217ed52e8b6b3eacacb33a5 F src/build.c 2b4cef0dccea8d5ceb34d30b69121590ad2d5314 -F src/callback.c bf295cfdc065b56cc49a5f6452126dc4ffe0ff5b +F src/callback.c 57359fa93de47c341b6b8ee504a88ff276397686 F src/complete.c 5ad5c6cd4548211867c204c41a126d73a9fbcea0 F src/date.c ab5f7137656652a48434d64f96bdcdc823bb23b3 F src/delete.c a0a0932eea77471ab243337026abbce444024c43 @@ -124,8 +124,8 @@ F src/hwtime.h 4a1d45f4cae1f402ea19686acf24acf4f0cb53cb F src/insert.c 050536ea91c6cf74d87a2386b5da241141943c94 F src/journal.c e00df0c0da8413ab6e1bb7d7cab5665d4a9000d0 F src/legacy.c 9a56cf126ceee332b56061bf16bd0fb4ff9e26c0 -F src/loadext.c 3f96631089fc4f3871a67f02f2e4fc7ea4d51edc -F src/main.c 09fbadd5ea3d4f9052d37925a1427f9cb0ee75dc +F src/loadext.c a281f9890ce4f8f2b68967a124322c6ae98f1245 +F src/main.c 7b7335c6260f08d9e534df68c0993c0a8c9abb49 F src/malloc.c 7b3b6423f5b355e5d649b91e16ef252d610bcf19 F src/mem0.c f2f84062d1f35814d6535c9f9e33de3bfb3b132c F src/mem1.c e6d5c23941288df8191b8a98c28e3f57771e2270 @@ -162,7 +162,7 @@ F src/select.c 88e654ab5b183e4fdb084680b66b5bfa6f214dc5 F src/shell.c 0a11f831603f17fea20ca97133c0f64e716af4a7 F src/sqlite.h.in 0c459a45c1047be24c6a58646e8be4d001a3a28a F src/sqlite3ext.h 1db7d63ab5de4b3e6b83dd03d1a4e64fef6d2a17 -F src/sqliteInt.h 68b1b7aebcbed22d302251a56e85fa1339407db3 +F src/sqliteInt.h b4cc76a99bc82894703528376067c743eb27184c F src/sqliteLimit.h ffe93f5a0c4e7bd13e70cd7bf84cfb5c3465f45d F src/status.c 237b193efae0cf6ac3f0817a208de6c6c6ef6d76 F src/table.c cc86ad3d6ad54df7c63a3e807b5783c90411a08d @@ -729,7 +729,7 @@ F tool/speedtest16.c c8a9c793df96db7e4933f0852abb7a03d48f2e81 F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e -P 1b0ee9d188c000a2331caae2e9c8b89b0bcbc0b0 -R d15b16c16d25d0a15fe74d1aa7c5ea6b +P f678ed34faab88f4e126e553119773386c7c84fa +R a4ff1e249cdc6a153d70111a90dd62bc U drh -Z cdf595d21d0d1c681184a9d7037bb48e +Z e9babf13c984228aedcd2756c0b1fd97 diff --git a/manifest.uuid b/manifest.uuid index 55a4fcc399..5d39f55411 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -f678ed34faab88f4e126e553119773386c7c84fa \ No newline at end of file +929cfbc66f6e2ea6b44417305d0f4ae36567c9bf \ No newline at end of file diff --git a/src/callback.c b/src/callback.c index 3f75760ac4..9890155e48 100644 --- a/src/callback.c +++ b/src/callback.c @@ -13,7 +13,7 @@ ** This file contains functions used to access the internal hash tables ** of user defined functions and collation sequences. ** -** $Id: callback.c,v 1.40 2009/05/11 20:53:29 drh Exp $ +** $Id: callback.c,v 1.41 2009/05/20 02:40:46 drh Exp $ */ #include "sqliteInt.h" @@ -294,6 +294,7 @@ void sqlite3FuncDefInsert( int h = (sqlite3UpperToLower[c1] + nName) % ArraySize(pHash->a); pOther = functionSearch(pHash, h, pDef->zName, nName); if( pOther ){ + assert( pOther!=pDef && pOther->pNext!=pDef ); pDef->pNext = pOther->pNext; pOther->pNext = pDef; }else{ diff --git a/src/loadext.c b/src/loadext.c index 0a1d1550ca..0c1b5dd6ac 100644 --- a/src/loadext.c +++ b/src/loadext.c @@ -12,7 +12,7 @@ ** This file contains code used to dynamically load extensions into ** the SQLite library. ** -** $Id: loadext.c,v 1.58 2009/01/20 16:53:40 danielk1977 Exp $ +** $Id: loadext.c,v 1.59 2009/05/20 02:40:46 drh Exp $ */ #ifndef SQLITE_CORE @@ -355,6 +355,8 @@ static int sqlite3LoadExtension( char *zErrmsg = 0; void **aHandle; + if( pzErrMsg ) *pzErrMsg = 0; + /* Ticket #1863. To avoid a creating security problems for older ** applications that relink against newer versions of SQLite, the ** ability to run load_extension is turned off by default. One @@ -429,6 +431,7 @@ int sqlite3_load_extension( int rc; sqlite3_mutex_enter(db->mutex); rc = sqlite3LoadExtension(db, zFile, zProc, pzErrMsg); + rc = sqlite3ApiExit(db, rc); sqlite3_mutex_leave(db->mutex); return rc; } @@ -565,20 +568,21 @@ void sqlite3_reset_auto_extension(void){ /* ** Load all automatic extensions. +** +** If anything goes wrong, set an error in the database connection. */ -int sqlite3AutoLoadExtensions(sqlite3 *db){ +void sqlite3AutoLoadExtensions(sqlite3 *db){ int i; int go = 1; - int rc = SQLITE_OK; int (*xInit)(sqlite3*,char**,const sqlite3_api_routines*); wsdAutoextInit; if( wsdAutoext.nExt==0 ){ /* Common case: early out without every having to acquire a mutex */ - return SQLITE_OK; + return; } for(i=0; go; i++){ - char *zErrmsg = 0; + char *zErrmsg; #if SQLITE_THREADSAFE sqlite3_mutex *mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER); #endif @@ -591,13 +595,12 @@ int sqlite3AutoLoadExtensions(sqlite3 *db){ wsdAutoext.aExt[i]; } sqlite3_mutex_leave(mutex); + zErrmsg = 0; if( xInit && xInit(db, &zErrmsg, &sqlite3Apis) ){ sqlite3Error(db, SQLITE_ERROR, "automatic extension loading failed: %s", zErrmsg); go = 0; - rc = SQLITE_ERROR; - sqlite3_free(zErrmsg); } + sqlite3_free(zErrmsg); } - return rc; } diff --git a/src/main.c b/src/main.c index eeb46cdcaf..68f76d7c77 100644 --- a/src/main.c +++ b/src/main.c @@ -14,7 +14,7 @@ ** other files are for internal use by SQLite and should not be ** accessed by users of the library. ** -** $Id: main.c,v 1.552 2009/05/12 13:35:12 drh Exp $ +** $Id: main.c,v 1.553 2009/05/20 02:40:46 drh Exp $ */ #include "sqliteInt.h" @@ -1664,8 +1664,9 @@ static int openDatabase( /* Load automatic extensions - extensions that have been registered ** using the sqlite3_automatic_extension() API. */ - (void)sqlite3AutoLoadExtensions(db); - if( sqlite3_errcode(db)!=SQLITE_OK ){ + sqlite3AutoLoadExtensions(db); + rc = sqlite3_errcode(db); + if( rc!=SQLITE_OK ){ goto opendb_out; } diff --git a/src/sqliteInt.h b/src/sqliteInt.h index e141c928c3..da3f092863 100644 --- a/src/sqliteInt.h +++ b/src/sqliteInt.h @@ -11,7 +11,7 @@ ************************************************************************* ** Internal interface definitions for SQLite. ** -** @(#) $Id: sqliteInt.h,v 1.874 2009/05/19 14:21:29 drh Exp $ +** @(#) $Id: sqliteInt.h,v 1.875 2009/05/20 02:40:46 drh Exp $ */ #ifndef _SQLITEINT_H_ #define _SQLITEINT_H_ @@ -2733,7 +2733,7 @@ void sqlite3Parser(void*, int, Token, Parse*); int sqlite3ParserStackPeak(void*); #endif -int sqlite3AutoLoadExtensions(sqlite3*); +void sqlite3AutoLoadExtensions(sqlite3*); #ifndef SQLITE_OMIT_LOAD_EXTENSION void sqlite3CloseExtensions(sqlite3*); #else