Skip to main content

qlext/
lib.rs

1//! extension traits for Rust `General-Purpose` data queries
2
3#![cfg_attr(docsrs, feature(doc_cfg))]
4
5/// A query builder that supports integrated queries across data sources.
6///
7/// Data source should implement this trait.
8pub trait Query {
9    type FromQuery: FromQuery;
10
11    /// Create a query from `source`
12    fn from(from: Self) -> Self::FromQuery;
13}
14
15#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Hash)]
16pub enum Join {
17    Inner,
18    Left,
19    Right,
20    Outer,
21    Cross,
22}
23
24/// An extension trait that support `join` operation.
25pub trait JoinQuery: Query {
26    /// on clause.
27    type On;
28
29    /// Create a `join` query.
30    fn join(from: Self, join: Join, to: Self, on: Self::On) -> Self::FromQuery;
31}
32
33/// A query builder that support `where` and `select` clauses.
34pub trait FromQuery {
35    type WhereClause;
36    type WhereQuery;
37
38    type SelectClause;
39    type SelectQuery;
40
41    /// Create a `where` query.
42    fn where_(self, cond: Self::WhereClause) -> Self::WhereQuery;
43
44    /// Create a `select` query.
45    fn select(&self, clause: Self::SelectClause) -> Self::SelectQuery;
46}
47
48/// A query builder that support `select` clause.
49pub trait WhereQuery {
50    type SelectClause;
51    type SelectQuery;
52
53    /// Create a `select` query.
54    fn select(&self, clause: Self::SelectClause) -> Self::SelectQuery;
55}
56
57/// An final query builder that support `exec` clause.
58pub trait SelectQuery {
59    /// Result interator.
60    type Result;
61
62    /// Execute query.
63    fn exec(self) -> Self::Result;
64}