use super::test_schema;
use crate::engine::simplify::Simplify;
use toasty_core::stmt::{self, Expr, ExprExists, Query, Values, VisitMut as _};
fn empty_query() -> Box<Query> {
Box::new(Query::values(Values::default()))
}
fn non_empty_query() -> Box<Query> {
let mut values = Values::default();
values.rows.push(stmt::Expr::Value(stmt::Value::from(1i64)));
Box::new(Query::values(values))
}
#[test]
fn exists_empty_query_becomes_false() {
let schema = test_schema();
let simplify = Simplify::new(&schema);
let expr = ExprExists {
subquery: empty_query(),
};
let result = simplify.simplify_expr_exists(&expr);
assert!(result.is_some());
assert!(result.unwrap().is_false());
}
#[test]
fn exists_non_empty_query_not_simplified() {
let schema = test_schema();
let simplify = Simplify::new(&schema);
let expr = ExprExists {
subquery: non_empty_query(),
};
let result = simplify.simplify_expr_exists(&expr);
assert!(result.is_none());
}
#[test]
fn not_exists_empty_query_becomes_true() {
let schema = test_schema();
let mut simplify = Simplify::new(&schema);
let mut expr = Expr::not(Expr::Exists(ExprExists {
subquery: empty_query(),
}));
simplify.visit_expr_mut(&mut expr);
assert!(expr.is_true());
}
#[test]
fn not_exists_non_empty_query_not_simplified() {
let schema = test_schema();
let mut simplify = Simplify::new(&schema);
let mut expr = Expr::not(Expr::Exists(ExprExists {
subquery: non_empty_query(),
}));
simplify.visit_expr_mut(&mut expr);
assert!(matches!(expr, Expr::Not(_)));
}