Skip to main content

sql_middleware/executor/
targets.rs

1use crate::pool::MiddlewarePoolConnection;
2use crate::types::StatementCacheMode;
3
4mod typed;
5
6#[cfg(feature = "mssql")]
7use crate::mssql;
8#[cfg(feature = "mssql")]
9use crate::mssql::typed::MssqlManager;
10#[cfg(feature = "postgres")]
11use crate::postgres;
12#[cfg(feature = "postgres")]
13use crate::postgres::typed::PgManager;
14#[cfg(feature = "sqlite")]
15use crate::sqlite::config::SqliteManager;
16#[cfg(feature = "turso")]
17use crate::turso;
18#[cfg(feature = "turso")]
19use crate::typed_turso::TursoManager;
20#[cfg(any(
21    feature = "postgres",
22    feature = "turso",
23    feature = "sqlite",
24    feature = "mssql"
25))]
26use bb8::PooledConnection;
27
28/// Target for batch execution (connection or transaction).
29pub enum BatchTarget<'a> {
30    Connection(&'a mut MiddlewarePoolConnection),
31    #[cfg(feature = "postgres")]
32    PostgresTx(&'a postgres::transaction::Tx<'a>),
33    #[cfg(feature = "mssql")]
34    MssqlTx(&'a mut mssql::transaction::Tx<'a>),
35    #[cfg(feature = "turso")]
36    TursoTx(&'a turso::transaction::Tx<'a>),
37    #[cfg(feature = "turso")]
38    TypedTurso {
39        conn: &'a mut PooledConnection<'static, TursoManager>,
40    },
41    #[cfg(feature = "turso")]
42    TypedTursoTx {
43        conn: &'a mut PooledConnection<'static, TursoManager>,
44    },
45}
46
47/// Target for query builder dispatch (connection or transaction) with a translation default.
48pub struct QueryTarget<'a> {
49    pub(crate) kind: QueryTargetKind<'a>,
50    pub(crate) translation_default: bool,
51    pub(crate) statement_cache_mode: StatementCacheMode,
52}
53
54pub(crate) enum QueryTargetKind<'a> {
55    Connection(&'a mut MiddlewarePoolConnection),
56    #[cfg(feature = "postgres")]
57    PostgresTx(&'a postgres::transaction::Tx<'a>),
58    #[cfg(feature = "sqlite")]
59    TypedSqlite {
60        conn: &'a mut PooledConnection<'static, SqliteManager>,
61    },
62    #[cfg(feature = "sqlite")]
63    TypedSqliteTx {
64        conn: &'a mut PooledConnection<'static, SqliteManager>,
65    },
66    #[cfg(feature = "postgres")]
67    TypedPostgres {
68        conn: &'a mut PooledConnection<'static, PgManager>,
69    },
70    #[cfg(feature = "postgres")]
71    TypedPostgresTx {
72        conn: &'a mut PooledConnection<'static, PgManager>,
73    },
74    #[cfg(feature = "mssql")]
75    TypedMssql {
76        conn: &'a mut PooledConnection<'static, MssqlManager>,
77    },
78    #[cfg(feature = "mssql")]
79    TypedMssqlTx {
80        conn: &'a mut PooledConnection<'static, MssqlManager>,
81    },
82    #[cfg(feature = "turso")]
83    TypedTurso {
84        conn: &'a mut PooledConnection<'static, TursoManager>,
85    },
86    #[cfg(feature = "turso")]
87    TypedTursoTx {
88        conn: &'a mut PooledConnection<'static, TursoManager>,
89    },
90    #[cfg(feature = "mssql")]
91    MssqlTx(&'a mut mssql::transaction::Tx<'a>),
92    #[cfg(feature = "turso")]
93    TursoTx(&'a turso::transaction::Tx<'a>),
94}
95
96impl<'a> From<&'a mut MiddlewarePoolConnection> for BatchTarget<'a> {
97    fn from(conn: &'a mut MiddlewarePoolConnection) -> Self {
98        BatchTarget::Connection(conn)
99    }
100}
101
102#[cfg(feature = "postgres")]
103impl<'a> From<&'a postgres::transaction::Tx<'a>> for BatchTarget<'a> {
104    fn from(tx: &'a postgres::transaction::Tx<'a>) -> Self {
105        BatchTarget::PostgresTx(tx)
106    }
107}
108
109#[cfg(feature = "mssql")]
110impl<'a> From<&'a mut mssql::transaction::Tx<'a>> for BatchTarget<'a> {
111    fn from(tx: &'a mut mssql::transaction::Tx<'a>) -> Self {
112        BatchTarget::MssqlTx(tx)
113    }
114}
115
116#[cfg(feature = "turso")]
117impl<'a> From<&'a turso::transaction::Tx<'a>> for BatchTarget<'a> {
118    fn from(tx: &'a turso::transaction::Tx<'a>) -> Self {
119        BatchTarget::TursoTx(tx)
120    }
121}
122
123impl<'a> From<&'a mut MiddlewarePoolConnection> for QueryTarget<'a> {
124    fn from(conn: &'a mut MiddlewarePoolConnection) -> Self {
125        QueryTarget {
126            translation_default: conn.translation_default(),
127            statement_cache_mode: conn.statement_cache_mode_default(),
128            kind: QueryTargetKind::Connection(conn),
129        }
130    }
131}
132
133#[cfg(feature = "postgres")]
134impl<'a> From<&'a postgres::transaction::Tx<'a>> for QueryTarget<'a> {
135    fn from(tx: &'a postgres::transaction::Tx<'a>) -> Self {
136        QueryTarget {
137            translation_default: false,
138            statement_cache_mode: StatementCacheMode::Cached,
139            kind: QueryTargetKind::PostgresTx(tx),
140        }
141    }
142}
143
144#[cfg(feature = "mssql")]
145impl<'a> From<&'a mut mssql::transaction::Tx<'a>> for QueryTarget<'a> {
146    fn from(tx: &'a mut mssql::transaction::Tx<'a>) -> Self {
147        QueryTarget {
148            translation_default: false,
149            statement_cache_mode: StatementCacheMode::Cached,
150            kind: QueryTargetKind::MssqlTx(tx),
151        }
152    }
153}
154
155#[cfg(feature = "turso")]
156impl<'a> From<&'a turso::transaction::Tx<'a>> for QueryTarget<'a> {
157    fn from(tx: &'a turso::transaction::Tx<'a>) -> Self {
158        QueryTarget {
159            translation_default: false,
160            statement_cache_mode: StatementCacheMode::Cached,
161            kind: QueryTargetKind::TursoTx(tx),
162        }
163    }
164}