diff options
author | drh <> | 2022-07-26 15:32:02 +0000 |
---|---|---|
committer | drh <> | 2022-07-26 15:32:02 +0000 |
commit | 4b1b65ca2e561c11adc9466849faea58be7221aa (patch) | |
tree | aff5f557f8cccda353e861fe3ab72a3b185ab691 /src/expr.c | |
parent | f4c291275b6cb345afad5feb4f8ecb88ab356e4c (diff) | |
download | sqlite-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.c | 16 |
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; } |