]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix another problem with ALTER TABLE and vector UPDATE statements within triggers.
authordan <Dan Kennedy>
Wed, 29 Sep 2021 18:33:26 +0000 (18:33 +0000)
committerdan <Dan Kennedy>
Wed, 29 Sep 2021 18:33:26 +0000 (18:33 +0000)
FossilOrigin-Name: a0df216f7c3f8963efba0b1ffee65d6a63309d846ffdcf2d2932cb4f1d4967b7

manifest
manifest.uuid
src/expr.c
test/altertab3.test

index 8d4aee023e85cfc82488564919a9e496784e21ff..443ef98e8cd567e40230350422cec24c2e5861ea 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Add\snew\stest\sfile\srtreedoc3.test.
-D 2021-09-29T16:38:02.070
+C Fix\sanother\sproblem\swith\sALTER\sTABLE\sand\svector\sUPDATE\sstatements\swithin\striggers.
+D 2021-09-29T18:33:26.405
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -501,7 +501,7 @@ F src/date.c e0632f335952b32401482d099321bbf12716b29d6e72836b53ae49683ebae4bf
 F src/dbpage.c 8a01e865bf8bc6d7b1844b4314443a6436c07c3efe1d488ed89e81719047833a
 F src/dbstat.c bea044cfe99eab6c527837e196a5335c128989bdb354cf1b4973b85ea561d66b
 F src/delete.c 3ce6af6b64c8b476de51ccc32da0cb3142d42e65754e1d8118addf65b8bcba15
-F src/expr.c 7628ab5359d7643bfd5b6027a7774419dd12bfbb2bc1f0d2a75bd12dd8c97304
+F src/expr.c 82797e5d82422d34ede9a95ba459f40c317b2daadb21109a21abfd42f84e3ed8
 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007
 F src/fkey.c 1905af1821b88321e1bb9d6a69e704495b6844a9b6c29398d40117cc251e893c
 F src/func.c 812ac5383067bed7150d8597e83c47b714d73db0e62af55811d1a145243e58e1
@@ -665,7 +665,7 @@ F test/altermalloc3.test 4660ac6240a8c82ba3947b927612dcc7c05a8eec3fe3c9f38e047ca
 F test/alterqf.test 67568ad152db8c1187b15633b801242cf960f1beafc51261a3d1725d910baeb2
 F test/altertab.test a13e11cb1933575002367613b1094f0eeb31f493e4bd9ebeca73279fe00c85e7
 F test/altertab2.test b0d62f323ca5dab42b0bc028c52e310ebdd13e655e8fac070fe622bad7852c2b
-F test/altertab3.test 9a8aad735c48440c05787b4ab5ac821340a72c6febd1ff8bf74e065fb75882b2
+F test/altertab3.test 78372063fae383ba41d1ad0ff1446e148f3c96815e648f830a55ba33668b4a69
 F test/amatch1.test b5ae7065f042b7f4c1c922933f4700add50cdb9f
 F test/analyze.test 547bb700f903107b38611b014ca645d6b5bb819f5210d7bf39c40802aafeb7d7
 F test/analyze3.test 4440c4932247adb2b4e0c838f657c19dc7af4f56859255436dc4e855f39b9324
@@ -1928,7 +1928,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 bbfd083c26086fb103fec88faa59a01e689e0b7fce38c09d8846bb472a0e6760
-R 1037eaccd5510af0a78ced89d8bc5f27
+P 54604869861cc5866d5de87785599ca56f75067f8cb7fe22e32912b3a037e37b
+R c102c10e7d90535120f47ae5b9d857b8
 U dan
-Z 19b69f1d272ce42a44f4a2c19e639601
+Z 5f5b68ce84257c8f070b0080ca6a87b5
index ef85c1c5c1cf16824a8462fba63f92f3e295f9f8..2cc8710f1954a10519c9e3d031194624623dd3e7 100644 (file)
@@ -1 +1 @@
-54604869861cc5866d5de87785599ca56f75067f8cb7fe22e32912b3a037e37b
\ No newline at end of file
+a0df216f7c3f8963efba0b1ffee65d6a63309d846ffdcf2d2932cb4f1d4967b7
\ No newline at end of file
index 3e60cf712c303025cda1591a0cb3eec0141262a9..d121fbfd22db6e753699807ed8d1c0928a3e5639 100644 (file)
@@ -516,12 +516,16 @@ Expr *sqlite3ExprForVectorField(
       pRet->pLeft = pVector;
     }
   }else{
-    if( pVector->op==TK_VECTOR ) pVector = pVector->x.pList->a[iField].pExpr;
-    pRet = sqlite3ExprDup(pParse->db, pVector, 0);
-    if( pRet && IN_RENAME_OBJECT ){
-      SWAP(Expr, *pRet, *pVector);
-      sqlite3RenameTokenRemap(pParse, pRet, pVector);
+    if( pVector->op==TK_VECTOR ){
+      Expr **ppVector = &pVector->x.pList->a[iField].pExpr;
+      pVector = *ppVector;
+      if( IN_RENAME_OBJECT ){
+        /* This must be a vector UPDATE inside a trigger */
+        *ppVector = 0;
+        return pVector;
+      }
     }
+    pRet = sqlite3ExprDup(pParse->db, pVector, 0);
   }
   return pRet;
 }
index db38d76dd15d752520ba96e9e6fa1df3d7f4ab0a..5cf821b7e68fe1b8af0c933cc682746ba64a8678 100644 (file)
@@ -672,6 +672,22 @@ do_execsql_test 27.4 {
 
 finish_test
 
+#-------------------------------------------------------------------------
+reset_db
+do_execsql_test 28.1 {
+  CREATE TABLE t1(a,b,c,d);
+  CREATE TRIGGER AFTER INSERT ON t1 BEGIN
+    UPDATE t1 SET (c,d)=(a,b);
+  END;
+  ALTER TABLE t1 RENAME TO t2;
+}
+
+do_execsql_test 28.2 {
+  SELECT sql FROM sqlite_schema WHERE type=trigger
+} {{CREATE TRIGGER AFTER INSERT ON t2 BEGIN
+    UPDATE t1 SET (c,d)=(a,b);
+  END}}
+
 
 
 finish_test