]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
In ALTER TABLE, rename columns and tables in expressions that are optimized out by...
authordan <dan@noemail.net>
Mon, 30 Dec 2019 06:55:31 +0000 (06:55 +0000)
committerdan <dan@noemail.net>
Mon, 30 Dec 2019 06:55:31 +0000 (06:55 +0000)
FossilOrigin-Name: a9e0354c992b0287608ddd18fd35fe7e6102a8f293d6e6e1b3488644bcda8168

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

index 0c5039c406b5b5156d93bc79c45fcc211de7c31d..b8ff4d4e021b721699abe6b21a51050371b64fab 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Do\snot\sallow\striggers\sthat\srun\sas\spart\sof\sREPLACE\sconflict\sresolution\nduring\san\sUPDATE\sto\smodify\sthe\sthe\stable\sbeing\supdated.\s\sOtherwise,\sthose\ntriggers\smight\sdelete\scontent\sout\sfrom\sunder\sthe\supdate\soperation,\sleading\nto\sall\skinds\sof\sproblems.\s\sTicket\s[314cc133e5ada126]
-D 2019-12-29T22:08:20.135
+C In\sALTER\sTABLE,\srename\scolumns\sand\stables\sin\sexpressions\sthat\sare\soptimized\sout\sby\sthe\s"AND\s0"\soptimization.\sDoing\sthis\salso\sfixes\san\sotherwise\sharmless\sassert()\sfailure.
+D 2019-12-30T06:55:31.748
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -480,7 +480,7 @@ F src/date.c e1d8ac7102f3f283e63e13867acb0efa33861cf34f0faf4cdbaf9fa7a1eb7041
 F src/dbpage.c 135eb3b5e74f9ef74bde5cec2571192c90c86984fa534c88bf4a055076fa19b7
 F src/dbstat.c 6c407e549406c10fde9ac3987f6d734459205239ad370369bc5fcd683084a4fa
 F src/delete.c a5c59b9c0251cf7682bc52af0d64f09b1aefc6781a63592c8f1136f7b73c66e4
-F src/expr.c de4fa05000145cbb6ff29b106e2c7dded5fe3d7882c518b2bc6f63c27891a645
+F src/expr.c 3584e19c222f94cd0bb9070318ad270c3ca0d4fe235a6f70a198f16d8faf976f
 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007
 F src/fkey.c 92a248ec0fa4ed8ab60c98d9b188ce173aaf218f32e7737ba77deb2a684f9847
 F src/func.c ed33e38cd642058182a31a3f518f2e34f4bbe53aa483335705c153c4d3e50b12
@@ -637,8 +637,8 @@ F test/alterlegacy.test 82022721ce0de29cedc9a7af63bc9fcc078b0ee000f8283b4b6ea9c3
 F test/altermalloc.test 167a47de41b5c638f5f5c6efb59784002b196fff70f98d9b4ed3cd74a3fb80c9
 F test/altermalloc2.test fa7b1c1139ea39b8dec407cf1feb032ca8e0076bd429574969b619175ad0174b
 F test/altertab.test 4d8b79b0b88b62b90b710390df14fe99e0a3578345526886eaa550e28e3065dc
-F test/altertab2.test 8883693952f6d7fb5f754dbf1d694ed780aa883027bef04cb1fb99a3b88c9272
-F test/altertab3.test d58d41201afd64c6176dcc4e71110c600c03841dad1efcc354de2248f6126e70
+F test/altertab2.test b0d62f323ca5dab42b0bc028c52e310ebdd13e655e8fac070fe622bad7852c2b
+F test/altertab3.test 155b8dc225ce484454a7fb4c8ba745680b6fa0fc3e08919cbbc19f9309d128ff
 F test/amatch1.test b5ae7065f042b7f4c1c922933f4700add50cdb9f
 F test/analyze.test 547bb700f903107b38611b014ca645d6b5bb819f5210d7bf39c40802aafeb7d7
 F test/analyze3.test 01f0b122e3e54ad2544f14f7cc7dcb4c2cb8753cad5e88c6b8d49615b3fd6a2b
@@ -1853,7 +1853,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 21ef6e99331210b80fa7c71b4f02e8f768a748d01aef884368af2f6b51a067e0
-R b7ec11b757aee6e4ed77f8bc1e680bf5
-U drh
-Z bc0033b99f278b5e6e67f422296a8976
+P db4b7e1dc399c1f16b827ac087aa37c0815f4b2f41f1ffad59963eead2ab5562
+R d015eff90d79dae7805d6393f409ae2c
+U dan
+Z 4676afd3b05e3706903e7277aaa2fd67
index e8038b4c09e22dc33283efcd24c46630ec143de8..9f6809bcbc4570c948bde21a5f63d074b2b8b983 100644 (file)
@@ -1 +1 @@
-db4b7e1dc399c1f16b827ac087aa37c0815f4b2f41f1ffad59963eead2ab5562
\ No newline at end of file
+a9e0354c992b0287608ddd18fd35fe7e6102a8f293d6e6e1b3488644bcda8168
\ No newline at end of file
index 76ffea3f17dd2455365bf4e18cedaf0531e96718..e0a03d956f6e6430ee84714957199cde2f08d347 100644 (file)
@@ -933,9 +933,11 @@ Expr *sqlite3ExprAnd(Parse *pParse, Expr *pLeft, Expr *pRight){
     return pRight;
   }else if( pRight==0 ){
     return pLeft;
-  }else if( ExprAlwaysFalse(pLeft) || ExprAlwaysFalse(pRight) ){
-    sqlite3ExprUnmapAndDelete(pParse, pLeft);
-    sqlite3ExprUnmapAndDelete(pParse, pRight);
+  }else if( (ExprAlwaysFalse(pLeft) || ExprAlwaysFalse(pRight)) 
+         && !IN_RENAME_OBJECT
+  ){
+    sqlite3ExprDelete(db, pLeft);
+    sqlite3ExprDelete(db, pRight);
     return sqlite3Expr(db, TK_INTEGER, "0");
   }else{
     return sqlite3PExpr(pParse, TK_AND, pLeft, pRight);
index f14dc13ff15f93cdb3818fc8de4160181d347300..9c1ad5813408e6a39486abd2e33f7e8191ca1a06 100644 (file)
@@ -343,22 +343,21 @@ do_execsql_test 8.4 {
   CREATE VIEW v4 AS SELECT * FROM t4 WHERE (a=1 AND 0) OR b=2;
 }
 
-# Do not rename branches of an expression tree that is optimized out by
-# the AND optimization.
+# Branches of an expression tree that are optimized out by the AND 
+# optimization are renamed.
 #
 do_execsql_test 8.5 {
   ALTER TABLE t4 RENAME a TO c;
   SELECT sql FROM sqlite_master WHERE name = 'v4'
-} {{CREATE VIEW v4 AS SELECT * FROM t4 WHERE (a=1 AND 0) OR b=2}}
-#                "a" is not renamed to "c" ---^
+} {{CREATE VIEW v4 AS SELECT * FROM t4 WHERE (c=1 AND 0) OR b=2}}
 
 # 2019-06-10 https://www.sqlite.org/src/info/533010b8cacebe82
 reset_db
-do_execsql_test 8.6 {
+do_catchsql_test 8.6 {
   CREATE TABLE t0(c0);
   CREATE INDEX i0 ON t0(LIKELIHOOD(1,2) AND 0);
   ALTER TABLE t0 RENAME TO t1;
   SELECT sql FROM sqlite_master WHERE name='i0';
-} {{CREATE INDEX i0 ON "t1"(LIKELIHOOD(1,2) AND 0)}}
+} {1 {error in index i0: second argument to likelihood() must be a constant between 0.0 and 1.0}}
 
 finish_test
index 74b9b1a0f002a3ea7683d53f0dbc476031046fdf..b39065589c8787f61ac051a13c3d3481e883790c 100644 (file)
@@ -552,5 +552,39 @@ do_catchsql_test 23.3 {
   ALTER TABLE v0 RENAME TO t3 ;
 } {1 {error in view v2: view v2 is circularly defined}}
 
+#------------------------------------------------------------------------
+#
+reset_db
+do_execsql_test 24.1 {
+  CREATE TABLE v0 (v1); 
+  CREATE TABLE v2 (v3 INTEGER UNIQUE ON CONFLICT ABORT); 
+  CREATE TRIGGER x AFTER INSERT ON v2 WHEN ( 
+      ( SELECT v1 AS PROMO_REVENUE FROM v2 JOIN v0 USING ( VALUE ) ) AND 0 ) 
+  BEGIN 
+    DELETE FROM v2; 
+  END; 
+}
+do_catchsql_test 24.2 {
+  ALTER TABLE v0 RENAME TO x ;
+} {1 {error in trigger x: cannot join using column VALUE - column not present in both tables}}
+
+do_execsql_test 24.3 {
+  DROP TRIGGER x;
+  CREATE TRIGGER x AFTER INSERT ON v2 WHEN (
+    0 AND (SELECT rowid FROM v0)
+  ) BEGIN
+    DELETE FROM v2;
+  END;
+}
+
+do_execsql_test 24.4 {
+  ALTER TABLE v0 RENAME TO xyz;
+  SELECT sql FROM sqlite_master WHERE type='trigger'
+} {{CREATE TRIGGER x AFTER INSERT ON v2 WHEN (
+    0 AND (SELECT rowid FROM "xyz")
+  ) BEGIN
+    DELETE FROM v2;
+  END}}
+
 finish_test