From 3b777143f9daa224349ff1dffd59aeedd94e99c9 Mon Sep 17 00:00:00 2001 From: Anthony Lukach Date: Thu, 13 Nov 2025 14:46:28 -0800 Subject: [PATCH 1/2] Add failing test --- src/expr.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/expr.rs b/src/expr.rs index a9e06f85..cb881b08 100644 --- a/src/expr.rs +++ b/src/expr.rs @@ -257,6 +257,11 @@ impl Expr { /// let toexpr: Expr = Expr::from_str("20").unwrap(); /// assert_eq!(reduced, toexpr); /// + /// let fromexpr: Expr = Expr::from_str("cityName IN ('Toronto','Frankfurt','Tokyo','New York')").unwrap(); + /// let reduced = fromexpr.reduce(None).unwrap(); + /// let toexpr: Expr = Expr::from_str("cityName IN ('Toronto','Frankfurt','Tokyo','New York')").unwrap(); + /// assert_eq!(reduced, toexpr); + /// /// let fromexpr: Expr = Expr::from_str("(bork=1) and (bork=1) and (bork=1 and true)").unwrap(); /// let reduced = fromexpr.reduce(Some(&item)).unwrap(); /// let toexpr: Expr = Expr::from_str("bork=1").unwrap(); From b8345a85e86923c1bcc30a5a8c31af866b063069 Mon Sep 17 00:00:00 2001 From: Anthony Lukach Date: Thu, 13 Nov 2025 14:46:59 -0800 Subject: [PATCH 2/2] Only reduce IN predicate if value is provided --- src/expr.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/expr.rs b/src/expr.rs index cb881b08..b77e2fce 100644 --- a/src/expr.rs +++ b/src/expr.rs @@ -451,6 +451,9 @@ impl Expr { Ok(Expr::Operation { op, args }) } } else if op == "in" { + let Some(_) = j else { + return Ok(Expr::Operation { op, args }); + }; let l: String = left.to_text()?; let r: HashSet = right.try_into()?; let isin: bool = r.contains(&l);