diff options
author | drh <> | 2022-10-13 15:09:44 +0000 |
---|---|---|
committer | drh <> | 2022-10-13 15:09:44 +0000 |
commit | 921acff92767b6dcda8ed2134c73497fe33905c6 (patch) | |
tree | 5e37d1ad3132633359d309e7eea4785b5c77a591 /src/expr.c | |
parent | 7ca4af6a9f9aa882747e8082c413b8b0c479b533 (diff) | |
parent | eddfa9840eac8a15ac02db65b96d3db85f6c8f4a (diff) | |
download | sqlite-921acff92767b6dcda8ed2134c73497fe33905c6.tar.gz sqlite-921acff92767b6dcda8ed2134c73497fe33905c6.zip |
Optimize the IS NULL and IS NOT NULL operators so that they avoid loading
large strings or blobs off of disk if all it needs to know is whether or
not the string or blob is NULL.
FossilOrigin-Name: cb94350185f555c333b628ee846c47bcc9df5f76bb82de569b8322f30dbbe1bc
Diffstat (limited to 'src/expr.c')
-rw-r--r-- | src/expr.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/src/expr.c b/src/expr.c index baa0fe647..bceb5efb0 100644 --- a/src/expr.c +++ b/src/expr.c @@ -5241,6 +5241,7 @@ void sqlite3ExprIfTrue(Parse *pParse, Expr *pExpr, int dest, int jumpIfNull){ assert( TK_ISNULL==OP_IsNull ); testcase( op==TK_ISNULL ); assert( TK_NOTNULL==OP_NotNull ); testcase( op==TK_NOTNULL ); r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, ®Free1); + sqlite3VdbeTypeofColumn(v, r1); sqlite3VdbeAddOp2(v, op, r1, dest); VdbeCoverageIf(v, op==TK_ISNULL); VdbeCoverageIf(v, op==TK_NOTNULL); @@ -5415,6 +5416,7 @@ void sqlite3ExprIfFalse(Parse *pParse, Expr *pExpr, int dest, int jumpIfNull){ case TK_ISNULL: case TK_NOTNULL: { r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, ®Free1); + sqlite3VdbeTypeofColumn(v, r1); sqlite3VdbeAddOp2(v, op, r1, dest); testcase( op==TK_ISNULL ); VdbeCoverageIf(v, op==TK_ISNULL); testcase( op==TK_NOTNULL ); VdbeCoverageIf(v, op==TK_NOTNULL); |