From: drh Date: Wed, 16 Mar 2016 20:44:45 +0000 (+0000) Subject: Some pragmas can be reused without an automatic reprepare. X-Git-Tag: version-3.12.0~44^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=refs%2Fheads%2Freusable-pragma;p=thirdparty%2Fsqlite.git Some pragmas can be reused without an automatic reprepare. FossilOrigin-Name: db1ce7e13e656fcd2766f1b1f225cbfefe8f73ad --- diff --git a/manifest b/manifest index 71037fc133..2fb10eeede 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sa\scomment\son\sthe\sfreelist_count\sand\sdata_version\spragmas. -D 2016-03-16T20:05:57.514 +C Some\spragmas\scan\sbe\sreused\swithout\san\sautomatic\sreprepare. +D 2016-03-16T20:44:45.683 F Makefile.in f53429fb2f313c099283659d0df6f20f932c861f F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc df0bf9ff7f8b3f4dd9fb4cc43f92fe58f6ec5c66 @@ -343,7 +343,7 @@ F src/parse.y 5ea8c81c5c41b27887f41b4a7e1c58470d7d3821 F src/pcache.c 647bb53a86b7bbcf55ad88089b3ea5a9170b90df F src/pcache.h 4d0ccaad264d360981ec5e6a2b596d6e85242545 F src/pcache1.c 72f644dc9e1468c72922eff5904048427b817051 -F src/pragma.c fb8e3e73431a39dc47727ef74aad94a86cfb1d36 +F src/pragma.c f0670909e915179fec47e17f72f14660995b8022 F src/pragma.h 64c78a648751b9f4f297276c4eb7507b14b4628c F src/prepare.c 22df6171aec1d86904ed2ad30c2348a5748aa04e F src/printf.c 63e6fb12bbe702dd664dc3703776c090383a5a26 @@ -417,10 +417,10 @@ F src/utf.c 699001c79f28e48e9bcdf8a463da029ea660540c F src/util.c 34ef7be420f82415ec48131404995ddb6ee7502f F src/vacuum.c feb1eabb20987983d9350cad98299b21fa811f52 F src/vdbe.c 8cf45bb8da77d39f55d108e759d15a57acd0255c -F src/vdbe.h c743791f723049db94f009e3e30958952bc2d512 +F src/vdbe.h 6f44193e7be52fd5f7c308175a936555b1e6b101 F src/vdbeInt.h f88d3115e9bde33b01d81f0dd26d8dd51f995991 F src/vdbeapi.c 95b1f8e527240a18a9aea41a655b013bf07a7009 -F src/vdbeaux.c 2c15cf88de4df97428318c8cfac0dea873dae451 +F src/vdbeaux.c a930f913d40e4ca6f6caaef6a7b5906a369fa2b1 F src/vdbeblob.c 3b570b730109e8f653d9d2081649f6e7015113db F src/vdbemem.c 9b0cb32cc267ef026515f15a3594d5ff91fe4dfc F src/vdbesort.c 307460bfa4de4d1c3901fcd42089159131e34062 @@ -1456,7 +1456,10 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P d9b5ff7aba3a8f6ca4505eac308fa9d510254c3e -R fafe07c0411ab81f336ee3834565f5dd +P 10a3e2a01db9f80452a2a3369fd25b6fd9798274 +R 2716c51dfa2bfe8ed5e18127e51ae3c8 +T *branch * reusable-pragma +T *sym-reusable-pragma * +T -sym-trunk * U drh -Z 9641eb94b1becd7c7420d553fe575786 +Z 7789d1f13489cbc314e26c9b80a11a2d diff --git a/manifest.uuid b/manifest.uuid index a6b92c6b67..7ffbbd6257 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -10a3e2a01db9f80452a2a3369fd25b6fd9798274 \ No newline at end of file +db1ce7e13e656fcd2766f1b1f225cbfefe8f73ad \ No newline at end of file diff --git a/src/pragma.c b/src/pragma.c index 4c4bc71ad1..54858afbf1 100644 --- a/src/pragma.c +++ b/src/pragma.c @@ -1764,6 +1764,7 @@ void sqlite3Pragma( aOp[1].p3 = iCookie; sqlite3VdbeSetNumCols(v, 1); sqlite3VdbeSetColName(v, 0, COLNAME_NAME, zLeft, SQLITE_TRANSIENT); + sqlite3VdbeReusable(v); } } break; @@ -1785,6 +1786,7 @@ void sqlite3Pragma( sqlite3VdbeLoadString(v, 1, zOpt); sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1); } + sqlite3VdbeReusable(v); } break; #endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */ diff --git a/src/vdbe.h b/src/vdbe.h index 4c02f5844d..ace28ffdb3 100644 --- a/src/vdbe.h +++ b/src/vdbe.h @@ -202,6 +202,7 @@ void sqlite3VdbeUsesBtree(Vdbe*, int); VdbeOp *sqlite3VdbeGetOp(Vdbe*, int); int sqlite3VdbeMakeLabel(Vdbe*); void sqlite3VdbeRunOnlyOnce(Vdbe*); +void sqlite3VdbeReusable(Vdbe*); void sqlite3VdbeDelete(Vdbe*); void sqlite3VdbeClearObject(sqlite3*,Vdbe*); void sqlite3VdbeMakeReady(Vdbe*,Parse*); diff --git a/src/vdbeaux.c b/src/vdbeaux.c index 9c75d1e078..c71605cdd2 100644 --- a/src/vdbeaux.c +++ b/src/vdbeaux.c @@ -391,6 +391,13 @@ void sqlite3VdbeRunOnlyOnce(Vdbe *p){ p->runOnlyOnce = 1; } +/* +** Mark the VDBE as one that can only be run multiple times. +*/ +void sqlite3VdbeReusable(Vdbe *p){ + p->runOnlyOnce = 0; +} + #ifdef SQLITE_DEBUG /* sqlite3AssertMayAbort() logic */ /*