diff options
author | drh <> | 2022-10-13 12:47:33 +0000 |
---|---|---|
committer | drh <> | 2022-10-13 12:47:33 +0000 |
commit | e995d2c226e2b65c5e40cd238415bdfeb0936e8c (patch) | |
tree | 9b2219f327bd1fb7af389ed14bdcd52f32e2e45d /src/expr.c | |
parent | 1ffb6be1195c592e6c85d57603984b1f36bfde62 (diff) | |
download | sqlite-e995d2c226e2b65c5e40cd238415bdfeb0936e8c.tar.gz sqlite-e995d2c226e2b65c5e40cd238415bdfeb0936e8c.zip |
Proposed optimization to the IS NULL and NOT NULL operators that avoids
loading the entire content of larges strings and BLOBs. Response to
[forum:/info/3c08d4715dc05b00|forum post 3c08d4715dc05b00].
FossilOrigin-Name: 45f171565442f9fd6574fb93ae7abe83c168b20be68af42531bc55571450d3ab
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); |