mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-01 06:27:03 +03:00
When translating arguments of aggregate functions into references to
expression indexes, make sure to only translate them for the current aggregate when there are nested aggregates. [forum/forumpost/409ebc7368|Forum post 409ebc7368]. FossilOrigin-Name: 898bfa1afd8260eaaf2aa6db94e74d99ebf4e8a6dc02cf21d20cd981393609a5
This commit is contained in:
16
manifest
16
manifest
@ -1,5 +1,5 @@
|
||||
C Improved\sdiagnostic\soutput\sfrom\sPRAGMA\svdbe_addoptrace.
|
||||
D 2023-04-03T20:11:06.914
|
||||
C When\stranslating\sarguments\sof\saggregate\sfunctions\sinto\sreferences\sto\nexpression\sindexes,\smake\ssure\sto\sonly\stranslate\sthem\sfor\sthe\scurrent\naggregate\swhen\sthere\sare\snested\saggregates.\n[forum/forumpost/409ebc7368|Forum\spost\s409ebc7368].
|
||||
D 2023-04-03T23:49:00.977
|
||||
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
||||
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
||||
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
|
||||
@ -575,7 +575,7 @@ F src/date.c f21815ca7172ce073db3163ac54c8d9f2841077165c1a6123b4d1c376a0c7ec7
|
||||
F src/dbpage.c f3eea5f7ec47e09ee7da40f42b25092ecbe961fc59566b8e5f705f34335b2387
|
||||
F src/dbstat.c ec92074baa61d883de58c945162d9e666c13cd7cf3a23bc38b4d1c4d0b2c2bef
|
||||
F src/delete.c a9c6d3f51c0a31e9b831e0a0580a98d702904b42d216fee530940e40dec34873
|
||||
F src/expr.c 5f2b5f25a90aa4ff1c84d175b1adf790be8f8719f3b38851e2b5b293e0e5e916
|
||||
F src/expr.c 9586f2dafe724b756d56657945b0d9c5177e10053d5cd83dbdd50f3f6d32c407
|
||||
F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007
|
||||
F src/fkey.c 722f20779f5342a787922deded3628d8c74b5249cab04098cf17ee2f2aaff002
|
||||
F src/func.c d187be57a886ddf4e6b7ef584a494361899be3df5eee6d4a747b68ff4aff4122
|
||||
@ -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 2584199f36de79d0845e1d1dedc5418b33299fa89d2b7e15df30393bcf2f3704
|
||||
F src/select.c df007d60326a9aad94f5a4915d01e7de19d77627ed09338747a2e8e741a75add
|
||||
F src/shell.c.in 55a17c94e3e240f4d5f01eecff1f6f9bea7f8fd257e95d5ce014eef7b556a6e1
|
||||
F src/sqlite.h.in 84f0e61a07292977c31f108776e5148eb1c761e7c276de2290c1511dad7c7d3a
|
||||
F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
|
||||
@ -1196,7 +1196,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 f5732485abfe8edb5006a4e599914afd8ff7ff7b88d9b88e1731cb063495ba36
|
||||
F test/indexexpr2.test 1c382e81ef996d8ae8b834a74f2a9013dddf59214c32201d7c8a656d739f999a
|
||||
F test/indexfault.test 98d78a8ff1f5335628b62f886a1cb7c7dac1ef6d48fa39c51ec871c87dce9811
|
||||
F test/init.test 15c823093fdabbf7b531fe22cf037134d09587a7
|
||||
F test/insert.test 4e3f0de67aac3c5be1f4aaedbcea11638f1b5cdc9a3115be14d19aa9db7623c6
|
||||
@ -2052,8 +2052,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 cf6454ce26983b9c3ae924c44a802f3f760eaaae9547b40aee9e14e7b0c47cab
|
||||
R a5a9cc895be767d265a98905577427bc
|
||||
P 050958c1828f7446e7ee7e458123a23b735e213b76a67c3dd8356da256cbc170
|
||||
R 8f74c88e7968e6ca235635bc40f218cf
|
||||
U drh
|
||||
Z 52b59f8ff34baff0c46f83506d1e601b
|
||||
Z 23f5beb74f4ed7eb72f5bf65796cf745
|
||||
# Remove this line to create a well-formed Fossil manifest.
|
||||
|
@ -1 +1 @@
|
||||
050958c1828f7446e7ee7e458123a23b735e213b76a67c3dd8356da256cbc170
|
||||
898bfa1afd8260eaaf2aa6db94e74d99ebf4e8a6dc02cf21d20cd981393609a5
|
@ -6288,7 +6288,7 @@ static int agginfoPersistExprCb(Walker *pWalker, Expr *pExpr){
|
||||
sqlite3 *db = pParse->db;
|
||||
assert( iAgg>=0 );
|
||||
if( pExpr->op!=TK_AGG_FUNCTION ){
|
||||
if( iAgg<pAggInfo->nColumn
|
||||
if( ALWAYS(iAgg<pAggInfo->nColumn)
|
||||
&& pAggInfo->aCol[iAgg].pCExpr==pExpr
|
||||
){
|
||||
pExpr = sqlite3ExprDup(db, pExpr, 0);
|
||||
@ -6441,6 +6441,7 @@ static int analyzeAggregate(Walker *pWalker, Expr *pExpr){
|
||||
default: {
|
||||
IndexedExpr *pIEpr;
|
||||
Expr tmp;
|
||||
int i;
|
||||
assert( pParse->iSelfTab==0 );
|
||||
if( (pNC->ncFlags & NC_InAggFunc)==0 ) break;
|
||||
if( pParse->pIdxEpr==0 ) break;
|
||||
@ -6451,7 +6452,11 @@ static int analyzeAggregate(Walker *pWalker, Expr *pExpr){
|
||||
}
|
||||
if( pIEpr==0 ) break;
|
||||
if( NEVER(!ExprUseYTab(pExpr)) ) break;
|
||||
if( pExpr->pAggInfo!=0 ) break; /* Already resolved by outer context */
|
||||
for(i=0; i<pSrcList->nSrc; i++){
|
||||
if( pSrcList->a[0].iCursor==pIEpr->iDataCur ) break;
|
||||
}
|
||||
if( i>=pSrcList->nSrc ) break;
|
||||
if( NEVER(pExpr->pAggInfo!=0) ) break; /* Resolved by outer context */
|
||||
if( pParse->nErr ){ return WRC_Abort; }
|
||||
|
||||
/* If we reach this point, it means that expression pExpr can be
|
||||
|
@ -6485,7 +6485,7 @@ 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;
|
||||
if( pExpr->iAgg>=pAggInfo->nColumn ) return WRC_Continue;
|
||||
if( NEVER(pExpr->iAgg>=pAggInfo->nColumn) ) return WRC_Continue;
|
||||
assert( pExpr->iAgg>=0 );
|
||||
pCol = &pAggInfo->aCol[pExpr->iAgg];
|
||||
pExpr->op = TK_AGG_COLUMN;
|
||||
|
@ -410,4 +410,19 @@ do_execsql_test 10.1 {
|
||||
GROUP BY SUBSTR(0,0);
|
||||
} 4
|
||||
|
||||
# 2023-04-03 https://sqlite.org/forum/forumpost/409ebc7368
|
||||
# When a generated column appears in both an outer and an inner loop
|
||||
# (that is to say, the same table is used in both loops) and the
|
||||
# generated column is indexed and it is used inside an aggregate function,
|
||||
# make sure that the terms resolve to the correct aggregate.
|
||||
#
|
||||
do_execsql_test 11.0 {
|
||||
CREATE TABLE t3 (a INT, b AS (-a));
|
||||
CREATE INDEX t3x ON t3(b, a);
|
||||
INSERT INTO t3(a) VALUES(44);
|
||||
SELECT * FROM t3 AS a0
|
||||
WHERE (SELECT sum(-a0.a=b) FROM t3 GROUP BY b)
|
||||
GROUP BY b;
|
||||
} {44 -44}
|
||||
|
||||
finish_test
|
||||
|
Reference in New Issue
Block a user