aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordrh <>2025-07-02 02:03:43 +0000
committerdrh <>2025-07-02 02:03:43 +0000
commitcaf047365280f9e92e2bca250d79aeb20e78fb7e (patch)
tree8b64a06a8457f28ab80156d1f0aec0059d474643
parent2427ce16d9a340ff9790f62db1371f5ef83f8afe (diff)
downloadsqlite-caf047365280f9e92e2bca250d79aeb20e78fb7e.tar.gz
sqlite-caf047365280f9e92e2bca250d79aeb20e78fb7e.zip
Ensure that Expr.op2 values for TK_AGG_FUNCTION nodes are adjusted when
query flattening. FossilOrigin-Name: d27d34fb746280e7e81335db4e195914b15403ef0da7b2955550553dd78fbe9a
-rw-r--r--manifest12
-rw-r--r--manifest.uuid2
-rw-r--r--src/select.c7
3 files changed, 14 insertions, 7 deletions
diff --git a/manifest b/manifest
index d9ed7e38a..14cbb1d47 100644
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Improved\scomments\son\sbytecode\sused\sto\simplement\saggregate\squeries,\sto\said\nin\sdebugging.
-D 2025-07-01T23:17:36.521
+C Ensure\sthat\sExpr.op2\svalues\sfor\sTK_AGG_FUNCTION\snodes\sare\sadjusted\swhen\nquery\sflattening.
+D 2025-07-02T02:03:43.743
F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
@@ -785,7 +785,7 @@ F src/printf.c 71b6d3a0093bf23f473e25480ca0024e8962681506c75f4ffd3d343a3f0ab113
F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c
F src/resolve.c d40fe18d7c2fd0339f5846ffcf7d6809866e380acdf14c76fb2af87e9fe13f64
F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97
-F src/select.c a59865dac1ab591f253ae29f12bed7de848692064f2bd752f97271332fa13430
+F src/select.c 0258c6c36372e64e3ecc5f9ed4ebb598c0688e112e28f9c9c0f9b61dc6500609
F src/shell.c.in 4f14a1f5196b6006abc8e73cc8fd6c1a62cf940396f8ba909d6711f35f074bb6
F src/sqlite.h.in 5c54f2461a1ea529bab8499148a2b238e2d4bb571d59e8ea5322d0c190abb693
F src/sqlite3.rc 015537e6ac1eec6c7050e17b616c2ffe6f70fca241835a84a4f0d5937383c479
@@ -2208,8 +2208,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh 1ad0169b022b280bcaaf94a7fa231591be96b514230ab5c98fbf15cd7df842dd
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 113f9d10e347eeaa893ff8b47a461009e0b12589374b93cf3e0bddd19c702dea
-R 84ef00e957455655fffca42a9ae3db46
+P a1a8b85cdba64a17dcdcd4e6b42b872957cec2dc05b0ac34dfcd82f59344034b
+R ebff75d00bdb4eab7ae7336179a6a5fb
U drh
-Z e67f7b514a444aef3e345291ef72798f
+Z b88c62926e04b0e9a5b2b8bb036a8c63
# Remove this line to create a well-formed Fossil manifest.
diff --git a/manifest.uuid b/manifest.uuid
index 1b87282d8..f417453c5 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-a1a8b85cdba64a17dcdcd4e6b42b872957cec2dc05b0ac34dfcd82f59344034b
+d27d34fb746280e7e81335db4e195914b15403ef0da7b2955550553dd78fbe9a
diff --git a/src/select.c b/src/select.c
index 2723d069b..95b2925e3 100644
--- a/src/select.c
+++ b/src/select.c
@@ -3872,6 +3872,7 @@ typedef struct SubstContext {
int iTable; /* Replace references to this table */
int iNewTable; /* New table number */
int isOuterJoin; /* Add TK_IF_NULL_ROW opcodes on each replacement */
+ int nSelDepth; /* Depth of sub-query recursion. Top==1 */
ExprList *pEList; /* Replacement expressions */
ExprList *pCList; /* Collation sequences for replacement expr */
} SubstContext;
@@ -3979,6 +3980,9 @@ static Expr *substExpr(
if( pExpr->op==TK_IF_NULL_ROW && pExpr->iTable==pSubst->iTable ){
pExpr->iTable = pSubst->iNewTable;
}
+ if( pExpr->op==TK_AGG_FUNCTION && pExpr->op2>=pSubst->nSelDepth ){
+ pExpr->op2--;
+ }
pExpr->pLeft = substExpr(pSubst, pExpr->pLeft);
pExpr->pRight = substExpr(pSubst, pExpr->pRight);
if( ExprUseXSelect(pExpr) ){
@@ -4016,6 +4020,7 @@ static void substSelect(
SrcItem *pItem;
int i;
if( !p ) return;
+ pSubst->nSelDepth++;
do{
substExprList(pSubst, p->pEList);
substExprList(pSubst, p->pGroupBy);
@@ -4033,6 +4038,7 @@ static void substSelect(
}
}
}while( doPrior && (p = p->pPrior)!=0 );
+ pSubst->nSelDepth--;
}
#endif /* !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) */
@@ -4774,6 +4780,7 @@ static int flattenSubquery(
x.iTable = iParent;
x.iNewTable = iNewParent;
x.isOuterJoin = isOuterJoin;
+ x.nSelDepth = 0;
x.pEList = pSub->pEList;
x.pCList = findLeftmostExprlist(pSub);
substSelect(&x, pParent, 0);