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 {
74 LoadQuery::new()
75}
76
77#[must_use]
79pub fn delete() -> DeleteQuery {
81 DeleteQuery::new()
82}
83
84#[must_use]
86pub fn insert() -> SaveQuery {
88 SaveQuery::new(SaveMode::Insert)
89}
90
91#[must_use]
93pub fn update() -> SaveQuery {
95 SaveQuery::new(SaveMode::Update)
96}
97
98#[must_use]
100pub fn replace() -> SaveQuery {
102 SaveQuery::new(SaveMode::Replace)
103}