mod compile;
mod normalize;
mod validate;
use crate::db::{
predicate::Predicate,
query::plan::expr::Expr,
sql::{
lowering::{
SqlLoweringError,
expr::{SqlExprPhase, lower_sql_expr},
},
parser::SqlExpr,
},
};
pub(in crate::db) fn lower_sql_where_expr(expr: &SqlExpr) -> Result<Predicate, SqlLoweringError> {
let expr = lower_sql_where_bool_expr(expr)?;
Ok(compile::compile_where_bool_expr_to_predicate(&expr))
}
pub(in crate::db::sql::lowering) fn lower_sql_where_bool_expr(
expr: &SqlExpr,
) -> Result<Expr, SqlLoweringError> {
let expr = lower_sql_expr(expr, SqlExprPhase::PreAggregate)?;
validate::validate_where_bool_expr(&expr)?;
let expr = normalize::normalize_where_bool_expr(expr);
debug_assert!(normalize::is_normalized_where_bool_expr(&expr));
Ok(expr)
}