1use super::*;
2
3pub trait SelectFlavoredStatement {
4 fn select_stmt<C, R>(&self, conn: &C) -> Result<String>
6 where C: Connection<R>, R: Row;
7
8 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 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 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 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 fn select_stmt(&self) -> Result<String>;
42
43 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 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 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 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 fn select(&self, conn: &mut C) -> Result<Vec<T>>;
89
90 fn select_with_filter<F>(&self, conn: &mut C, filter: &F) -> Result<Vec<T>>
92 where F: traits::FlavoredFilter;
93
94 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 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