From: drh Date: Tue, 23 Jan 2018 01:56:55 +0000 (+0000) Subject: Enhance the PRAGMA noop_update statement so that the behavior persists across X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=refs%2Fheads%2Fnoop-update-reprepare;p=thirdparty%2Fsqlite.git Enhance the PRAGMA noop_update statement so that the behavior persists across reprepare operations. FossilOrigin-Name: c25da6de1dc3b9c5014934ecae0eded8631b9a131a93a09da3adb3a8b4d8afb8 --- diff --git a/manifest b/manifest index 8f46fe4a5f..c195ed109f 100644 --- 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 diff --git a/manifest.uuid b/manifest.uuid index 01f2fea017..9f66542196 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -dc0fc2aa7cbefeb5f0ba8c992fd3e9adcfb5a4d61e2321c1bd93f4d36ba9aafc \ No newline at end of file +c25da6de1dc3b9c5014934ecae0eded8631b9a131a93a09da3adb3a8b4d8afb8 \ No newline at end of file diff --git a/src/prepare.c b/src/prepare.c index 9141cb8a78..87e22c40b6 100644 --- a/src/prepare.c +++ b/src/prepare.c @@ -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); diff --git a/src/sqlite.h.in b/src/sqlite.h.in index 557339ab11..c0b2eb9391 100644 --- a/src/sqlite.h.in +++ b/src/sqlite.h.in @@ -3553,6 +3553,7 @@ int sqlite3_limit(sqlite3*, int id, int newVal); ** */ #define SQLITE_PREPARE_PERSISTENT 0x01 +#define SQLITE_PREPARE_NOOP_UPDATE 0x02 /* ** CAPI3REF: Compiling An SQL Statement diff --git a/src/update.c b/src/update.c index 277d0d867c..aa8ff128de 100644 --- a/src/update.c +++ b/src/update.c @@ -237,7 +237,9 @@ void sqlite3Update( chngRowid = chngPk = 0; for(i=0; inExpr; 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;