]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
The ALTER TABLE command should not attempt to rename objects that are
authordrh <drh@noemail.net>
Tue, 11 Jun 2019 02:43:22 +0000 (02:43 +0000)
committerdrh <drh@noemail.net>
Tue, 11 Jun 2019 02:43:22 +0000 (02:43 +0000)
contained within an expression tree that has been optimized out because
it is the other branch of an "AND false" expression.
Ticket [533010b8cacebe82]

FossilOrigin-Name: 04bd5cb73287f926f1ecf578998fa6ce1379474e86918c692eae5778d0817cef

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

index 947387a0555abbf3de518a8e7d98f915a6605d40..776eebe5bdeb9b6ea3289c34e857ac473ab876c0 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\srepeated\stest\snumbers\sin\sthe\saltertab2.test\sfile.
-D 2019-06-11T01:56:42.626
+C The\sALTER\sTABLE\scommand\sshould\snot\sattempt\sto\srename\sobjects\sthat\sare\s\ncontained\swithin\san\sexpression\stree\sthat\shas\sbeen\soptimized\sout\sbecause\nit\sis\sthe\sother\sbranch\sof\san\s"AND\sfalse"\sexpression.\nTicket\s[533010b8cacebe82]
+D 2019-06-11T02:43:22.189
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -474,7 +474,7 @@ F src/date.c e1d8ac7102f3f283e63e13867acb0efa33861cf34f0faf4cdbaf9fa7a1eb7041
 F src/dbpage.c 135eb3b5e74f9ef74bde5cec2571192c90c86984fa534c88bf4a055076fa19b7
 F src/dbstat.c c12833de69cb655751487d2c5a59607e36be1c58ba1f4bd536609909ad47b319
 F src/delete.c d08c9e01a2664afd12edcfa3a9c6578517e8ff8735f35509582693adbe0edeaf
-F src/expr.c 6b18f022871816c80b772abc3657276562630004b48f588085b404f104fd4430
+F src/expr.c 19100ef384cbe1f985b2bf692bfe5100127365d81becb61122bed48667e0ad0d
 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007
 F src/fkey.c 0e14d4bef8eac2d87bbd517e492d9084c65008d117823f8922c5e7b2b599bd33
 F src/func.c 905c0424900979fade3731b4a271592059425c988cb7d5b245032253712dd7c8
@@ -631,7 +631,7 @@ F test/alterlegacy.test 82022721ce0de29cedc9a7af63bc9fcc078b0ee000f8283b4b6ea9c3
 F test/altermalloc.test 167a47de41b5c638f5f5c6efb59784002b196fff70f98d9b4ed3cd74a3fb80c9
 F test/altermalloc2.test fa7b1c1139ea39b8dec407cf1feb032ca8e0076bd429574969b619175ad0174b
 F test/altertab.test b6901287474841cffbd8f90b098d3bd7d8445868b42caeb01b27034698f7245f
-F test/altertab2.test 429e4e84475f3e10b6b49cb4025d4a58a22ea1145277cd99b6ed81c02061e490
+F test/altertab2.test 8883693952f6d7fb5f754dbf1d694ed780aa883027bef04cb1fb99a3b88c9272
 F test/altertab3.test 47cdbc49c0e3638754be29966e3406f5b8041ff863ecdcc176d6352fa0f2b6d7
 F test/amatch1.test b5ae7065f042b7f4c1c922933f4700add50cdb9f
 F test/analyze.test 7168c8bffa5d5cbc53c05b7e9c7fcdd24b365a1bc5046ce80c45efa3c02e6b7c
@@ -1830,7 +1830,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 211c8002d5ea4b224125d4ed395fe15767d1dc32a77b40b89fdfc80bdd1c5a48
-R e5606e998f2ab9c48506263561beeb14
+P e82f235e7201a420149847cda630ac6f2fce5e3a4577b0ea4793f430d3dc1611
+R 68739974257ae8553d5364ff46bec812
 U drh
-Z 5b483bb7289f1f0365328c5969127898
+Z d223dd9a1c633bbd46be540c239afe43
index 20000ff15eed4efd136d4bfa330c681e6b71035f..6b6897bdd94d54317620b07791fc9a7adb1bccea 100644 (file)
@@ -1 +1 @@
-e82f235e7201a420149847cda630ac6f2fce5e3a4577b0ea4793f430d3dc1611
\ No newline at end of file
+04bd5cb73287f926f1ecf578998fa6ce1379474e86918c692eae5778d0817cef
\ No newline at end of file
index 2d41fc447fe501d9be71df01844ed46e2941a1ea..057cbd6b7b45a7827f3fa3ce2322665bc1d8533a 100644 (file)
@@ -894,9 +894,11 @@ Expr *sqlite3ExprAnd(Parse *pParse, Expr *pLeft, Expr *pRight){
     return pRight;
   }else if( pRight==0 ){
     return pLeft;
-  }else if( pParse->nErr || IN_RENAME_OBJECT ){
-    return sqlite3PExpr(pParse, TK_AND, pLeft, pRight);
   }else if( ExprAlwaysFalse(pLeft) || ExprAlwaysFalse(pRight) ){
+    if( IN_RENAME_OBJECT ){
+      sqlite3RenameExprUnmap(pParse, pLeft);
+      sqlite3RenameExprUnmap(pParse, pRight);
+    }
     sqlite3ExprDelete(db, pLeft);
     sqlite3ExprDelete(db, pRight);
     return sqlite3ExprAlloc(db, TK_INTEGER, &sqlite3IntTokens[0], 0);
index 9b9070a7db06ad01cef72e57a6ec811297fba27e..f14dc13ff15f93cdb3818fc8de4160181d347300 100644 (file)
@@ -342,9 +342,23 @@ do_execsql_test 8.4 {
   CREATE TABLE t4(a, b);
   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.
+#
 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 (c=1 AND 0) OR b=2}}
+} {{CREATE VIEW v4 AS SELECT * FROM t4 WHERE (a=1 AND 0) OR b=2}}
+#                "a" is not renamed to "c" ---^
+
+# 2019-06-10 https://www.sqlite.org/src/info/533010b8cacebe82
+reset_db
+do_execsql_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)}}
 
 finish_test