From 4aaa0b0989043c95937c7efe96aa1d198f7bec78 Mon Sep 17 00:00:00 2001 From: rjhallsted Date: Mon, 16 Sep 2024 14:43:39 -0700 Subject: [PATCH] Make LIKE expressions case-insensitive --- Cargo.lock | 1 + core/vdbe/mod.rs | 2 +- testing/like.test | 13 +++++++++++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 07e8a94c1..b1964d8fa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1078,6 +1078,7 @@ version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "afc22eff61b133b115c6e8c74e818c628d6d5e7a502afea6f64dee076dd94326" dependencies = [ + "cc", "pkg-config", "vcpkg", ] diff --git a/core/vdbe/mod.rs b/core/vdbe/mod.rs index 09914d5e2..4bf369d6b 100644 --- a/core/vdbe/mod.rs +++ b/core/vdbe/mod.rs @@ -1968,7 +1968,7 @@ fn exec_char(values: Vec) -> OwnedValue { } fn construct_like_regex(pattern: &str) -> Regex { - let mut regex_pattern = String::from("^"); + let mut regex_pattern = String::from("(?i)^"); regex_pattern.push_str(&pattern.replace('%', ".*").replace('_', ".")); regex_pattern.push('$'); Regex::new(®ex_pattern).unwrap() diff --git a/testing/like.test b/testing/like.test index d53342e50..edd6ba5e5 100755 --- a/testing/like.test +++ b/testing/like.test @@ -22,6 +22,19 @@ do_execsql_test where-like { } {4|sweater|25.0 5|sweatshirt|74.0} +do_execsql_test where-like-case-insensitive { + select * from products where name like 'SWEAT%'; +} {4|sweater|25.0 +5|sweatshirt|74.0} + +do_execsql_test where-like-underscore { + select * from products where name like 'sweat_r'; +} {4|sweater|25.0} + +do_execsql_test where-like-underscore-case-insensitive { + select * from products where name like 'SwEaT_R'; +} {4|sweater|25.0} + do_execsql_test where-like-fn { select * from products where like('sweat%', name)=1 } {4|sweater|25.0