icydb_core/db/query/
mod.rs

1mod delete;
2mod load;
3mod planner;
4mod save;
5
6pub use delete::*;
7pub use load::*;
8pub use planner::*;
9pub use save::*;
10
11///
12/// Query Prelude
13///
14
15pub mod prelude {
16    pub use crate::db::{
17        primitives::{
18            filter::{FilterDsl, FilterExt as _},
19            limit::LimitExt as _,
20            sort::SortExt as _,
21        },
22        query,
23    };
24}
25
26use crate::{Error, ThisError, db::DbError, traits::EntityKind};
27
28///
29/// QueryError
30///
31
32#[derive(Debug, ThisError)]
33pub enum QueryError {
34    #[error("invalid filter field '{0}'")]
35    InvalidFilterField(String),
36
37    #[error("invalid index field '{0}'")]
38    InvalidIndexField(String),
39
40    #[error("invalid sort field '{0}'")]
41    InvalidSortField(String),
42
43    #[error("invalid filter value: {0}")]
44    InvalidFilterValue(String),
45
46    #[error("invalid comparator usage: {0}")]
47    InvalidComparator(String),
48}
49
50impl From<QueryError> for Error {
51    fn from(err: QueryError) -> Self {
52        DbError::from(err).into()
53    }
54}
55
56///
57/// QueryValidate Trait
58///
59
60pub trait QueryValidate<E: EntityKind> {
61    fn validate(&self) -> Result<(), QueryError>;
62}
63
64impl<E: EntityKind, T: QueryValidate<E>> QueryValidate<E> for Box<T> {
65    fn validate(&self) -> Result<(), QueryError> {
66        (**self).validate()
67    }
68}
69
70// load
71#[must_use]
72/// Start building a `LoadQuery`.
73pub fn load() -> LoadQuery {
74    LoadQuery::new()
75}
76
77// delete
78#[must_use]
79/// Start building a `DeleteQuery`.
80pub fn delete() -> DeleteQuery {
81    DeleteQuery::new()
82}
83
84// create
85#[must_use]
86/// Build an insert `SaveQuery`.
87pub fn insert() -> SaveQuery {
88    SaveQuery::new(SaveMode::Insert)
89}
90
91// update
92#[must_use]
93/// Build an update `SaveQuery`.
94pub fn update() -> SaveQuery {
95    SaveQuery::new(SaveMode::Update)
96}
97
98// replace
99#[must_use]
100/// Build a replace `SaveQuery`.
101pub fn replace() -> SaveQuery {
102    SaveQuery::new(SaveMode::Replace)
103}