Skip to main content

sql_middleware/executor/
targets.rs

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