mirror of
https://github.com/sqlite/sqlite.git
synced 2025-11-11 01:42:22 +03:00
Fix to check-in [b9190d3da70c4171] - the agg-with-indexed-expr optimization
requested by ticket [99378177930f87bd] - that can cause an incorrect answer if an aggregate subquery has a GROUP BY clause, and that GROUP BY contains a term that is not in the result set, and the outer query makes use of expression indexes. Problem reported by [forum:/forumpost/a68313d054|forum post a68313d054]. FossilOrigin-Name: e06973876993926fd56181281d04b8dd504c689abf883fa21a5721cc1d478ea8
This commit is contained in:
14
manifest
14
manifest
@@ -1,5 +1,5 @@
|
|||||||
C Show\sthe\soutput\svalue\sfrom\sOP_AggFinal\swhen\sdoing\sbyte-code\stracing.
|
C Fix\sto\scheck-in\s[b9190d3da70c4171]\s-\sthe\sagg-with-indexed-expr\soptimization\nrequested\sby\sticket\s[99378177930f87bd]\s-\sthat\scan\scause\san\sincorrect\sanswer\nif\san\saggregate\ssubquery\shas\sa\sGROUP\sBY\sclause,\sand\sthat\sGROUP\sBY\scontains\sa\nterm\sthat\sis\snot\sin\sthe\sresult\sset,\sand\sthe\souter\squery\smakes\suse\sof\sexpression\nindexes.\s\sProblem\sreported\sby\n[forum:/forumpost/a68313d054|forum\spost\sa68313d054].
|
||||||
D 2023-03-04T12:57:07.246
|
D 2023-03-04T15:36:51.218
|
||||||
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
||||||
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
||||||
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
|
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
|
||||||
@@ -623,7 +623,7 @@ F src/printf.c fb31597cf93200eba9167573094ee312b0d51b2c1998613284ceb2c8c212b492
|
|||||||
F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c
|
F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c
|
||||||
F src/resolve.c 4233c3030341bf1a21cea90890e6b3d3531721acc62ede147e899d36ffad8238
|
F src/resolve.c 4233c3030341bf1a21cea90890e6b3d3531721acc62ede147e899d36ffad8238
|
||||||
F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92
|
F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92
|
||||||
F src/select.c f6224c55bc0de16b8559e80015a26f1eced7809a4a0e774efabacca98b3150f6
|
F src/select.c 2f38b8424d204f79180acc6adf84cf3a35a5176e33bc6b009f9a9f080316d4bb
|
||||||
F src/shell.c.in 10088fb7a12d9e9b2453b1df32f80f68c6618f998044f82619d769e6f32f72ca
|
F src/shell.c.in 10088fb7a12d9e9b2453b1df32f80f68c6618f998044f82619d769e6f32f72ca
|
||||||
F src/sqlite.h.in 36882eee65db22e2fdb68782e7fb9b9ea1dd0488d8e2918b3567915ddb3c9611
|
F src/sqlite.h.in 36882eee65db22e2fdb68782e7fb9b9ea1dd0488d8e2918b3567915ddb3c9611
|
||||||
F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
|
F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
|
||||||
@@ -1615,7 +1615,7 @@ F test/tkt-868145d012.test a5f941107ece6a64410ca4755c6329b7eb57a356
|
|||||||
F test/tkt-8c63ff0ec.test 258b7fc8d7e4e1cb5362c7d65c143528b9c4cbed
|
F test/tkt-8c63ff0ec.test 258b7fc8d7e4e1cb5362c7d65c143528b9c4cbed
|
||||||
F test/tkt-91e2e8ba6f.test 08c4f94ae07696b05c9b822da0b4e5337a2f54c5
|
F test/tkt-91e2e8ba6f.test 08c4f94ae07696b05c9b822da0b4e5337a2f54c5
|
||||||
F test/tkt-94c04eaadb.test f738c57c7f68ab8be1c054415af7774617cb6223
|
F test/tkt-94c04eaadb.test f738c57c7f68ab8be1c054415af7774617cb6223
|
||||||
F test/tkt-99378177930f87bd.test 2f07020a82ed1c56bdad60a8a6ef508b2f8a1fb056300b7ec650cbd9975b46bf
|
F test/tkt-99378177930f87bd.test 28530bf9903dcd7743185ce78b1c02b1f9ba09fe4fa77a70ecbd0af83fe3353c
|
||||||
F test/tkt-9a8b09f8e6.test b2ef151d0984b2ebf237760dbeaa50724e5a0667
|
F test/tkt-9a8b09f8e6.test b2ef151d0984b2ebf237760dbeaa50724e5a0667
|
||||||
F test/tkt-9d68c883.test 16f7cb96781ba579bc2e19bb14b4ad609d9774b6
|
F test/tkt-9d68c883.test 16f7cb96781ba579bc2e19bb14b4ad609d9774b6
|
||||||
F test/tkt-9f2eb3abac.test cb6123ac695a08b4454c3792fbe85108f67fabf8
|
F test/tkt-9f2eb3abac.test cb6123ac695a08b4454c3792fbe85108f67fabf8
|
||||||
@@ -2048,8 +2048,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
|
|||||||
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
||||||
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
||||||
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
||||||
P 5a09191186bc03b374e0c0d029e1a15208c6b845bc2f5f5f9f6a8a882809d9f3
|
P 35f10a06ba81b8a526249729828fff06214e9cf95de418a9081f19d8d69fd657
|
||||||
R c0239d2f4805d5cbeacaa15b77d624c8
|
R 7369d7a38af682b682af1a066f3ec500
|
||||||
U drh
|
U drh
|
||||||
Z 586551561f2528489f27ae7250514313
|
Z a08315d4647510add4b36d411a52c34f
|
||||||
# Remove this line to create a well-formed Fossil manifest.
|
# Remove this line to create a well-formed Fossil manifest.
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
35f10a06ba81b8a526249729828fff06214e9cf95de418a9081f19d8d69fd657
|
e06973876993926fd56181281d04b8dd504c689abf883fa21a5721cc1d478ea8
|
||||||
@@ -6439,10 +6439,12 @@ static void optimizeAggregateUseOfIndexedExpr(
|
|||||||
NameContext *pNC /* Name context used to resolve agg-func args */
|
NameContext *pNC /* Name context used to resolve agg-func args */
|
||||||
){
|
){
|
||||||
assert( pAggInfo->iFirstReg==0 );
|
assert( pAggInfo->iFirstReg==0 );
|
||||||
|
assert( pSelect!=0 );
|
||||||
|
assert( pSelect->pGroupBy!=0 );
|
||||||
pAggInfo->nColumn = pAggInfo->nAccumulator;
|
pAggInfo->nColumn = pAggInfo->nAccumulator;
|
||||||
if( ALWAYS(pAggInfo->nSortingColumn>0) ){
|
if( ALWAYS(pAggInfo->nSortingColumn>0) ){
|
||||||
if( pAggInfo->nColumn==0 ){
|
if( pAggInfo->nColumn==0 ){
|
||||||
pAggInfo->nSortingColumn = 0;
|
pAggInfo->nSortingColumn = pSelect->pGroupBy->nExpr;
|
||||||
}else{
|
}else{
|
||||||
pAggInfo->nSortingColumn =
|
pAggInfo->nSortingColumn =
|
||||||
pAggInfo->aCol[pAggInfo->nColumn-1].iSorterColumn+1;
|
pAggInfo->aCol[pAggInfo->nColumn-1].iSorterColumn+1;
|
||||||
|
|||||||
@@ -176,4 +176,19 @@ do_execsql_test tkt-99378-310 {
|
|||||||
);
|
);
|
||||||
} {1 2}
|
} {1 2}
|
||||||
|
|
||||||
|
# 2023-03-04 https://sqlite.org/forum/forumpost/a68313d054
|
||||||
|
#
|
||||||
|
do_execsql_test tkt-99378-400 {
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t0(w);
|
||||||
|
INSERT INTO t0(w) VALUES(1);
|
||||||
|
CREATE TABLE t1(x);
|
||||||
|
INSERT INTO t1(x) VALUES(1);
|
||||||
|
CREATE INDEX t1x ON t1(x > 0);
|
||||||
|
CREATE VIEW t2(y) AS SELECT avg(w) FROM t0 GROUP BY w>1;
|
||||||
|
CREATE VIEW t3(z) AS SELECT count(*) FROM t2 WHERE y BETWEEN 0 and 0;
|
||||||
|
SELECT count(*) FROM t1 NOT INDEXED WHERE (SELECT z FROM t3);
|
||||||
|
SELECT count(*) FROM t1 INDEXED BY t1x WHERE (SELECT z FROM t3);
|
||||||
|
} {0 0}
|
||||||
|
|
||||||
finish_test
|
finish_test
|
||||||
|
|||||||
Reference in New Issue
Block a user