]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Correction to check-in [bec5b6d4d083556d] so that it detects *all*
authordrh <drh@noemail.net>
Thu, 24 Oct 2019 19:35:26 +0000 (19:35 +0000)
committerdrh <drh@noemail.net>
Thu, 24 Oct 2019 19:35:26 +0000 (19:35 +0000)
triggers that might perturb the insertion cursor.
Ticket [50c09fc2cf0d91ce].

FossilOrigin-Name: 521f1d36282549488a47a434484a24924ee970d29f05a8ae499b7d536bcd692b

manifest
manifest.uuid
src/insert.c
src/vdbe.h
src/vdbeaux.c
test/trigger1.test

index b48aecb39e3ab6f2dbba60f0cfa6b2578b47973b..9d3af284e64f271e43f565a6ece8d7281793ee95 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Add\san\sexperimental\sset\sof\sUUID\sprocessing\sfunctions\sas\sthe\suuid.c\nextension\sin\sext/misc/uuid.c.
-D 2019-10-23T21:00:40.803
+C Correction\sto\scheck-in\s[bec5b6d4d083556d]\sso\sthat\sit\sdetects\s*all*\ntriggers\sthat\smight\sperturb\sthe\sinsertion\scursor.\nTicket\s[50c09fc2cf0d91ce].
+D 2019-10-24T19:35:26.195
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -487,7 +487,7 @@ F src/hash.c 8d7dda241d0ebdafb6ffdeda3149a412d7df75102cecfc1021c98d6219823b19
 F src/hash.h 9d56a9079d523b648774c1784b74b89bd93fac7b365210157482e4319a468f38
 F src/hwtime.h 747c1bbe9df21a92e9c50f3bbec1de841dc5e5da
 F src/in-operator.md 10cd8f4bcd225a32518407c2fb2484089112fd71
-F src/insert.c 69e47d76598d26f87cc9b32b9e9fc84e49e3b9371b5d9ae8465f38486ad9665e
+F src/insert.c 2b930afc0fb4c245916d19f638e4b332f4a6d8a3a7c73c288ec18e25caf46900
 F src/legacy.c d7874bc885906868cd51e6c2156698f2754f02d9eee1bae2d687323c3ca8e5aa
 F src/loadext.c 4ddc65ae13c0d93db0ceedc8b14a28c8c260513448b0eb8c5a2ac375e3b6a85d
 F src/main.c 3e01f6a1c96643381b5f9d79e4ff7f2520bc5712197746fb0852283e78cccf66
@@ -599,10 +599,10 @@ F src/utf.c 2f0fac345c7660d5c5bd3df9e9d8d33d4c27f366bcfb09e07443064d751a0507
 F src/util.c 10d910e04a4f3842042485e0df01a484f57f912c10b60b3a09ccddd5019bd138
 F src/vacuum.c 82dcec9e7b1afa980288718ad11bc499651c722d7b9f32933c4d694d91cb6ebf
 F src/vdbe.c 9a3f4c2ec6c45e4bd5db465e77e79dfdf5bdc5cf3a8c0bfe9549da209b9c18bc
-F src/vdbe.h 3f2b571e702e77e6bf031f0236e554aedfae643e991f69000320f481408455cf
+F src/vdbe.h 7fbde1e64423368d7fd9b606dcde1c90eb24f6f7ea1f625d161731ac2f703fca
 F src/vdbeInt.h bd589b8b7273286858950717e0e1ec5c88b18af45079a3366dc1371865cea704
 F src/vdbeapi.c 95001d0f84ee3cda344fed98ca0d7961deb4fc836b83495630d0af1f7cc4789e
-F src/vdbeaux.c a35a1785f980c44838b636a6d55a46b25ad80f2a2065851f165ab143aa46f99c
+F src/vdbeaux.c be3e250525e4a75f82a8cfa0dcfe2e9cad058cf16c8c568677c2b13043db1e2d
 F src/vdbeblob.c 253ed82894924c362a7fa3079551d3554cd1cdace39aa833da77d3bc67e7c1b1
 F src/vdbemem.c d8e10d1773806105e62094c4ede0a4684f46caaf07667a45e6d461e94306b530
 F src/vdbesort.c a3be032cc3fee0e3af31773af4a7a6f931b7230a34f53282ccf1d9a2a72343be
@@ -1570,7 +1570,7 @@ F test/trans.test 6e1b4c6a42dba31bd65f8fa5e61a2708e08ddde6
 F test/trans2.test 62bd045bfc7a1c14c5ba83ba64d21ade31583f76
 F test/trans3.test 91a100e5412b488e22a655fe423a14c26403ab94
 F test/transitive1.test 293300f46916569f08875cdb2fe2134be2c27677
-F test/trigger1.test 6be279c9d48b25320eab68c30fd5268ab787955679f4c584128f71800247fb50
+F test/trigger1.test 746dc327e2a0817a22bfc6f5a5e423483d3e77b3733ac20a8fe939e6541b5e53
 F test/trigger2.test 5cd7d69a7ba1143ee045e4ae2963ff32ae4c87a6
 F test/trigger3.test aa640bb2bbb03edd5ff69c055117ea088f121945
 F test/trigger4.test 74700b76ebf3947b2f7a92405141eb2cf2a5d359
@@ -1848,7 +1848,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 978b2d20cf95d0b7143e3104ce1e9d5c85002867b554dc6b21deb528b730bbc7
-R 64938473a0a5ad3e464c05ab968a1d3f
+P 1a6e009372cf9571e540812c8607e95a86740112a1091f03e3f632339eccb629
+R 261f5a821821bff58698ad94c5756d8a
 U drh
-Z 064b470a12983289ba0d29967199891d
+Z 32a0c838e11db7d7d6e97512ba7b2d3c
index c7965852a7834dcb4ce98f109e400e6e4bbde8e7..0f8ad72971a6fe2a51383696c6de98642f794268 100644 (file)
@@ -1 +1 @@
-1a6e009372cf9571e540812c8607e95a86740112a1091f03e3f632339eccb629
\ No newline at end of file
+521f1d36282549488a47a434484a24924ee970d29f05a8ae499b7d536bcd692b
\ No newline at end of file
index 3bb1ee706a0faf982142d72c61c5f703e17cfad4..77b402c7ec457fb7b08929c415d4186af3449030 100644 (file)
@@ -1058,9 +1058,7 @@ void sqlite3Insert(
       ** cursor that is disturbed. And these instructions both clear the
       ** VdbeCursor.seekResult variable, disabling the OPFLAG_USESEEKRESULT
       ** functionality.  */
-      bUseSeek = (isReplace==0 || (pTrigger==0 &&
-          ((db->flags & SQLITE_ForeignKeys)==0 || sqlite3FkReferences(pTab)==0)
-      ));
+      bUseSeek = (isReplace==0 || !sqlite3VdbeHasSubProgram(v));
       sqlite3CompleteInsertion(pParse, pTab, iDataCur, iIdxCur,
           regIns, aRegIdx, 0, appendFlag, bUseSeek
       );
index e3aaaa1ce2fb55e7cb2fe44f735ccaa838032748..b59fc7a26de3947558a4321c545afaa5fe91f8a4 100644 (file)
@@ -278,9 +278,8 @@ UnpackedRecord *sqlite3VdbeAllocUnpackedRecord(KeyInfo*);
 typedef int (*RecordCompare)(int,const void*,UnpackedRecord*);
 RecordCompare sqlite3VdbeFindCompare(UnpackedRecord*);
 
-#ifndef SQLITE_OMIT_TRIGGER
 void sqlite3VdbeLinkSubProgram(Vdbe *, SubProgram *);
-#endif
+int sqlite3VdbeHasSubProgram(Vdbe*);
 
 int sqlite3NotPureFunc(sqlite3_context*);
 
index c89b7d4197f9068dc5e69ffa770f00eaf60004b5..86980b4ddc577835567102513f88eea26794b2ac 100644 (file)
@@ -1098,6 +1098,13 @@ void sqlite3VdbeLinkSubProgram(Vdbe *pVdbe, SubProgram *p){
   pVdbe->pProgram = p;
 }
 
+/*
+** Return true if the given Vdbe has any SubPrograms.
+*/
+int sqlite3VdbeHasSubProgram(Vdbe *pVdbe){
+  return pVdbe->pProgram!=0;
+}
+
 /*
 ** Change the opcode at addr into OP_Noop
 */
index ddb40e3adbeef07234005a575d8fffea54a64eff..8fc3c74e77b0a347ef74bd77725824d1979f6156 100644 (file)
@@ -782,4 +782,20 @@ do_execsql_test trigger1-20.1 {
   DROP TRIGGER r20_3;
 } {}
 
+# 2019-10-24 ticket 50c09fc2cf0d91ce
+#
+db close
+sqlite3 db :memory:
+do_execsql_test trigger1-21.1 {
+  PRAGMA recursive_triggers = true;
+  CREATE TABLE t0(a, b, c UNIQUE);
+  CREATE UNIQUE INDEX i0 ON t0(b) WHERE a;
+  CREATE TRIGGER tr0 AFTER DELETE ON t0 BEGIN
+    DELETE FROM t0;
+  END;
+  INSERT INTO t0(a,b,c) VALUES(0,0,9),(1,1,1);
+  REPLACE INTO t0(a,b,c) VALUES(2,0,9);
+  SELECT * FROM t0;
+} {2 0 9}
+
 finish_test