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 filter value: {0}")]
38    InvalidFilterValue(String),
39
40    #[error("invalid sort field '{0}'")]
41    InvalidSortField(String),
42}
43
44impl From<QueryError> for Error {
45    fn from(err: QueryError) -> Self {
46        DbError::from(err).into()
47    }
48}
49
50///
51/// QueryValidate Trait
52///
53
54pub trait QueryValidate<E: EntityKind> {
55    fn validate(&self) -> Result<(), QueryError>;
56}
57
58impl<E: EntityKind, T: QueryValidate<E>> QueryValidate<E> for Box<T> {
59    fn validate(&self) -> Result<(), QueryError> {
60        (**self).validate()
61    }
62}
63
64// load
65#[must_use]
66/// Start building a `LoadQuery`.
67pub fn load() -> LoadQuery {
68    LoadQuery::new()
69}
70
71// delete
72#[must_use]
73/// Start building a `DeleteQuery`.
74pub fn delete() -> DeleteQuery {
75    DeleteQuery::new()
76}
77
78// create
79#[must_use]
80/// Build an insert `SaveQuery`.
81pub fn insert() -> SaveQuery {
82    SaveQuery::new(SaveMode::Insert)
83}
84
85// update
86#[must_use]
87/// Build an update `SaveQuery`.
88pub fn update() -> SaveQuery {
89    SaveQuery::new(SaveMode::Update)
90}
91
92// replace
93#[must_use]
94/// Build a replace `SaveQuery`.
95pub fn replace() -> SaveQuery {
96    SaveQuery::new(SaveMode::Replace)
97}