From: drh Date: Tue, 11 Jun 2019 02:43:22 +0000 (+0000) Subject: The ALTER TABLE command should not attempt to rename objects that are X-Git-Tag: version-3.29.0~38 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b854b767330306ae20b235186af8e75f3c368900;p=thirdparty%2Fsqlite.git The ALTER TABLE command should not attempt to rename objects that are 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 --- diff --git a/manifest b/manifest index 947387a055..776eebe5bd 100644 --- 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 diff --git a/manifest.uuid b/manifest.uuid index 20000ff15e..6b6897bdd9 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -e82f235e7201a420149847cda630ac6f2fce5e3a4577b0ea4793f430d3dc1611 \ No newline at end of file +04bd5cb73287f926f1ecf578998fa6ce1379474e86918c692eae5778d0817cef \ No newline at end of file diff --git a/src/expr.c b/src/expr.c index 2d41fc447f..057cbd6b7b 100644 --- a/src/expr.c +++ b/src/expr.c @@ -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); diff --git a/test/altertab2.test b/test/altertab2.test index 9b9070a7db..f14dc13ff1 100644 --- a/test/altertab2.test +++ b/test/altertab2.test @@ -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