icydb_core/db/query/
expr.rs1use crate::db::query::{
2 plan::{OrderDirection, OrderSpec, PlanError, validate::validate_order},
3 predicate::{self, Predicate, SchemaInfo, ValidateError, normalize},
4};
5use thiserror::Error as ThisError;
6
7#[derive(Clone, Debug)]
14pub struct FilterExpr(pub Predicate);
15
16impl FilterExpr {
17 pub fn lower_with(&self, schema: &SchemaInfo) -> Result<Predicate, ValidateError> {
19 predicate::validate::reject_unsupported_query_features(&self.0)?;
20 predicate::validate(schema, &self.0)?;
21
22 Ok(normalize(&self.0))
23 }
24}
25
26#[derive(Clone, Debug)]
33pub struct SortExpr {
34 pub fields: Vec<(String, OrderDirection)>,
35}
36
37impl SortExpr {
38 pub fn lower_with(&self, schema: &SchemaInfo) -> Result<OrderSpec, SortLowerError> {
40 let spec = OrderSpec {
41 fields: self.fields.clone(),
42 };
43
44 validate_order(schema, &spec)?;
45
46 Ok(spec)
47 }
48}
49
50#[derive(Debug, ThisError)]
56pub enum SortLowerError {
57 #[error("{0}")]
58 Validate(#[from] ValidateError),
59
60 #[error("{0}")]
61 Plan(#[from] PlanError),
62}