aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordan <dan@noemail.net>2020-04-25 15:01:53 +0000
committerdan <dan@noemail.net>2020-04-25 15:01:53 +0000
commit07f9e8f4f3a473e4efac5f421b59b945a79e22a5 (patch)
treee91699a09b17e7fb4f878bb3f06c73e66859ab1a /src
parentab2172e69f5dfb5017a6a7b230862c0a54f41e7d (diff)
downloadsqlite-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.c6
-rw-r--r--src/select.c1
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) );