Fix not equal filter when field contains both number and strings

This commit is contained in:
Dmytro Gordon
2022-06-27 15:55:17 +03:00
parent 83ad1aaf05
commit 3ff03a3f5f
3 changed files with 13 additions and 7 deletions

View File

@ -43,6 +43,9 @@ test_filter!(eq_mix_and_filter, vec![Right("tag=red"), Right("asc_desc_rank=1")]
test_filter!(eq_string_or_filter, vec![Left(vec!["tag=red", "tag=green"])]);
test_filter!(eq_mix_or_filter, vec![Left(vec!["tag=red", "asc_desc_rank=1"])]);
test_filter!(eq_number_or_filter, vec![Left(vec!["asc_desc_rank=3", "asc_desc_rank=1"])]);
test_filter!(neq_simple_string_filter, vec![Right("tag!=red")]);
test_filter!(neq_simple_number_filter, vec![Right("asc_desc_rank!=1")]);
test_filter!(neq_simple_string_in_number_column_filter, vec![Right("asc_desc_rank!=red")]);
test_filter!(geo_radius, vec![Right("_geoRadius(50.630010347667806, 3.086251829166809, 100000)")]);
test_filter!(
not_geo_radius,

View File

@ -168,7 +168,15 @@ pub fn expected_order(
fn execute_filter(filter: &str, document: &TestDocument) -> Option<String> {
let mut id = None;
if let Some((field, filter)) = filter.split_once("=") {
if let Some((field, filter)) = filter.split_once("!=") {
if field == "tag" && document.tag != filter {
id = Some(document.id.clone())
} else if field == "asc_desc_rank"
&& Ok(&document.asc_desc_rank) != filter.parse::<u32>().as_ref()
{
id = Some(document.id.clone())
}
} else if let Some((field, filter)) = filter.split_once("=") {
if field == "tag" && document.tag == filter {
id = Some(document.id.clone())
} else if field == "asc_desc_rank"