derive_sql/traits/
select.rs

1use super::*;
2
3pub trait SelectFlavoredStatement {
4  /// SQL statement to retrieve the list of items stored in database
5  fn select_stmt<C, R>(&self, conn: &C) -> Result<String>
6  where C: Connection<R>, R: Row;
7
8  /// SQL statement to retrieve the list of items stored with specifying a limit and an offset
9  fn select_with_filter_stmt<C, R, F>(&self, conn: &C, filter: &F) -> Result<String> 
10  where C: Connection<R>, R: Row, F: traits::FlavoredFilter,
11  {
12    self.select_with_filter_order_limit_offset_options_stmt::<_, _, _, structs::order::None>(conn, Some(filter), None, None, None)
13  }
14
15  /// SQL statement to retrieve the list of items stored with specifying a limit and an offset
16  fn select_with_filter_order_stmt<C, R, F, O>(&self, conn: &C, filter: &F, order: &O) -> Result<String> 
17  where C: Connection<R>, R: Row, F: traits::FlavoredFilter, O: traits::FlavoredOrder,
18  {
19    self.select_with_filter_order_limit_offset_options_stmt(conn, Some(filter), Some(order), None, None)
20  }
21
22  /// SQL statement to retrieve the list of items stored with specifying a limit and an offset
23  fn select_with_filter_order_limit_offset_stmt<C, R, F, O>(&self, conn: &C, filter: &F, order: &O, limit: usize, offset: usize) -> Result<String> 
24  where C: Connection<R>, R: Row, F: traits::FlavoredFilter, O: traits::FlavoredOrder,
25  {
26    self.select_with_filter_order_limit_offset_options_stmt(conn, Some(filter), Some(order), Some(limit), Some(offset))
27  }
28
29  /// SQL statement to retrieve the list of items stored with specifying optionals filter, limit and offset
30  fn select_with_filter_order_limit_offset_options_stmt<C, R, F, O>(&self, conn: &C, filter: Option<&F>, order: Option<&O>, limit: Option<usize>, offset: Option<usize>) -> Result<String> 
31  where C: Connection<R>, R: Row, F: traits::FlavoredFilter, O: traits::FlavoredOrder,
32  {
33    statement_with_conn_filter_order_limit_offset_options(self.select_stmt(conn)?,
34      conn, filter, order, limit, offset)
35  }
36}
37
38pub trait SelectStatement
39{
40  /// SQL statement to retrieve the list of items stored in database
41  fn select_stmt(&self) -> Result<String>;
42
43  /// SQL statement to retrieve the list of items stored with specifying a limit and an offset
44  fn select_with_filter_stmt<F>(&self, filter: &F) -> Result<String> 
45  where F: traits::Filter,
46  {
47    self.select_with_filter_order_limit_offset_options_stmt::<_, structs::order::None>(Some(filter), None, None, None)
48  }
49
50  /// SQL statement to retrieve the list of items stored with specifying a limit and an offset
51  fn select_with_filter_order_stmt<F, O>(&self, filter: &F, order: &O) -> Result<String> 
52  where F: traits::Filter, O: traits::Order,
53  {
54    self.select_with_filter_order_limit_offset_options_stmt(Some(filter), Some(order), None, None)
55  }
56
57  /// SQL statement to retrieve the list of items stored with specifying a limit and an offset
58  fn select_with_filter_order_limit_offset_stmt<F, O>(&self, filter: &F, order: &O, limit: usize, offset: usize) -> Result<String> 
59  where F: traits::Filter, O: traits::Order,
60  {
61    self.select_with_filter_order_limit_offset_options_stmt(Some(filter), Some(order), Some(limit), Some(offset))
62  }
63
64  /// SQL statement to retrieve the list of items stored with specifying optionals filter, limit and offset
65  fn select_with_filter_order_limit_offset_options_stmt<F, O>(&self, filter: Option<&F>, order: Option<&O>, limit: Option<usize>, offset: Option<usize>) -> Result<String> 
66  where F: traits::Filter, O: traits::Order,
67  {
68    statement_with_filter_order_limit_offset_options(self.select_stmt()?,
69      filter, order, limit, offset)
70  }
71}
72
73impl<S> SelectFlavoredStatement for S
74where S: SelectStatement
75{
76  fn select_stmt<C, R>(&self, _conn: &C) -> Result<String>
77  where C: Connection<R>, R: Row,
78  {
79    SelectStatement::select_stmt(self)
80  }
81}
82
83pub trait Select<C, R, T> 
84where C: Connection<R>,
85      R: Row,
86{
87  /// Retrieve the list of items of the type `T` stored in database
88  fn select(&self, conn: &mut C) -> Result<Vec<T>>;
89
90  /// Retrieve the list of items of the type `T` stored in database matching the filtering criteria
91  fn select_with_filter<F>(&self, conn: &mut C, filter: &F) -> Result<Vec<T>>
92  where F: traits::FlavoredFilter;
93
94  /// Retrieve the list of items of the type `T` stored in database matching the filtering criteria
95  fn select_with_filter_order<F, O>(&self, conn: &mut C, filter: &F, order: &O) -> Result<Vec<T>>
96  where F: traits::FlavoredFilter, O: traits::FlavoredOrder;
97
98  /// Retrieve the list of items of the type `T` stored in database
99  fn select_with_filter_order_limit_offset<F, O>(&self, conn: &mut C, filter: &F, order: &O, limit: usize, offset: usize) -> Result<Vec<T>>
100  where F: traits::FlavoredFilter, O: traits::FlavoredOrder;
101}
102