-C Change\sthe\sname\sof\sthe\sanalyze_as_needed\spragma\sto\s"optimize".\s\sEnhance\sthe\ncomment\s(which\swill\sbecome\sdocumentation,\sassuming\sthese\schanges\sland\son\strunk)\nto\sexplain\sthat\sthe\soptimize\spragma\sis\slikely\sto\sbe\senhanced\sin\svarious\sways\nin\sfuture\sreleases\sand\sthat\sapplications\sshould\snot\sdepend\supon\sthe\scurrent\nbehavior.
-D 2017-02-22T20:24:10.705
+C Do\sa\ssingle\sOP_Expire\sat\sthe\svery\send\sof\s"PRAGMA\soptimize",\sand\somit\sthe\nOP_Expire\son\sANALYZE\scommands\sinvoked\sby\sthe\spragma.
+D 2017-02-23T00:58:36.868
F Makefile.in edb6bcdd37748d2b1c3422ff727c748df7ffe918
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
F Makefile.msc a89ea37ab5928026001569f056973b9059492fe2
F sqlite3.1 fc7ad8990fc8409983309bb80de8c811a7506786
F sqlite3.pc.in 48fed132e7cb71ab676105d2a4dc77127d8c1f3a
F src/alter.c 3b23977620ce9662ac54443f65b87ba996e36121
-F src/analyze.c b4857ec5b46b66049e5a3cec53c071c4902a8e8b
+F src/analyze.c 6d8234916c29be943e6ea28b5bef67dff98d9905
F src/attach.c 8c476f8bd5d2afe11d925f890d30e527e5b0ce43
F src/auth.c 930b376a9c56998557367e6f7f8aaeac82a2a792
F src/backup.c faf17e60b43233c214aae6a8179d24503a61e83b
F src/pcache.c 62835bed959e2914edd26afadfecce29ece0e870
F src/pcache.h 2cedcd8407eb23017d92790b112186886e179490
F src/pcache1.c e3967219b2a92b9edcb9324a4ba75009090d3953
-F src/pragma.c 46202f2f5ee6957ff5cba581ee3c36507685def0
+F src/pragma.c 4b32b014bb4b460bbf0103e4631809428c1ce16b
F src/pragma.h d97dd835c7f4dfb6857487707313385d44fa76c0
F src/prepare.c b1140c3d0cf59bc85ace00ce363153041b424b7a
F src/printf.c 67427bbee66d891fc6f6f5aada857e9cdb368c1c
F src/sqlite.h.in 751ff125eb159c8f92c182b8df980a5e4f50e966
F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
F src/sqlite3ext.h 8648034aa702469afb553231677306cc6492a1ae
-F src/sqliteInt.h bdc181e371ea618c85f30b4c5ee4d80f4ada6ad7
+F src/sqliteInt.h df268ce1d04df042cf43b557d2309eb0b71e86c4
F src/sqliteLimit.h c0373387c287c8d0932510b5547ecde31b5da247
F src/status.c a9e66593dfb28a9e746cba7153f84d49c1ddc4b1
F src/table.c b46ad567748f24a326d9de40e5b9659f96ffff34
F src/utf.c 699001c79f28e48e9bcdf8a463da029ea660540c
F src/util.c ca8440ede81e155d15cff7c101654f60b55a9ae6
F src/vacuum.c 1fe4555cd8c9b263afb85b5b4ee3a4a4181ad569
-F src/vdbe.c 37e95d52675bd839cc6c209f6b8d907582a27d44
+F src/vdbe.c f520378e510fd36bbf289921798dbc8f2b3dc30d
F src/vdbe.h 59998ffd71d7caa8886bc78dafaf8caeccd4c13c
F src/vdbeInt.h 4e4b15b2e1330e1636e4e01974eab2b0b985092f
F src/vdbeapi.c 3e4a8893feeb78620f4aac4ac5b85d92255b97e1
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P fe073905081b421405ca425ca03c5b8b0ff5f2c8
-R b1ce2ff126387ffc06c8537ddbfa9731
+P 9fced545a6f80c55d6dc4a6106cb2d3569566b3e
+R 5ab35d2cee04a5e705af62d3884bb598
U drh
-Z 5165d34a54df32aa272e95c6a5e5953c
+Z d17aa4a4e286313b851b7686a8b74646
-9fced545a6f80c55d6dc4a6106cb2d3569566b3e
\ No newline at end of file
+188300a337c87b7ee0dd1f4b9a4f1bd80e70cca4
\ No newline at end of file
if( i==1 ) continue; /* Do not analyze the TEMP database */
analyzeDatabase(pParse, i);
}
- }else if( pName2->n==0 ){
- /* Form 2: Analyze the database or table named */
- iDb = sqlite3FindDb(db, pName1);
- if( iDb>=0 ){
- analyzeDatabase(pParse, iDb);
- }else{
- z = sqlite3NameFromToken(db, pName1);
- if( z ){
- if( (pIdx = sqlite3FindIndex(db, z, 0))!=0 ){
- analyzeTable(pParse, pIdx->pTable, pIdx);
- }else if( (pTab = sqlite3LocateTable(pParse, 0, z, 0))!=0 ){
- analyzeTable(pParse, pTab, 0);
- }
- sqlite3DbFree(db, z);
- }
- }
+ }else if( pName2->n==0 && (iDb = sqlite3FindDb(db, pName1))>=0 ){
+ /* Analyze the schema named as the argument */
+ analyzeDatabase(pParse, iDb);
}else{
- /* Form 3: Analyze the fully qualified table name */
+ /* Form 3: Analyze the table or index named as an argument */
iDb = sqlite3TwoPartName(pParse, pName1, pName2, &pTableName);
if( iDb>=0 ){
- zDb = db->aDb[iDb].zDbSName;
+ zDb = pName2->n ? db->aDb[iDb].zDbSName : 0;
z = sqlite3NameFromToken(db, pTableName);
if( z ){
if( (pIdx = sqlite3FindIndex(db, z, zDb))!=0 ){
}
sqlite3DbFree(db, z);
}
- }
+ }
+ }
+ if( db->nSqlExec==0 && (v = sqlite3GetVdbe(pParse))!=0 ){
+ sqlite3VdbeAddOp0(v, OP_Expire);
}
- v = sqlite3GetVdbe(pParse);
- if( v ) sqlite3VdbeAddOp0(v, OP_Expire);
}
/*
sqlite3VdbeAddOp4(v, OP_SqlExec, 0, 0, 0, zSubSql, P4_DYNAMIC);
}
}
+ sqlite3VdbeAddOp0(v, OP_Expire);
break;
}
u8 isTransactionSavepoint; /* True if the outermost savepoint is a TS */
u8 mTrace; /* zero or more SQLITE_TRACE flags */
u8 skipBtreeMutex; /* True if no shared-cache backends */
+ u8 nSqlExec; /* Number of pending OP_SqlExec opcodes */
int nextPagesize; /* Pagesize after VACUUM if >0 */
u32 magic; /* Magic number for detect library misuse */
int nChange; /* Value returned by sqlite3_changes() */
** Run the SQL statement or statements specified in the P4 string.
*/
case OP_SqlExec: {
+ db->nSqlExec++;
rc = sqlite3_exec(db, pOp->p4.z, 0, 0, 0);
+ db->nSqlExec--;
if( rc ) goto abort_due_to_error;
break;
}