1use super::*;
2
3impl<C, R, T, S> update::Update<C, R, T> for S
4where S: update::UpdateFlavoredStatement,
5 C: Connection<R>,
6 R: Row,
7 T: params::Params + row::TryFromRefRow<R>,
8{
9 fn update(&self, conn: &mut C, object: &T) -> Result<()> {
10 conn.execute_with_params(self.update_stmt(conn)?, object)?;
11 Ok(())
12 }
13
14 fn update_with_filter<F>(&self, conn: &mut C, filter: &F, object: &T) -> Result<()>
15 where F: traits::FlavoredFilter
16 {
17 conn.execute_with_params(self.update_with_filter_stmt(conn, filter)?, object)?;
18 Ok(())
19 }
20
21 fn update_with_filter_order_limit_offset<F, O>(&self, conn: &mut C, filter: &F, order: &O, limit: usize, offset: usize, object: &T) -> Result<()>
22 where F: traits::FlavoredFilter, O: FlavoredOrder,
23 {
24 match conn.flavor() {
25 Flavor::SQLite
26 | Flavor::MySQL => {
27 log::warn!("Update with limit and offset will be deprecated");
28 conn.execute_with_params(self.update_with_filter_order_limit_offset_stmt(conn, filter, order, limit, offset)?, object)?;
29 Ok(())
30 }
31 Flavor::PostgreSQL => Err(Error::UpdateWithLimitOffsetNotSupported),
32 }
33 }
34}
35
36impl<C, R, S> delete::Delete<C, R> for S
37where S: delete::DeleteFlavoredStatement,
38 C: Connection<R>,
39 R: Row,
40{
41 fn delete(&self, conn: &mut C) -> Result<()> {
42 conn.query_drop(self.delete_stmt(conn)?)?;
43 Ok(())
44 }
45
46 fn delete_with_filter<F>(&self, conn: &mut C, filter: &F) -> Result<()>
47 where F: traits::FlavoredFilter
48 {
49 conn.query_drop(self.delete_with_filter_stmt(conn, filter)?)?;
50 Ok(())
51 }
52
53 fn delete_with_filter_order_limit_offset<F, O>(&self, conn: &mut C, filter: &F, order: &O, limit: usize, offset: usize) -> Result<()>
54 where F: traits::FlavoredFilter, O: FlavoredOrder,
55 {
56 conn.query_drop(self.delete_with_filter_order_limit_offset_stmt(conn, filter, order, limit, offset)?)?;
57 Ok(())
58 }
59}
60
61impl<C, R, T, S> insert::Insert<C, R, T> for S
62where S: insert::InsertFlavoredStatement,
63 T: params::Params,
64 C: Connection<R>,
65 R: Row,
66{
67 fn insert(&self, conn: &mut C, object: &T) -> Result<()> {
68 conn.execute_with_params(self.insert_stmt(conn)?, object)?;
69 Ok(())
70 }
71}
72
73impl<'a, C, R, T, S> insert::InsertMultiple<'a, C, R, T> for S
74where S: insert::InsertFlavoredStatement,
75 T: params::Params + 'a,
76 C: Connection<R>,
77 R: Row,
78{
79 fn insert_multiple<I>(&self, conn: &mut C, objects: I) -> Result<()>
80 where I: core::iter::IntoIterator<Item = &'a T>
81 {
82 conn.execute_with_params_iterator(self.insert_stmt(conn)?, objects)?;
83 Ok(())
84 }
85}
86
87impl<C, R, T, S> select::Select<C, R, T> for S
88where S: select::SelectFlavoredStatement,
89 T: row::TryFromRefRow<R>,
90 C: Connection<R>,
91 R: Row,
92{
93 fn select(&self, conn: &mut C) -> Result<Vec<T>> {
94 conn.query_try_as_object(self.select_stmt(conn)?)
95 }
96
97 fn select_with_filter<F>(&self, conn: &mut C, filter: &F) -> Result<Vec<T>>
98 where F: traits::FlavoredFilter
99 {
100 conn.query_try_as_object(self.select_with_filter_stmt(conn, filter)?)
101 }
102
103 fn select_with_filter_order<F, O>(&self, conn: &mut C, filter: &F, order: &O) -> Result<Vec<T>>
104 where F: traits::FlavoredFilter, O: traits::FlavoredOrder,
105 {
106 conn.query_try_as_object(self.select_with_filter_order_stmt(conn, filter, order)?)
107 }
108
109 fn select_with_filter_order_limit_offset<F, O>(&self, conn: &mut C, filter: &F, order: &O, limit: usize, offset: usize) -> Result<Vec<T>>
110 where F: traits::FlavoredFilter, O: traits::FlavoredOrder,
111 {
112 conn.query_try_as_object(self.select_with_filter_order_limit_offset_stmt(conn, filter, order, limit, offset)?)
113 }
114}
115
116impl<C, R, S> table::Table<C, R> for S
117where S: table::TableFlavoredStatement,
118 C: Connection<R>,
119 R: Row,
120{
121 fn create(&self, conn: &mut C) -> Result<()> {
122 conn.query_drop(self.create_stmt(conn)?)
123 }
124
125 fn create_if_not_exist(&self, conn: &mut C) -> Result<()> {
126 conn.query_drop(self.create_if_not_exist_stmt(conn)?)
127 }
128
129 fn drop(&self, conn: &mut C) -> Result<()> {
130 conn.query_drop(self.drop_stmt(conn)?)
131 }
132}