diff options
author | dan <dan@noemail.net> | 2020-04-25 15:01:53 +0000 |
---|---|---|
committer | dan <dan@noemail.net> | 2020-04-25 15:01:53 +0000 |
commit | 07f9e8f4f3a473e4efac5f421b59b945a79e22a5 (patch) | |
tree | e91699a09b17e7fb4f878bb3f06c73e66859ab1a /src | |
parent | ab2172e69f5dfb5017a6a7b230862c0a54f41e7d (diff) | |
download | sqlite-07f9e8f4f3a473e4efac5f421b59b945a79e22a5.tar.gz sqlite-07f9e8f4f3a473e4efac5f421b59b945a79e22a5.zip |
Ensure affinity is not discarded from a view column if the view appears on the rhs of a LEFT JOIN. Fix for [45f4bf4e].
FossilOrigin-Name: ac31edd3eeafcef46164a4506bbc32c711bb7cd78378aeaa4c9bb12524ac5ea1
Diffstat (limited to 'src')
-rw-r--r-- | src/expr.c | 6 | ||||
-rw-r--r-- | src/select.c | 1 |
2 files changed, 4 insertions, 3 deletions
diff --git a/src/expr.c b/src/expr.c index 7165e4fa1..23e00db2e 100644 --- a/src/expr.c +++ b/src/expr.c @@ -45,7 +45,7 @@ char sqlite3TableColumnAffinity(Table *pTab, int iCol){ char sqlite3ExprAffinity(const Expr *pExpr){ int op; while( ExprHasProperty(pExpr, EP_Skip) ){ - assert( pExpr->op==TK_COLLATE ); + assert( pExpr->op==TK_COLLATE || pExpr->op==TK_IF_NULL_ROW ); pExpr = pExpr->pLeft; assert( pExpr!=0 ); } @@ -112,7 +112,7 @@ Expr *sqlite3ExprAddCollateString(Parse *pParse, Expr *pExpr, const char *zC){ */ Expr *sqlite3ExprSkipCollate(Expr *pExpr){ while( pExpr && ExprHasProperty(pExpr, EP_Skip) ){ - assert( pExpr->op==TK_COLLATE ); + assert( pExpr->op==TK_COLLATE || pExpr->op==TK_IF_NULL_ROW ); pExpr = pExpr->pLeft; } return pExpr; @@ -131,7 +131,7 @@ Expr *sqlite3ExprSkipCollateAndLikely(Expr *pExpr){ assert( pExpr->op==TK_FUNCTION ); pExpr = pExpr->x.pList->a[0].pExpr; }else{ - assert( pExpr->op==TK_COLLATE ); + assert( pExpr->op==TK_COLLATE || pExpr->op==TK_IF_NULL_ROW ); pExpr = pExpr->pLeft; } } diff --git a/src/select.c b/src/select.c index 76b9827e8..4b7ba37f9 100644 --- a/src/select.c +++ b/src/select.c @@ -3498,6 +3498,7 @@ static Expr *substExpr( ifNullRow.op = TK_IF_NULL_ROW; ifNullRow.pLeft = pCopy; ifNullRow.iTable = pSubst->iNewTable; + ifNullRow.flags = EP_Skip; pCopy = &ifNullRow; } testcase( ExprHasProperty(pCopy, EP_Subquery) ); |