aboutsummaryrefslogtreecommitdiff
path: root/src/expr.c
diff options
context:
space:
mode:
authordrh <>2022-07-26 15:32:02 +0000
committerdrh <>2022-07-26 15:32:02 +0000
commit4b1b65ca2e561c11adc9466849faea58be7221aa (patch)
treeaff5f557f8cccda353e861fe3ab72a3b185ab691 /src/expr.c
parentf4c291275b6cb345afad5feb4f8ecb88ab356e4c (diff)
downloadsqlite-4b1b65ca2e561c11adc9466849faea58be7221aa.tar.gz
sqlite-4b1b65ca2e561c11adc9466849faea58be7221aa.zip
Make sure IF_NULL_ROW expressions receive a separate slot in the sorter used
to implement GROUP BY. FossilOrigin-Name: 2bda4fca06ab6be5ad02377a7d1fd9fb9586e3181f1052e4b4937958bdd45efe
Diffstat (limited to 'src/expr.c')
-rw-r--r--src/expr.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/src/expr.c b/src/expr.c
index 5f2068d26..be3e73294 100644
--- a/src/expr.c
+++ b/src/expr.c
@@ -4088,7 +4088,7 @@ expr_code_doover:
pCol->iSorterColumn, target);
if( pCol->iColumn<0 ){
VdbeComment((v,"%s.rowid",pTab->zName));
- }else if( pTab!=0 ){
+ }else if( ALWAYS(pTab!=0) ){
VdbeComment((v,"%s.%s",
pTab->zName, pTab->aCol[pCol->iColumn].zCnName));
if( pTab->aCol[pCol->iColumn].affinity==SQLITE_AFF_REAL ){
@@ -6227,8 +6227,10 @@ static int analyzeAggregate(Walker *pWalker, Expr *pExpr){
int k;
pCol = pAggInfo->aCol;
for(k=0; k<pAggInfo->nColumn; k++, pCol++){
- if( pCol->iTable==pExpr->iTable &&
- pCol->iColumn==pExpr->iColumn ){
+ if( pCol->iTable==pExpr->iTable
+ && pCol->iColumn==pExpr->iColumn
+ && pExpr->op!=TK_IF_NULL_ROW
+ ){
break;
}
}
@@ -6243,15 +6245,17 @@ static int analyzeAggregate(Walker *pWalker, Expr *pExpr){
pCol->iMem = ++pParse->nMem;
pCol->iSorterColumn = -1;
pCol->pCExpr = pExpr;
- if( pAggInfo->pGroupBy ){
+ if( pAggInfo->pGroupBy && pExpr->op!=TK_IF_NULL_ROW ){
int j, n;
ExprList *pGB = pAggInfo->pGroupBy;
struct ExprList_item *pTerm = pGB->a;
n = pGB->nExpr;
for(j=0; j<n; j++, pTerm++){
Expr *pE = pTerm->pExpr;
- if( pE->op==TK_COLUMN && pE->iTable==pExpr->iTable &&
- pE->iColumn==pExpr->iColumn ){
+ if( pE->op==TK_COLUMN
+ && pE->iTable==pExpr->iTable
+ && pE->iColumn==pExpr->iColumn
+ ){
pCol->iSorterColumn = j;
break;
}