sql_middleware/typed/any/
ops.rs1use crate::SqlMiddlewareDbError;
2use crate::typed::traits::{BeginTx, TxConn, TypedConnOps};
3use crate::{middleware::RowValues, results::ResultSet};
4
5use super::{AnyIdle, AnyTx};
6
7impl TypedConnOps for AnyIdle {
8 #[allow(clippy::manual_async_fn)]
9 fn execute_batch(
10 &mut self,
11 sql: &str,
12 ) -> impl std::future::Future<Output = Result<(), SqlMiddlewareDbError>> {
13 async move {
14 match self {
15 #[cfg(feature = "postgres")]
16 AnyIdle::Postgres(conn) => conn.execute_batch(sql).await,
17 #[cfg(feature = "sqlite")]
18 AnyIdle::Sqlite(conn) => conn.execute_batch(sql).await,
19 #[cfg(feature = "turso")]
20 AnyIdle::Turso(conn) => conn.execute_batch(sql).await,
21 #[allow(unreachable_patterns)]
22 _ => unreachable!("typed backends are not enabled"),
23 }
24 }
25 }
26
27 #[allow(clippy::manual_async_fn)]
28 fn dml(
29 &mut self,
30 query: &str,
31 params: &[RowValues],
32 ) -> impl std::future::Future<Output = Result<usize, SqlMiddlewareDbError>> {
33 async move {
34 match self {
35 #[cfg(feature = "postgres")]
36 AnyIdle::Postgres(conn) => conn.dml(query, params).await,
37 #[cfg(feature = "sqlite")]
38 AnyIdle::Sqlite(conn) => conn.dml(query, params).await,
39 #[cfg(feature = "turso")]
40 AnyIdle::Turso(conn) => conn.dml(query, params).await,
41 #[allow(unreachable_patterns)]
42 _ => unreachable!("typed backends are not enabled"),
43 }
44 }
45 }
46
47 #[allow(clippy::manual_async_fn)]
48 fn select(
49 &mut self,
50 query: &str,
51 params: &[RowValues],
52 ) -> impl std::future::Future<Output = Result<ResultSet, SqlMiddlewareDbError>> {
53 async move {
54 match self {
55 #[cfg(feature = "postgres")]
56 AnyIdle::Postgres(conn) => conn.select(query, params).await,
57 #[cfg(feature = "sqlite")]
58 AnyIdle::Sqlite(conn) => conn.select(query, params).await,
59 #[cfg(feature = "turso")]
60 AnyIdle::Turso(conn) => conn.select(query, params).await,
61 #[allow(unreachable_patterns)]
62 _ => unreachable!("typed backends are not enabled"),
63 }
64 }
65 }
66}
67
68impl TypedConnOps for AnyTx {
69 #[allow(clippy::manual_async_fn)]
70 fn execute_batch(
71 &mut self,
72 sql: &str,
73 ) -> impl std::future::Future<Output = Result<(), SqlMiddlewareDbError>> {
74 async move {
75 match self {
76 #[cfg(feature = "postgres")]
77 AnyTx::Postgres(conn) => conn.execute_batch(sql).await,
78 #[cfg(feature = "sqlite")]
79 AnyTx::Sqlite(conn) => conn.execute_batch(sql).await,
80 #[cfg(feature = "turso")]
81 AnyTx::Turso(conn) => conn.execute_batch(sql).await,
82 #[allow(unreachable_patterns)]
83 _ => unreachable!("typed backends are not enabled"),
84 }
85 }
86 }
87
88 #[allow(clippy::manual_async_fn)]
89 fn dml(
90 &mut self,
91 query: &str,
92 params: &[RowValues],
93 ) -> impl std::future::Future<Output = Result<usize, SqlMiddlewareDbError>> {
94 async move {
95 match self {
96 #[cfg(feature = "postgres")]
97 AnyTx::Postgres(conn) => conn.dml(query, params).await,
98 #[cfg(feature = "sqlite")]
99 AnyTx::Sqlite(conn) => conn.dml(query, params).await,
100 #[cfg(feature = "turso")]
101 AnyTx::Turso(conn) => conn.dml(query, params).await,
102 #[allow(unreachable_patterns)]
103 _ => unreachable!("typed backends are not enabled"),
104 }
105 }
106 }
107
108 #[allow(clippy::manual_async_fn)]
109 fn select(
110 &mut self,
111 query: &str,
112 params: &[RowValues],
113 ) -> impl std::future::Future<Output = Result<ResultSet, SqlMiddlewareDbError>> {
114 async move {
115 match self {
116 #[cfg(feature = "postgres")]
117 AnyTx::Postgres(conn) => conn.select(query, params).await,
118 #[cfg(feature = "sqlite")]
119 AnyTx::Sqlite(conn) => conn.select(query, params).await,
120 #[cfg(feature = "turso")]
121 AnyTx::Turso(conn) => conn.select(query, params).await,
122 #[allow(unreachable_patterns)]
123 _ => unreachable!("typed backends are not enabled"),
124 }
125 }
126 }
127}
128
129impl BeginTx for AnyIdle {
130 type Tx = AnyTx;
131
132 #[allow(clippy::manual_async_fn)]
133 fn begin(self) -> impl std::future::Future<Output = Result<Self::Tx, SqlMiddlewareDbError>> {
134 async move {
135 match self {
136 #[cfg(feature = "postgres")]
137 AnyIdle::Postgres(conn) => Ok(AnyTx::Postgres(conn.begin().await?)),
138 #[cfg(feature = "sqlite")]
139 AnyIdle::Sqlite(conn) => Ok(AnyTx::Sqlite(conn.begin().await?)),
140 #[cfg(feature = "turso")]
141 AnyIdle::Turso(conn) => Ok(AnyTx::Turso(conn.begin().await?)),
142 #[allow(unreachable_patterns)]
143 _ => unreachable!("typed backends are not enabled"),
144 }
145 }
146 }
147}
148
149impl TxConn for AnyTx {
150 type Idle = AnyIdle;
151
152 #[allow(clippy::manual_async_fn)]
153 fn commit(self) -> impl std::future::Future<Output = Result<Self::Idle, SqlMiddlewareDbError>> {
154 async move {
155 match self {
156 #[cfg(feature = "postgres")]
157 AnyTx::Postgres(tx) => Ok(AnyIdle::Postgres(tx.commit().await?)),
158 #[cfg(feature = "sqlite")]
159 AnyTx::Sqlite(tx) => Ok(AnyIdle::Sqlite(tx.commit().await?)),
160 #[cfg(feature = "turso")]
161 AnyTx::Turso(tx) => Ok(AnyIdle::Turso(tx.commit().await?)),
162 #[allow(unreachable_patterns)]
163 _ => unreachable!("typed backends are not enabled"),
164 }
165 }
166 }
167
168 #[allow(clippy::manual_async_fn)]
170 fn rollback(
171 self,
172 ) -> impl std::future::Future<Output = Result<Self::Idle, SqlMiddlewareDbError>> {
173 async move {
174 match self {
175 #[cfg(feature = "postgres")]
176 AnyTx::Postgres(tx) => Ok(AnyIdle::Postgres(tx.rollback().await?)),
177 #[cfg(feature = "sqlite")]
178 AnyTx::Sqlite(tx) => Ok(AnyIdle::Sqlite(tx.rollback().await?)),
179 #[cfg(feature = "turso")]
180 AnyTx::Turso(tx) => Ok(AnyIdle::Turso(tx.rollback().await?)),
181 #[allow(unreachable_patterns)]
182 _ => unreachable!("typed backends are not enabled"),
183 }
184 }
185 }
186}