diff options
author | dan <Dan Kennedy> | 2023-03-03 16:25:18 +0000 |
---|---|---|
committer | dan <Dan Kennedy> | 2023-03-03 16:25:18 +0000 |
commit | 04337898635b3048691b795f2f1922b3fda2ddc9 (patch) | |
tree | 7062a8beff465bcb49f9ea82e9aae1d8ecd28382 /src/resolve.c | |
parent | dc81902445ae7f2446fc9f3575cb2c2b78b18341 (diff) | |
download | sqlite-04337898635b3048691b795f2f1922b3fda2ddc9.tar.gz sqlite-04337898635b3048691b795f2f1922b3fda2ddc9.zip |
When it is known when preparing a statement that X cannot be NULL, transform the expression (X IS NULL) to integer value 1 instead of 'true'. This is because under some circumstances, "Y IS TRUE" may not be equivalent to "Y IS 1".
FossilOrigin-Name: cc4bb05b3653e9502b95ea6fe0bfb77feebc11285b66e1dde4c7b945928efbf1
Diffstat (limited to 'src/resolve.c')
-rw-r--r-- | src/resolve.c | 12 |
1 files changed, 4 insertions, 8 deletions
diff --git a/src/resolve.c b/src/resolve.c index 9677f9de9..dfb343439 100644 --- a/src/resolve.c +++ b/src/resolve.c @@ -947,14 +947,10 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){ if( 0==sqlite3ExprCanBeNull(pExpr->pLeft) && !IN_RENAME_OBJECT ){ testcase( ExprHasProperty(pExpr, EP_OuterON) ); assert( !ExprHasProperty(pExpr, EP_IntValue) ); - if( pExpr->op==TK_NOTNULL ){ - pExpr->u.zToken = "true"; - ExprSetProperty(pExpr, EP_IsTrue); - }else{ - pExpr->u.zToken = "false"; - ExprSetProperty(pExpr, EP_IsFalse); - } - pExpr->op = TK_TRUEFALSE; + pExpr->u.iValue = (pExpr->op==TK_NOTNULL); + pExpr->flags |= EP_IntValue; + pExpr->op = TK_INTEGER; + for(i=0, p=pNC; p && i<ArraySize(anRef); p=p->pNext, i++){ p->nRef = anRef[i]; } |