From: drh <> Date: Fri, 24 Mar 2023 20:35:56 +0000 (+0000) Subject: Fix the handling of indexed expressions in an outer query that appear as X-Git-Tag: version-3.42.0~224 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b3ad5444d0a123ea0af7da9e158d2d0f49c9cd00;p=thirdparty%2Fsqlite.git Fix the handling of indexed expressions in an outer query that appear as corelated values inside an aggregate function within a subquery. [forum:/forumpost/79cf371080|Forum post 79cf371080]. FossilOrigin-Name: d8259877eaa962e6f90675790d3770ef02bd1a5d86d319cd8c1834710df844c4 --- diff --git a/manifest b/manifest index 5bfae257eb..810a58357a 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sa\sproblem\sin\scursor-hints\sfor\sWITHOUT\sROWID\stables\sused\sin\sa\sRIGHT\sJOIN.\n[forum:/forumpost/591006b1cc|Forum\spost\s591006b1cc]. -D 2023-03-24T19:17:25.884 +C Fix\sthe\shandling\sof\sindexed\sexpressions\sin\san\souter\squery\sthat\sappear\sas\ncorelated\svalues\sinside\san\saggregate\sfunction\swithin\sa\ssubquery.\n[forum:/forumpost/79cf371080|Forum\spost\s79cf371080]. +D 2023-03-24T20:35:56.400 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -625,7 +625,7 @@ F src/printf.c 7eac1a9896a80697e03e08963e210830532ae2ff610e16c193e95af007ca5623 F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c F src/resolve.c 3e53e02ce87c9582bd7e7d22f13f4094a271678d9dc72820fa257a2abb5e4032 F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92 -F src/select.c 64a4b48a14f5d19a5ddc4afde37a435aebb92113f52653f8fe9e69fc3e9ff9aa +F src/select.c 83812448cf5a645f37d79c43fa92d38d7a9f7790d95f7ac09ac02b4064810bd2 F src/shell.c.in e92846a40dae4acd20ae6073846d8a54ba7fc84c8299af3b8d63be19491c5ad9 F src/sqlite.h.in f01033703156615566bb329144d736a37fc35a278049db91127782a9c799b938 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 @@ -1195,7 +1195,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 2c7abe3c48f8aaa5a448615ab4d13df3662185d28419c00999670834a3f0b484 +F test/indexexpr2.test 8a4cf83e12b041334c5ef36b9a3932451808378352c24d65049b31f3737a82b9 F test/indexfault.test 98d78a8ff1f5335628b62f886a1cb7c7dac1ef6d48fa39c51ec871c87dce9811 F test/init.test 15c823093fdabbf7b531fe22cf037134d09587a7 F test/insert.test 4e3f0de67aac3c5be1f4aaedbcea11638f1b5cdc9a3115be14d19aa9db7623c6 @@ -2051,8 +2051,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 98d30400e4721b1d48ff601698ced146052654f8c6de7c014d4d239bb2dbef43 -R 6146bc2919cc9016e0146c0a3f2b25ac +P 221fdcec964f8317b2c23e926cc23799615cd3b4239a8a9ff87a83588d05bc64 +R 5ccb0dc2f189cd11515b977033218bf1 U drh -Z 04567d784fa8abfc6c05842f7b980df9 +Z b958c4a96a3327f8806b22897ddc9447 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index bed544cb06..7da91c4c53 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -221fdcec964f8317b2c23e926cc23799615cd3b4239a8a9ff87a83588d05bc64 \ No newline at end of file +d8259877eaa962e6f90675790d3770ef02bd1a5d86d319cd8c1834710df844c4 \ No newline at end of file diff --git a/src/select.c b/src/select.c index ddaa8c06b5..a22aed8524 100644 --- a/src/select.c +++ b/src/select.c @@ -6485,7 +6485,8 @@ static int aggregateIdxEprRefToColCallback(Walker *pWalker, Expr *pExpr){ if( pExpr->op==TK_AGG_FUNCTION ) return WRC_Continue; if( pExpr->op==TK_IF_NULL_ROW ) return WRC_Continue; pAggInfo = pExpr->pAggInfo; - assert( pExpr->iAgg>=0 && pExpr->iAggnColumn ); + if( pExpr->iAgg>=pAggInfo->nColumn ) return WRC_Continue; + assert( pExpr->iAgg>=0 ); pCol = &pAggInfo->aCol[pExpr->iAgg]; pExpr->op = TK_AGG_COLUMN; pExpr->iTable = pCol->iTable; diff --git a/test/indexexpr2.test b/test/indexexpr2.test index 8c1171e038..3cc030f86b 100644 --- a/test/indexexpr2.test +++ b/test/indexexpr2.test @@ -372,4 +372,18 @@ foreach {tn expr} { " {1 1} } +# 2023-03-24 https://sqlite.org/forum/forumpost/79cf371080 +# +reset_db +do_execsql_test 9.0 { + CREATE TABLE t1(a INT, b INT); + CREATE INDEX t1x ON t1(a, abs(b)); + CREATE TABLE t2(c INT, d INT); + INSERT INTO t1(a,b) VALUES(4,4),(5,-5),(5,20),(6,6); + INSERT INTO t2(c,d) VALUES(100,1),(200,1),(300,2); + SELECT *, + (SELECT max(c+abs(b)) FROM t2 GROUP BY d ORDER BY d LIMIT 1) AS subq + FROM t1 WHERE a=5; +} {5 -5 205 5 20 220} + finish_test