Skip to content

Commit efa70af

Browse files
authored
fix: handle bool column (#1384)
Boolean column conditions were failing. Added type handling for that.
1 parent d3bb3ae commit efa70af

File tree

1 file changed

+20
-14
lines changed

1 file changed

+20
-14
lines changed

src/alerts/alerts_utils.rs

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -424,9 +424,10 @@ pub fn get_filter_string(where_clause: &Conditions) -> Result<String, String> {
424424
format!("NOT LIKE '%{escaped_value}' ESCAPE '\\'")
425425
}
426426
_ => {
427-
let value = match NumberOrString::from_string(value.to_owned()) {
428-
NumberOrString::Number(val) => format!("{val}"),
429-
NumberOrString::String(val) => {
427+
let value = match ValueType::from_string(value.to_owned()) {
428+
ValueType::Number(val) => format!("{val}"),
429+
ValueType::Boolean(val) => format!("{val}"),
430+
ValueType::String(val) => {
430431
format!("'{val}'")
431432
}
432433
};
@@ -461,7 +462,7 @@ fn match_alert_operator(expr: &ConditionConfig) -> Expr {
461462
.replace("'", "\\'")
462463
.replace('%', "\\%")
463464
.replace('_', "\\_");
464-
let value = NumberOrString::from_string(string_value.clone());
465+
let value = ValueType::from_string(string_value.clone());
465466

466467
// for maintaining column case
467468
let column = format!(r#""{}""#, expr.column);
@@ -525,34 +526,39 @@ fn match_aggregate_operation(agg: &AggregateConfig) -> Expr {
525526
}
526527
}
527528

528-
enum NumberOrString {
529+
enum ValueType {
529530
Number(f64),
530531
String(String),
532+
Boolean(bool),
531533
}
532534

533-
impl Literal for NumberOrString {
535+
impl Literal for ValueType {
534536
fn lit(&self) -> Expr {
535537
match self {
536-
NumberOrString::Number(expr) => lit(*expr),
537-
NumberOrString::String(expr) => lit(expr.clone()),
538+
ValueType::Number(expr) => lit(*expr),
539+
ValueType::String(expr) => lit(expr.clone()),
540+
ValueType::Boolean(expr) => lit(*expr),
538541
}
539542
}
540543
}
541-
impl NumberOrString {
544+
impl ValueType {
542545
fn from_string(value: String) -> Self {
543546
if let Ok(num) = value.parse::<f64>() {
544-
NumberOrString::Number(num)
547+
ValueType::Number(num)
548+
} else if let Ok(boolean) = value.parse::<bool>() {
549+
ValueType::Boolean(boolean)
545550
} else {
546-
NumberOrString::String(value)
551+
ValueType::String(value)
547552
}
548553
}
549554
}
550555

551-
impl Display for NumberOrString {
556+
impl Display for ValueType {
552557
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
553558
match self {
554-
NumberOrString::Number(v) => write!(f, "{v}"),
555-
NumberOrString::String(v) => write!(f, "{v}"),
559+
ValueType::Number(v) => write!(f, "{v}"),
560+
ValueType::String(v) => write!(f, "{v}"),
561+
ValueType::Boolean(v) => write!(f, "{v}"),
556562
}
557563
}
558564
}

0 commit comments

Comments
 (0)