]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix a problem allowing SQL variables to be used expressions within the second and...
authordan <Dan Kennedy>
Wed, 21 Apr 2021 11:32:22 +0000 (11:32 +0000)
committerdan <Dan Kennedy>
Wed, 21 Apr 2021 11:32:22 +0000 (11:32 +0000)
FossilOrigin-Name: 2a28910a17dc5b3ce43062fdf879f9622f6ec2db19ed780fa7fe5cae781be7b7

manifest
manifest.uuid
src/attach.c
test/trigger2.test

index cf6df27caab3b6cb0879bf5df8446ffd7b740d2f..4906a94385db216bb1e2e8c5f115b7b43e2ff0d6 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Remove\sa\stestcase()\sthat\sis\sno\slonger\srelevant\sdue\sto\sthe\sprevious\scheck-in.
-D 2021-04-20T22:48:25.584
+C Fix\sa\sproblem\sallowing\sSQL\svariables\sto\sbe\sused\sexpressions\swithin\sthe\ssecond\sand\ssubsequent\sON\sCONFLICT\sclauses\sof\san\sUPSERT\swithin\sa\strigger.
+D 2021-04-21T11:32:22.033
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -478,7 +478,7 @@ F sqlite3.1 fc7ad8990fc8409983309bb80de8c811a7506786
 F sqlite3.pc.in 48fed132e7cb71ab676105d2a4dc77127d8c1f3a
 F src/alter.c e7caf3eefce268250dc1d10322eec637319de486aa1bae7f48c606259455537e
 F src/analyze.c 01c6c6765cb4d40b473b71d85535093730770bb186f2f473abac25f07fcdee5c
-F src/attach.c 8783d67d2c61371dfae46e4043158d44b73c14154d62560cd4cb1e0dfc6337a1
+F src/attach.c a7d1a7df69f053951ec1665e5894c61184fda3f677323762f1c3679ebd27d5c7
 F src/auth.c 08954fdc4cc2da5264ba5b75cfd90b67a6fc7d1710a02ccf917c38eadec77853
 F src/backup.c 3014889fa06e20e6adfa0d07b60097eec1f6e5b06671625f476a714d2356513d
 F src/bitvec.c 17ea48eff8ba979f1f5b04cc484c7bb2be632f33
@@ -1618,7 +1618,7 @@ F test/trans2.test 62bd045bfc7a1c14c5ba83ba64d21ade31583f76
 F test/trans3.test 91a100e5412b488e22a655fe423a14c26403ab94
 F test/transitive1.test 239eec5343388983f112c16d666aa89960cd85302b6af6cd8408ce8edb7b3316
 F test/trigger1.test d30cd09ae8ac365a088f09daba583cc5c0b8fc7d4e1d70809d0b4be3bf6ae2ab
-F test/trigger2.test d15da46f7012832faf3e0c536b47024409d5fb1722d2bb77e29c06d96d704bb1
+F test/trigger2.test 6e35bd7321c49e63d540aee980eb95dec63e1d1caca175224101045bcc80871f
 F test/trigger3.test aa640bb2bbb03edd5ff69c055117ea088f121945
 F test/trigger4.test 74700b76ebf3947b2f7a92405141eb2cf2a5d359
 F test/trigger5.test 619391a3e9fc194081d22cefd830d811e7badf83
@@ -1913,7 +1913,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 a18c65068b16eae3c0725356d7f4775774b23e248c700cef8c15f23459fba68f
-R 5da520d950e2a8ca4b2fc54669f1ae8e
-U drh
-Z 554a359b2c97402a5807dfb93b98164e
+P ca70c8ac72c9fe3b92f8e63151229bebdccc769c5c4d603ad4f466dc4bcd11e0
+R 488802624573ed85b9dab18218ec296a
+U dan
+Z 006370ce7463f27ee095e187ed12f536
index 92996aa01186caa674adf3eb62f19a52258a17b7..8162c17061b93ec8399afd23bf55ca525f1e01a8 100644 (file)
@@ -1 +1 @@
-ca70c8ac72c9fe3b92f8e63151229bebdccc769c5c4d603ad4f466dc4bcd11e0
\ No newline at end of file
+2a28910a17dc5b3ce43062fdf879f9622f6ec2db19ed780fa7fe5cae781be7b7
\ No newline at end of file
index 9bd57f28653ac88d77ac21a5a271025f0e68ed80..dcfa4910d031ab5ddfb6deb5c2422f0dbbb77b46 100644 (file)
@@ -573,14 +573,16 @@ int sqlite3FixTriggerStep(
       return 1;
     }
 #ifndef SQLITE_OMIT_UPSERT
-    if( pStep->pUpsert ){
-      Upsert *pUp = pStep->pUpsert;
-      if( sqlite3WalkExprList(&pFix->w, pUp->pUpsertTarget)
-       || sqlite3WalkExpr(&pFix->w, pUp->pUpsertTargetWhere)
-       || sqlite3WalkExprList(&pFix->w, pUp->pUpsertSet)
-       || sqlite3WalkExpr(&pFix->w, pUp->pUpsertWhere)
-      ){
-        return 1;
+    {
+      Upsert *pUp;
+      for(pUp=pStep->pUpsert; pUp; pUp=pUp->pNextUpsert){
+        if( sqlite3WalkExprList(&pFix->w, pUp->pUpsertTarget)
+         || sqlite3WalkExpr(&pFix->w, pUp->pUpsertTargetWhere)
+         || sqlite3WalkExprList(&pFix->w, pUp->pUpsertSet)
+         || sqlite3WalkExpr(&pFix->w, pUp->pUpsertWhere)
+        ){
+          return 1;
+        }
       }
     }
 #endif
index 1be72131f74a00c80a15477f510763a7a8972e9e..6e007e969a8e5665608441be0a67e269862c0ac4 100644 (file)
@@ -49,6 +49,7 @@
 
 set testdir [file dirname $argv0]
 source $testdir/tester.tcl
+set testprefix trigger2
 ifcapable {!trigger} {
   finish_test
   return
@@ -769,6 +770,24 @@ do_execsql_test trigger2-10.1 {
  
 } ;# ifcapable view
 
-integrity_check trigger2-999
+#-------------------------------------------------------------------------
+reset_db
+do_execsql_test 11.1 {
+  CREATE TABLE t1(a INT PRIMARY KEY, b, c REAL, d, e);
+  CREATE TABLE t2(a INT, b, c REAL, d, e, PRIMARY KEY(a,b)) WITHOUT ROWID;
+  CREATE UNIQUE INDEX t2c ON t2(c);
+  CREATE UNIQUE INDEX t2d ON t2(d);
+  CREATE UNIQUE INDEX t2e ON t2(e);
+}
+
+do_catchsql_test 11.2 {
+  CREATE TRIGGER r1 BEFORE INSERT ON t1 BEGIN
+    INSERT INTO t2(a,b,c,d,e) VALUES(91,NULL,93,94,?1)
+      ON CONFLICT(b,a) DO NOTHING
+      ON CONFLICT DO UPDATE SET b=?1;
+  END;
+} {1 {trigger cannot use variables}}
+
 
 finish_test
+