From: drh <> Date: Mon, 3 Apr 2023 18:00:53 +0000 (+0000) Subject: When changing a COLLATE expression node into TK_AGG_COLUMN because the nodes X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9c3e28450e90ec47f6d474e2392e0b0ec2d59566;p=thirdparty%2Fsqlite.git When changing a COLLATE expression node into TK_AGG_COLUMN because the nodes value is contained in an indexed expression, be sure to clear the EP_Collate property from the expression node. FossilOrigin-Name: af0f55cfcba0f53ee5641f20c5ef171f23f5eaea32d28e3a70899a2e2bf60dd6 --- diff --git a/manifest b/manifest index 7acb30c007..d2a62b0545 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Stronger\sconstraint\schecking\sin\sallocateSpace(). -D 2023-04-03T12:45:16.371 +C When\schanging\sa\sCOLLATE\sexpression\snode\sinto\sTK_AGG_COLUMN\sbecause\sthe\snodes\nvalue\sis\scontained\sin\san\sindexed\sexpression,\sbe\ssure\sto\sclear\sthe\nEP_Collate\sproperty\sfrom\sthe\sexpression\snode. +D 2023-04-03T18:00:53.041 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -621,7 +621,7 @@ F src/printf.c ff4b05e38bf928ff1b80d3dda4f977b10fe39ecbfe69c018224c7e5594fb2455 F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c F src/resolve.c 6a0253379cc15b3f80321362a61f487a8ef7cd2487fe62e1eb2317b3f871c61f F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92 -F src/select.c 47431281399c670f5098b9d512d290f2f74ef4bf13025a28796f069c846ed5bf +F src/select.c 6eef5a940ed368fe20d50980e377aba74a27e53cfabf440f299682f22b860002 F src/shell.c.in a608a209c3f61f9debce155b5c7d56c9a785d52eb62b6831be449e2a5b976221 F src/sqlite.h.in 662a2fa083d093896b92560c871dea6d86792b49dc4bf7b4e8dbeca8e7171488 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 @@ -1191,7 +1191,7 @@ F test/index8.test caa097735c91dbc23d8a402f5e63a2a03c83840ba3928733ed7f9a03f8a91 F test/index9.test 2ac891806a4136ef3e91280477e23114e67575207dc331e6797fa0ed9379f997 F test/indexedby.test f21eca4f7a6ffe14c8500a7ad6cd53166666c99e5ccd311842a28bc94a195fe0 F test/indexexpr1.test b2a15637dcbae7fd8d7e2fc51f74ac4feaf5510130ee2089a5ec5bd1ef7270e1 -F test/indexexpr2.test 8a4cf83e12b041334c5ef36b9a3932451808378352c24d65049b31f3737a82b9 +F test/indexexpr2.test f5732485abfe8edb5006a4e599914afd8ff7ff7b88d9b88e1731cb063495ba36 F test/indexfault.test 98d78a8ff1f5335628b62f886a1cb7c7dac1ef6d48fa39c51ec871c87dce9811 F test/init.test 15c823093fdabbf7b531fe22cf037134d09587a7 F test/insert.test 4e3f0de67aac3c5be1f4aaedbcea11638f1b5cdc9a3115be14d19aa9db7623c6 @@ -2046,9 +2046,9 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 728633c0bd665ed94e4969180a83ef102c54371e339bc06ea6cb006eaefdb267 -Q +9e968f4fbce061190f10f31ce9d3eb4fce6706ea6b7e5011bfa1e893d37ca68d -R d2aeecbda2c6a9aac15b61ea9445e050 +P 0f9e65b6c1e7f2f7a0358163c0ec3ce5fe8ed8814202b03ec167cf2f617f82f3 +Q +cf6454ce26983b9c3ae924c44a802f3f760eaaae9547b40aee9e14e7b0c47cab +R 3e0455db1fb6c7b726f4ff0b6b77f029 U drh -Z c84ef3bee4ec9e9769a7432b9a66137d +Z 2da229468cb727a0242f6d218dae6f55 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index f4b1024ac4..5a98e3c846 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -0f9e65b6c1e7f2f7a0358163c0ec3ce5fe8ed8814202b03ec167cf2f617f82f3 \ No newline at end of file +af0f55cfcba0f53ee5641f20c5ef171f23f5eaea32d28e3a70899a2e2bf60dd6 \ No newline at end of file diff --git a/src/select.c b/src/select.c index 88f9cd67bc..883d54ecf1 100644 --- a/src/select.c +++ b/src/select.c @@ -6429,6 +6429,7 @@ static int aggregateIdxEprRefToColCallback(Walker *pWalker, Expr *pExpr){ pExpr->op = TK_AGG_COLUMN; pExpr->iTable = pCol->iTable; pExpr->iColumn = pCol->iColumn; + ExprClearProperty(pExpr, EP_Skip|EP_Collate); return WRC_Prune; } diff --git a/test/indexexpr2.test b/test/indexexpr2.test index 3cc030f86b..a934d0c84d 100644 --- a/test/indexexpr2.test +++ b/test/indexexpr2.test @@ -386,4 +386,28 @@ do_execsql_test 9.0 { FROM t1 WHERE a=5; } {5 -5 205 5 20 220} +# 2023-04-03 https://sqlite.org/forum/forumpost/44270909bb +# and https://sqlite.org/forum/forumpost/e45108732c which are the +# same problem, namely the failure to omit the EP_Collate property +# from an expression node when changing it from TK_COLLATE into +# TK_AGG_COLUMN because it resolves to an indexed expression. +# +reset_db +do_execsql_test 10.0 { + CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT); + CREATE INDEX t1x ON t1 (b, +b COLLATE NOCASE); + INSERT INTO t1(a,b) VALUES(1,'abcde'); + SELECT * FROM t1 AS a0 + WHERE (SELECT count(a0.b=+a0.b COLLATE NOCASE IN (b)) FROM t1 GROUP BY 2.5) + ORDER BY a0.b; +} {1 abcde} +do_execsql_test 10.1 { + CREATE TABLE t2(a TEXT); + INSERT INTO t2 VALUES('alice'),('bob'),('cindy'),('david'); + CREATE INDEX t2x ON t2 (+a COLLATE NOCASE); + SELECT count(+a COLLATE NOCASE IN (SELECT 1)) AS x + FROM t2 + GROUP BY SUBSTR(0,0); +} 4 + finish_test