]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Enhance the PRAGMA noop_update statement so that the behavior persists across noop-update-reprepare
authordrh <drh@noemail.net>
Tue, 23 Jan 2018 01:56:55 +0000 (01:56 +0000)
committerdrh <drh@noemail.net>
Tue, 23 Jan 2018 01:56:55 +0000 (01:56 +0000)
reprepare operations.

FossilOrigin-Name: c25da6de1dc3b9c5014934ecae0eded8631b9a131a93a09da3adb3a8b4d8afb8

manifest
manifest.uuid
src/prepare.c
src/sqlite.h.in
src/update.c

index 8f46fe4a5f2af11b3e9aa1cabcffcd629ec87170..c195ed109f2dd61701fd92c5470f7b0a29aff75a 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\sproblem\scausing\sfree-list\scorruption\swhen\smerging\sfree-lists\sfor\stwo\nconcurrent\stransactions\sthat\shave\sboth\sused\spage\sX\sas\san\sin-memory\sfree-list\ntrunk\spage,\swhere\sX\slies\spast\sthe\send\sof\sthe\sinitial\sdatabase\simages.
-D 2018-01-04T18:36:39.212
+C Enhance\sthe\sPRAGMA\snoop_update\sstatement\sso\sthat\sthe\sbehavior\spersists\sacross\nreprepare\soperations.
+D 2018-01-23T01:56:55.558
 F Makefile.in b142eb20482922153ebc77b261cdfd0a560ed05a81e9f6d9a2b0e8192922a1d2
 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
 F Makefile.msc a55372a22454e742ba7c8f6edf05b83213ec01125166ad7dcee0567e2f7fc81b
@@ -469,14 +469,14 @@ F src/pcache.h 072f94d29281cffd99e46c1539849f248c4b56ae7684c1f36626797fee375170
 F src/pcache1.c 716975564c15eb6679e97f734cec1bfd6c16ac3d4010f05f1f8e509fc7d19880
 F src/pragma.c d04725ac25387d9638919e197fb009f378e13af7bf899516979e54b3164e3602
 F src/pragma.h ce41efb7d4cdafca499839f29014d9b1d9534c8f503eeceb88310920c62d6097
-F src/prepare.c 7cf451f903ad92a14e22de415a13e7a7d30f1bd23b3d21eeb0dc7264723244c5
+F src/prepare.c 7ffd800d6b6686c7d7e528fd5af8041a97847b20a8f86265fb854cad19537c70
 F src/printf.c 40aee47ae9be4bd3dbdc8968bd07fddc027be8edec8daddf24d3391d36698a1c
 F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384
 F src/resolve.c 5b1e89ba279f4a4ab2f0975a7100d75be71e1a43a2df75a9c909d45bdd18c6ed
 F src/rowset.c 7b7e7e479212e65b723bf40128c7b36dc5afdfac
 F src/select.c 660ef7977841fb462f24c8561e4212615bb6e5c9835fd3556257ce8316c50fee
 F src/shell.c.in 08cbffc31900359fea85896342a46147e9772c370d8a5079b7be26e3a1f50e8a
-F src/sqlite.h.in 68bfa4942af031d16055ab4d37d26fe44b11b0756a89f309cd98ea17080db1cc
+F src/sqlite.h.in 7d6bf083cc6948e90f42b7b222a7cc7b0ae84d2fd8ed5567a6faffd770d998d5
 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
 F src/sqlite3ext.h c02d628cca67f3889c689d82d25c3eb45e2c155db08e4c6089b5840d64687d34
 F src/sqliteInt.h 5d3e33fcc960fa319f06f7c69d4b3633b7cb4dfc4464bf1f47dd9e72d4f8a007
@@ -539,7 +539,7 @@ F src/threads.c 4ae07fa022a3dc7c5beb373cf744a85d3c5c6c3c
 F src/tokenize.c 1003d6d90c6783206c711f0a9397656fa5b055209f4d092caa43bb3bf5215db5
 F src/treeview.c 2ee4a5dada213d5ab08a742af5c876cee6f1aaae65f10a61923f3fb63846afef
 F src/trigger.c 929b12bb5f9ab3b10c589f71fa176effe6ea8bddc9eb1bbd2439755fa0acdfdf
-F src/update.c afb46178ffbf832ead40c1f7ab16b77281c0565a4429ad4e7f13192b48aa8b01
+F src/update.c b1ff6055b94f329711892adcc6370ae64e97744cfca38d9b52dbc363f093f67f
 F src/utf.c 810fbfebe12359f10bc2a011520a6e10879ab2a163bcb26c74768eab82ea62a5
 F src/util.c d01fa6f45bfad3b65fb2490513aa2e0676412c61b4b094340b513cf72c3704a4
 F src/vacuum.c 07eec96f821c7dcbdca2fadffc6e38ea2c24bf409fcb15fe9fb3ac444d632dfe
@@ -1688,7 +1688,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 50c8952c92b9f0c61935fb0df04ed1426d9e266a812071b7bf5b0215c5552757
-R 27d77b980c6b081a9288d237e34b2379
-U dan
-Z 38a96e74ef2f420253bcb0ab74b036ef
+P dc0fc2aa7cbefeb5f0ba8c992fd3e9adcfb5a4d61e2321c1bd93f4d36ba9aafc
+R 702ba7f89516e6b4213a8a9c80c22c31
+T *branch * noop-update-reprepare
+T *sym-noop-update-reprepare *
+T -sym-begin-concurrent-pnu *
+U drh
+Z 65b741df5aae07a321971472d0980009
index 01f2fea0178a1c8200fc8c3b303d451fe60c9c50..9f665421968a857dfdb354b14e29907c089b4814 100644 (file)
@@ -1 +1 @@
-dc0fc2aa7cbefeb5f0ba8c992fd3e9adcfb5a4d61e2321c1bd93f4d36ba9aafc
\ No newline at end of file
+c25da6de1dc3b9c5014934ecae0eded8631b9a131a93a09da3adb3a8b4d8afb8
\ No newline at end of file
index 9141cb8a78475a7027dfd75e0a67b9fb8d30a076..87e22c40b69eff053e4bb28356dd245175160f97 100644 (file)
@@ -679,6 +679,9 @@ static int sqlite3LockAndPrepare(
   }
   sqlite3_mutex_enter(db->mutex);
   sqlite3BtreeEnterAll(db);
+#if defined(SQLITE_ENABLE_NOOP_UPDATE) && !defined(SQLITE_OMIT_FLAG_PRAGMAS)
+  if( db->flags & SQLITE_NoopUpdate ) prepFlags |= SQLITE_PREPARE_NOOP_UPDATE;
+#endif
   rc = sqlite3Prepare(db, zSql, nBytes, prepFlags, pOld, ppStmt, pzTail);
   if( rc==SQLITE_SCHEMA ){
     sqlite3ResetOneSchema(db, -1);
index 557339ab11cd871d9b33d9642bc906718b72a6c8..c0b2eb93917acbdca6f5962c046053a11cbfd89c 100644 (file)
@@ -3553,6 +3553,7 @@ int sqlite3_limit(sqlite3*, int id, int newVal);
 ** </dl>
 */
 #define SQLITE_PREPARE_PERSISTENT              0x01
+#define SQLITE_PREPARE_NOOP_UPDATE             0x02
 
 /*
 ** CAPI3REF: Compiling An SQL Statement
index 277d0d867c2d63097b03ac9643bba2f89929c663..aa8ff128de2b796a2a539525155bcb9184cacdda 100644 (file)
@@ -237,7 +237,9 @@ void sqlite3Update(
   chngRowid = chngPk = 0;
   for(i=0; i<pChanges->nExpr; i++){
 #if defined(SQLITE_ENABLE_NOOP_UPDATE) && !defined(SQLITE_OMIT_FLAG_PRAGMAS)
-    if( db->flags & SQLITE_NoopUpdate ){
+    if( 0!=sqlite3GetVdbe(pParse)
+     && 0!=(sqlite3VdbePrepareFlags(pParse->pVdbe) & SQLITE_PREPARE_NOOP_UPDATE)
+    ){
       Token x;
       sqlite3ExprDelete(db, pChanges->a[i].pExpr);
       x.z = pChanges->a[i].zName;