From: dan Date: Wed, 29 Sep 2021 18:33:26 +0000 (+0000) Subject: Fix another problem with ALTER TABLE and vector UPDATE statements within triggers. X-Git-Tag: version-3.37.0~190 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ab632bc97e8d68d77912b16176a39781fd75a2a8;p=thirdparty%2Fsqlite.git Fix another problem with ALTER TABLE and vector UPDATE statements within triggers. FossilOrigin-Name: a0df216f7c3f8963efba0b1ffee65d6a63309d846ffdcf2d2932cb4f1d4967b7 --- diff --git a/manifest b/manifest index 8d4aee023e..443ef98e8c 100644 --- 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 diff --git a/manifest.uuid b/manifest.uuid index ef85c1c5c1..2cc8710f19 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -54604869861cc5866d5de87785599ca56f75067f8cb7fe22e32912b3a037e37b \ No newline at end of file +a0df216f7c3f8963efba0b1ffee65d6a63309d846ffdcf2d2932cb4f1d4967b7 \ No newline at end of file diff --git a/src/expr.c b/src/expr.c index 3e60cf712c..d121fbfd22 100644 --- a/src/expr.c +++ b/src/expr.c @@ -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; } diff --git a/test/altertab3.test b/test/altertab3.test index db38d76dd1..5cf821b7e6 100644 --- a/test/altertab3.test +++ b/test/altertab3.test @@ -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