From: drh Date: Fri, 9 Apr 2010 09:14:05 +0000 (+0000) Subject: Avoid unnecessary calls to sqlite3_step() with null prepared statements X-Git-Tag: version-3.7.2~480 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6498f0bb2e60fa42a8fa80bb1e2f60d01534ea92;p=thirdparty%2Fsqlite.git Avoid unnecessary calls to sqlite3_step() with null prepared statements while parsing the schema. FossilOrigin-Name: ae04d2d15d3d96f607adb394a631d96cd4cf2c1d --- diff --git a/manifest b/manifest index 6ae98462c7..15177adb2c 100644 --- a/manifest +++ b/manifest @@ -1,8 +1,8 @@ -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 -C Fix\sa\stypo\sin\sa\scomment.\s\sNo\schanges\sto\scode. -D 2010-04-08T17:35:35 +C Avoid\sunnecessary\scalls\sto\ssqlite3_step()\swith\snull\sprepared\sstatements\nwhile\sparsing\sthe\sschema. +D 2010-04-09T09:14:05 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0 F Makefile.in 4f2f967b7e58a35bb74fb7ec8ae90e0f4ca7868b F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654 @@ -162,7 +162,7 @@ F src/pcache.c ace8f6a5ecd4711cc66a1b23053be7109bd437cf F src/pcache.h c683390d50f856d4cd8e24342ae62027d1bb6050 F src/pcache1.c 6dc1871ce8ead9187161c370a58cd06c84221f76 F src/pragma.c e166ea41544f8e57a08db86dbe87212b7d378fe8 -F src/prepare.c e8164a925274cb7803b5f8ab3cf42f2a508ad33f +F src/prepare.c fd1398cb1da54385ba5bd68d93928f10d10a1d9c F src/printf.c 5f5b65a83e63f2096a541a340722a509fa0240a7 F src/random.c cd4a67b3953b88019f8cd4ccd81394a8ddfaba50 F src/resolve.c ac5f1a713cd1ae77f08b83cc69581e11bf5ae6f9 @@ -799,14 +799,14 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f -P b04a52824971e8880e4bf0d9862db4eef8b607ab -R 60b628e0c03e907f5546dfec24b3ca0a +P 332cb55113a621456c6522830585434146c388e7 +R 71bb1fb313a1856d73098e2432b5cefc U drh -Z 5a9a61b0d0ccc819f6a41bee3e7c307f +Z b3b7d19f1a4ba32f7346eb0a7b487db1 -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) -iD8DBQFLvhPqoxKgR168RlERAovxAJ48SDXRaNpRjEwguJxwT0++FhJEVACfS7Kz -78+z4WCKNWa5+uIbS9ISEuc= -=iH29 +iD8DBQFLvu/goxKgR168RlERAioUAJ9TyQvJfnEhAsJp/SbbkAlrQn1rEQCgibSL +PoydLovfOGdwnT0LV9CvIvc= +=FBJT -----END PGP SIGNATURE----- diff --git a/manifest.uuid b/manifest.uuid index dba986af2e..2b8dcea36d 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -332cb55113a621456c6522830585434146c388e7 \ No newline at end of file +ae04d2d15d3d96f607adb394a631d96cd4cf2c1d \ No newline at end of file diff --git a/src/prepare.c b/src/prepare.c index 44b7775138..e729f420dd 100644 --- a/src/prepare.c +++ b/src/prepare.c @@ -73,15 +73,15 @@ int sqlite3InitCallback(void *pInit, int argc, char **argv, char **NotUsed){ ** or executed. All the parser does is build the internal data ** structures that describe the table, index, or view. */ - char *zErr; int rc; + sqlite3_stmt *pStmt; + assert( db->init.busy ); db->init.iDb = iDb; db->init.newTnum = atoi(argv[1]); db->init.orphanTrigger = 0; - rc = sqlite3_exec(db, argv[2], 0, 0, &zErr); + rc = sqlite3_prepare(db, argv[2], -1, &pStmt, 0); db->init.iDb = 0; - assert( rc!=SQLITE_OK || zErr==0 ); if( SQLITE_OK!=rc ){ if( db->init.orphanTrigger ){ assert( iDb==1 ); @@ -90,11 +90,11 @@ int sqlite3InitCallback(void *pInit, int argc, char **argv, char **NotUsed){ if( rc==SQLITE_NOMEM ){ db->mallocFailed = 1; }else if( rc!=SQLITE_INTERRUPT && rc!=SQLITE_LOCKED ){ - corruptSchema(pData, argv[0], zErr); + corruptSchema(pData, argv[0], sqlite3_errmsg(db)); } } - sqlite3DbFree(db, zErr); } + sqlite3_finalize(pStmt); }else if( argv[0]==0 ){ corruptSchema(pData, 0, 0); }else{