mirror of
https://github.com/aljazceru/turso.git
synced 2026-02-15 04:54:20 +01:00
core: Change always falseness of equivalence between variables expressions to be only on anonymous variables
Named variables are compared by name
This commit is contained in:
21
core/util.rs
21
core/util.rs
@@ -401,7 +401,9 @@ pub fn exprs_are_equivalent(expr1: &Expr, expr2: &Expr) -> bool {
|
||||
}
|
||||
// Variables that are not bound to a specific value, are treated as NULL
|
||||
// https://sqlite.org/lang_expr.html#varparam
|
||||
(Expr::Variable(..), Expr::Variable(..)) => false,
|
||||
(Expr::Variable(var), Expr::Variable(var2)) if var == "" && var2 == "" => false,
|
||||
// Named variables can be compared by their name
|
||||
(Expr::Variable(val), Expr::Variable(val2)) => val == val2,
|
||||
(Expr::Parenthesized(exprs1), Expr::Parenthesized(exprs2)) => {
|
||||
exprs1.len() == exprs2.len()
|
||||
&& exprs1
|
||||
@@ -948,9 +950,20 @@ pub mod tests {
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_variable_comparison() {
|
||||
let expr1 = Expr::Variable("?".to_string());
|
||||
let expr2 = Expr::Variable("?".to_string());
|
||||
fn test_anonymous_variable_comparison() {
|
||||
let expr1 = Expr::Variable("".to_string());
|
||||
let expr2 = Expr::Variable("".to_string());
|
||||
assert!(!exprs_are_equivalent(&expr1, &expr2));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_named_variable_comparison() {
|
||||
let expr1 = Expr::Variable("1".to_string());
|
||||
let expr2 = Expr::Variable("1".to_string());
|
||||
assert!(exprs_are_equivalent(&expr1, &expr2));
|
||||
|
||||
let expr1 = Expr::Variable("1".to_string());
|
||||
let expr2 = Expr::Variable("2".to_string());
|
||||
assert!(!exprs_are_equivalent(&expr1, &expr2));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user