From 6606bf12d3abfa6ec7f22615a72774e1dfd0eb1d Mon Sep 17 00:00:00 2001 From: TcMits Date: Wed, 17 Sep 2025 14:50:15 +0700 Subject: [PATCH] is_nonnull returns true on 1 / 0 --- core/translate/optimizer/mod.rs | 1 + testing/math.test | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/core/translate/optimizer/mod.rs b/core/translate/optimizer/mod.rs index f2222975c..d4dc8bc86 100644 --- a/core/translate/optimizer/mod.rs +++ b/core/translate/optimizer/mod.rs @@ -645,6 +645,7 @@ impl Optimizable for ast::Expr { Expr::Between { lhs, start, end, .. } => 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::Case { base, diff --git a/testing/math.test b/testing/math.test index bc44a72ef..cd2098e01 100755 --- a/testing/math.test +++ b/testing/math.test @@ -1445,3 +1445,9 @@ do_execsql_test unary-plus-noop-string { do_execsql_test unary-plus-noop-blob { SELECT typeof(+x'00') = 'blob' } { 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; +} {}