icydb_core/db/query/
mod.rs1mod delete;
2mod load;
3mod planner;
4mod save;
5
6pub use delete::*;
7pub use load::*;
8pub use planner::*;
9pub use save::*;
10
11pub 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#[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
56pub 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#[must_use]
72pub fn load() -> LoadQuery {
73 LoadQuery::new()
74}
75
76#[must_use]
78pub fn delete() -> DeleteQuery {
79 DeleteQuery::new()
80}
81
82#[must_use]
84pub fn insert() -> SaveQuery {
85 SaveQuery::new(SaveMode::Insert)
86}
87
88#[must_use]
90pub fn update() -> SaveQuery {
91 SaveQuery::new(SaveMode::Update)
92}
93
94#[must_use]
96pub fn replace() -> SaveQuery {
97 SaveQuery::new(SaveMode::Replace)
98}