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 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
50pub 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#[must_use]
66pub fn load() -> LoadQuery {
68 LoadQuery::new()
69}
70
71#[must_use]
73pub fn delete() -> DeleteQuery {
75 DeleteQuery::new()
76}
77
78#[must_use]
80pub fn insert() -> SaveQuery {
82 SaveQuery::new(SaveMode::Insert)
83}
84
85#[must_use]
87pub fn update() -> SaveQuery {
89 SaveQuery::new(SaveMode::Update)
90}
91
92#[must_use]
94pub fn replace() -> SaveQuery {
96 SaveQuery::new(SaveMode::Replace)
97}