diff options
author | drh <> | 2021-03-29 14:40:48 +0000 |
---|---|---|
committer | drh <> | 2021-03-29 14:40:48 +0000 |
commit | 871e7ff43db2fffa5cee2b4db263a28bda51a2cb (patch) | |
tree | 92a2dd0dc08f68530b57d72e3ca8fe6e60d45c63 /src/expr.c | |
parent | 1f97d2618b6c2f7d5ed7b76b71f1f6ffcf15ff8c (diff) | |
download | sqlite-871e7ff43db2fffa5cee2b4db263a28bda51a2cb.tar.gz sqlite-871e7ff43db2fffa5cee2b4db263a28bda51a2cb.zip |
Add the OP_ZeroOrNull opcode and use it to compute boolean values for
scalar comparisons, rather than the SQLITE_STOREP2 parameter to the comparison
opcode.
FossilOrigin-Name: 93781b6f10a94fb273204b95156a8b90e07071f28c89e7966c659a0f44f60e98
Diffstat (limited to 'src/expr.c')
-rw-r--r-- | src/expr.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/expr.c b/src/expr.c index e3d28f4d4..403ecc8c2 100644 --- a/src/expr.c +++ b/src/expr.c @@ -4054,9 +4054,15 @@ expr_code_doover: }else{ r1 = sqlite3ExprCodeTemp(pParse, pLeft, ®Free1); r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, ®Free2); - codeCompare(pParse, pLeft, pExpr->pRight, op, - r1, r2, inReg, SQLITE_STOREP2 | p5, + sqlite3VdbeAddOp2(v, OP_Integer, 1, inReg); + codeCompare(pParse, pLeft, pExpr->pRight, op, r1, r2, + sqlite3VdbeCurrentAddr(v)+2, p5, ExprHasProperty(pExpr,EP_Commuted)); + if( p5==SQLITE_NULLEQ ){ + sqlite3VdbeAddOp2(v, OP_Integer, 0, inReg); + }else{ + sqlite3VdbeAddOp3(v, OP_ZeroOrNull, r1, inReg, r2); + } assert(TK_LT==OP_Lt); testcase(op==OP_Lt); VdbeCoverageIf(v,op==OP_Lt); assert(TK_LE==OP_Le); testcase(op==OP_Le); VdbeCoverageIf(v,op==OP_Le); assert(TK_GT==OP_Gt); testcase(op==OP_Gt); VdbeCoverageIf(v,op==OP_Gt); |