Make LIKE expressions case-insensitive

This commit is contained in:
rjhallsted
2024-09-16 14:43:39 -07:00
parent 19d2d92115
commit 4aaa0b0989
3 changed files with 15 additions and 1 deletions

1
Cargo.lock generated
View File

@@ -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",
]

View File

@@ -1968,7 +1968,7 @@ fn exec_char(values: Vec<OwnedValue>) -> 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(&regex_pattern).unwrap()

View File

@@ -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