is_nonnull returns true on 1 / 0

This commit is contained in:
TcMits
2025-09-17 14:50:15 +07:00
parent 5680fe3903
commit 6606bf12d3
2 changed files with 7 additions and 0 deletions

View File

@@ -645,6 +645,7 @@ impl Optimizable for ast::Expr {
Expr::Between { Expr::Between {
lhs, start, end, .. lhs, start, end, ..
} => lhs.is_nonnull(tables) && start.is_nonnull(tables) && end.is_nonnull(tables), } => lhs.is_nonnull(tables) && start.is_nonnull(tables) && end.is_nonnull(tables),
Expr::Binary(_, ast::Operator::Modulus | ast::Operator::Divide, _) => false, // 1 % 0, 1 / 0
Expr::Binary(expr, _, expr1) => expr.is_nonnull(tables) && expr1.is_nonnull(tables), Expr::Binary(expr, _, expr1) => expr.is_nonnull(tables) && expr1.is_nonnull(tables),
Expr::Case { Expr::Case {
base, base,

View File

@@ -1445,3 +1445,9 @@ do_execsql_test unary-plus-noop-string {
do_execsql_test unary-plus-noop-blob { do_execsql_test unary-plus-noop-blob {
SELECT typeof(+x'00') = 'blob' SELECT typeof(+x'00') = 'blob'
} { 1 } } { 1 }
do_execsql_test_on_specific_db {:memory:} is-nonnull-divide-by-zero {
CREATE TABLE t (x PRIMARY KEY, y, z);
INSERT INTO t VALUES (37, -70, -196792117);
SELECT * FROM t WHERE (1 / 0) >= -3289742039 < t.x;
} {}