sqlx_core_oldapi/any/
column.rs

1use crate::any::{Any, AnyTypeInfo};
2use crate::column::{Column, ColumnIndex};
3
4#[cfg(feature = "postgres")]
5use crate::postgres::{PgColumn, PgRow, PgStatement};
6
7#[cfg(feature = "mysql")]
8use crate::mysql::{MySqlColumn, MySqlRow, MySqlStatement};
9
10#[cfg(feature = "sqlite")]
11use crate::sqlite::{SqliteColumn, SqliteRow, SqliteStatement};
12
13#[cfg(feature = "mssql")]
14use crate::mssql::{MssqlColumn, MssqlRow, MssqlStatement};
15
16#[derive(Debug, Clone)]
17pub struct AnyColumn {
18    pub(crate) kind: AnyColumnKind,
19    pub(crate) type_info: AnyTypeInfo,
20}
21
22impl crate::column::private_column::Sealed for AnyColumn {}
23
24#[derive(Debug, Clone)]
25pub(crate) enum AnyColumnKind {
26    #[cfg(feature = "postgres")]
27    Postgres(PgColumn),
28
29    #[cfg(feature = "mysql")]
30    MySql(MySqlColumn),
31
32    #[cfg(feature = "sqlite")]
33    Sqlite(SqliteColumn),
34
35    #[cfg(feature = "mssql")]
36    Mssql(MssqlColumn),
37}
38
39impl Column for AnyColumn {
40    type Database = Any;
41
42    fn ordinal(&self) -> usize {
43        match &self.kind {
44            #[cfg(feature = "postgres")]
45            AnyColumnKind::Postgres(row) => row.ordinal(),
46
47            #[cfg(feature = "mysql")]
48            AnyColumnKind::MySql(row) => row.ordinal(),
49
50            #[cfg(feature = "sqlite")]
51            AnyColumnKind::Sqlite(row) => row.ordinal(),
52
53            #[cfg(feature = "mssql")]
54            AnyColumnKind::Mssql(row) => row.ordinal(),
55        }
56    }
57
58    fn name(&self) -> &str {
59        match &self.kind {
60            #[cfg(feature = "postgres")]
61            AnyColumnKind::Postgres(row) => row.name(),
62
63            #[cfg(feature = "mysql")]
64            AnyColumnKind::MySql(row) => row.name(),
65
66            #[cfg(feature = "sqlite")]
67            AnyColumnKind::Sqlite(row) => row.name(),
68
69            #[cfg(feature = "mssql")]
70            AnyColumnKind::Mssql(row) => row.name(),
71        }
72    }
73
74    fn type_info(&self) -> &AnyTypeInfo {
75        &self.type_info
76    }
77}
78
79// FIXME: Find a nice way to auto-generate the below or petition Rust to add support for #[cfg]
80//        to trait bounds
81
82// all 4
83
84#[cfg(all(
85    feature = "postgres",
86    feature = "mysql",
87    feature = "mssql",
88    feature = "sqlite"
89))]
90pub trait AnyColumnIndex:
91    ColumnIndex<PgRow>
92    + for<'q> ColumnIndex<PgStatement<'q>>
93    + ColumnIndex<MySqlRow>
94    + for<'q> ColumnIndex<MySqlStatement<'q>>
95    + ColumnIndex<MssqlRow>
96    + for<'q> ColumnIndex<MssqlStatement<'q>>
97    + ColumnIndex<SqliteRow>
98    + for<'q> ColumnIndex<SqliteStatement<'q>>
99{
100}
101
102#[cfg(all(
103    feature = "postgres",
104    feature = "mysql",
105    feature = "mssql",
106    feature = "sqlite"
107))]
108impl<I: ?Sized> AnyColumnIndex for I where
109    I: ColumnIndex<PgRow>
110        + for<'q> ColumnIndex<PgStatement<'q>>
111        + ColumnIndex<MySqlRow>
112        + for<'q> ColumnIndex<MySqlStatement<'q>>
113        + ColumnIndex<MssqlRow>
114        + for<'q> ColumnIndex<MssqlStatement<'q>>
115        + ColumnIndex<SqliteRow>
116        + for<'q> ColumnIndex<SqliteStatement<'q>>
117{
118}
119
120// only 3 (4)
121
122#[cfg(all(
123    not(feature = "mssql"),
124    all(feature = "postgres", feature = "mysql", feature = "sqlite")
125))]
126pub trait AnyColumnIndex:
127    ColumnIndex<PgRow>
128    + for<'q> ColumnIndex<PgStatement<'q>>
129    + ColumnIndex<MySqlRow>
130    + for<'q> ColumnIndex<MySqlStatement<'q>>
131    + ColumnIndex<SqliteRow>
132    + for<'q> ColumnIndex<SqliteStatement<'q>>
133{
134}
135
136#[cfg(all(
137    not(feature = "mssql"),
138    all(feature = "postgres", feature = "mysql", feature = "sqlite")
139))]
140impl<I: ?Sized> AnyColumnIndex for I where
141    I: ColumnIndex<PgRow>
142        + for<'q> ColumnIndex<PgStatement<'q>>
143        + ColumnIndex<MySqlRow>
144        + for<'q> ColumnIndex<MySqlStatement<'q>>
145        + ColumnIndex<SqliteRow>
146        + for<'q> ColumnIndex<SqliteStatement<'q>>
147{
148}
149
150#[cfg(all(
151    not(feature = "mysql"),
152    all(feature = "postgres", feature = "mssql", feature = "sqlite")
153))]
154pub trait AnyColumnIndex:
155    ColumnIndex<PgRow>
156    + for<'q> ColumnIndex<PgStatement<'q>>
157    + ColumnIndex<MssqlRow>
158    + for<'q> ColumnIndex<MssqlStatement<'q>>
159    + ColumnIndex<SqliteRow>
160    + for<'q> ColumnIndex<SqliteStatement<'q>>
161{
162}
163
164#[cfg(all(
165    not(feature = "mysql"),
166    all(feature = "postgres", feature = "mssql", feature = "sqlite")
167))]
168impl<I: ?Sized> AnyColumnIndex for I where
169    I: ColumnIndex<PgRow>
170        + for<'q> ColumnIndex<PgStatement<'q>>
171        + ColumnIndex<MssqlRow>
172        + for<'q> ColumnIndex<MssqlStatement<'q>>
173        + ColumnIndex<SqliteRow>
174        + for<'q> ColumnIndex<SqliteStatement<'q>>
175{
176}
177
178#[cfg(all(
179    not(feature = "sqlite"),
180    all(feature = "postgres", feature = "mysql", feature = "mssql")
181))]
182pub trait AnyColumnIndex:
183    ColumnIndex<PgRow>
184    + for<'q> ColumnIndex<PgStatement<'q>>
185    + ColumnIndex<MySqlRow>
186    + for<'q> ColumnIndex<MySqlStatement<'q>>
187    + ColumnIndex<MssqlRow>
188    + for<'q> ColumnIndex<MssqlStatement<'q>>
189{
190}
191
192#[cfg(all(
193    not(feature = "sqlite"),
194    all(feature = "postgres", feature = "mysql", feature = "mssql")
195))]
196impl<I: ?Sized> AnyColumnIndex for I where
197    I: ColumnIndex<PgRow>
198        + for<'q> ColumnIndex<PgStatement<'q>>
199        + ColumnIndex<MySqlRow>
200        + for<'q> ColumnIndex<MySqlStatement<'q>>
201        + ColumnIndex<MssqlRow>
202        + for<'q> ColumnIndex<MssqlStatement<'q>>
203{
204}
205
206#[cfg(all(
207    not(feature = "postgres"),
208    all(feature = "sqlite", feature = "mysql", feature = "mssql")
209))]
210pub trait AnyColumnIndex:
211    ColumnIndex<SqliteRow>
212    + for<'q> ColumnIndex<SqliteStatement<'q>>
213    + ColumnIndex<MySqlRow>
214    + for<'q> ColumnIndex<MySqlStatement<'q>>
215    + ColumnIndex<MssqlRow>
216    + for<'q> ColumnIndex<MssqlStatement<'q>>
217{
218}
219
220#[cfg(all(
221    not(feature = "postgres"),
222    all(feature = "sqlite", feature = "mysql", feature = "mssql")
223))]
224impl<I: ?Sized> AnyColumnIndex for I where
225    I: ColumnIndex<SqliteRow>
226        + for<'q> ColumnIndex<SqliteStatement<'q>>
227        + ColumnIndex<MySqlRow>
228        + for<'q> ColumnIndex<MySqlStatement<'q>>
229        + ColumnIndex<MssqlRow>
230        + for<'q> ColumnIndex<MssqlStatement<'q>>
231{
232}
233
234// only 2 (6)
235
236#[cfg(all(
237    not(any(feature = "mssql", feature = "sqlite")),
238    all(feature = "postgres", feature = "mysql")
239))]
240pub trait AnyColumnIndex:
241    ColumnIndex<PgRow>
242    + for<'q> ColumnIndex<PgStatement<'q>>
243    + ColumnIndex<MySqlRow>
244    + for<'q> ColumnIndex<MySqlStatement<'q>>
245{
246}
247
248#[cfg(all(
249    not(any(feature = "mssql", feature = "sqlite")),
250    all(feature = "postgres", feature = "mysql")
251))]
252impl<I: ?Sized> AnyColumnIndex for I where
253    I: ColumnIndex<PgRow>
254        + for<'q> ColumnIndex<PgStatement<'q>>
255        + ColumnIndex<MySqlRow>
256        + for<'q> ColumnIndex<MySqlStatement<'q>>
257{
258}
259
260#[cfg(all(
261    not(any(feature = "mysql", feature = "sqlite")),
262    all(feature = "postgres", feature = "mssql")
263))]
264pub trait AnyColumnIndex:
265    ColumnIndex<PgRow>
266    + for<'q> ColumnIndex<PgStatement<'q>>
267    + ColumnIndex<MssqlRow>
268    + for<'q> ColumnIndex<MssqlStatement<'q>>
269{
270}
271
272#[cfg(all(
273    not(any(feature = "mysql", feature = "sqlite")),
274    all(feature = "postgres", feature = "mssql")
275))]
276impl<I: ?Sized> AnyColumnIndex for I where
277    I: ColumnIndex<PgRow>
278        + for<'q> ColumnIndex<PgStatement<'q>>
279        + ColumnIndex<MssqlRow>
280        + for<'q> ColumnIndex<MssqlStatement<'q>>
281{
282}
283
284#[cfg(all(
285    not(any(feature = "mysql", feature = "mssql")),
286    all(feature = "postgres", feature = "sqlite")
287))]
288pub trait AnyColumnIndex:
289    ColumnIndex<PgRow>
290    + for<'q> ColumnIndex<PgStatement<'q>>
291    + ColumnIndex<SqliteRow>
292    + for<'q> ColumnIndex<SqliteStatement<'q>>
293{
294}
295
296#[cfg(all(
297    not(any(feature = "mysql", feature = "mssql")),
298    all(feature = "postgres", feature = "sqlite")
299))]
300impl<I: ?Sized> AnyColumnIndex for I where
301    I: ColumnIndex<PgRow>
302        + for<'q> ColumnIndex<PgStatement<'q>>
303        + ColumnIndex<SqliteRow>
304        + for<'q> ColumnIndex<SqliteStatement<'q>>
305{
306}
307
308#[cfg(all(
309    not(any(feature = "postgres", feature = "sqlite")),
310    all(feature = "mssql", feature = "mysql")
311))]
312pub trait AnyColumnIndex:
313    ColumnIndex<MssqlRow>
314    + for<'q> ColumnIndex<MssqlStatement<'q>>
315    + ColumnIndex<MySqlRow>
316    + for<'q> ColumnIndex<MySqlStatement<'q>>
317{
318}
319
320#[cfg(all(
321    not(any(feature = "postgres", feature = "sqlite")),
322    all(feature = "mssql", feature = "mysql")
323))]
324impl<I: ?Sized> AnyColumnIndex for I where
325    I: ColumnIndex<MssqlRow>
326        + for<'q> ColumnIndex<MssqlStatement<'q>>
327        + ColumnIndex<MySqlRow>
328        + for<'q> ColumnIndex<MySqlStatement<'q>>
329{
330}
331
332#[cfg(all(
333    not(any(feature = "postgres", feature = "mysql")),
334    all(feature = "mssql", feature = "sqlite")
335))]
336pub trait AnyColumnIndex:
337    ColumnIndex<MssqlRow>
338    + for<'q> ColumnIndex<MssqlStatement<'q>>
339    + ColumnIndex<SqliteRow>
340    + for<'q> ColumnIndex<SqliteStatement<'q>>
341{
342}
343
344#[cfg(all(
345    not(any(feature = "postgres", feature = "mysql")),
346    all(feature = "mssql", feature = "sqlite")
347))]
348impl<I: ?Sized> AnyColumnIndex for I where
349    I: ColumnIndex<MssqlRow>
350        + for<'q> ColumnIndex<MssqlStatement<'q>>
351        + ColumnIndex<SqliteRow>
352        + for<'q> ColumnIndex<SqliteStatement<'q>>
353{
354}
355
356#[cfg(all(
357    not(any(feature = "postgres", feature = "mssql")),
358    all(feature = "mysql", feature = "sqlite")
359))]
360pub trait AnyColumnIndex:
361    ColumnIndex<MySqlRow>
362    + for<'q> ColumnIndex<MySqlStatement<'q>>
363    + ColumnIndex<SqliteRow>
364    + for<'q> ColumnIndex<SqliteStatement<'q>>
365{
366}
367
368#[cfg(all(
369    not(any(feature = "postgres", feature = "mssql")),
370    all(feature = "mysql", feature = "sqlite")
371))]
372impl<I: ?Sized> AnyColumnIndex for I where
373    I: ColumnIndex<MySqlRow>
374        + for<'q> ColumnIndex<MySqlStatement<'q>>
375        + ColumnIndex<SqliteRow>
376        + for<'q> ColumnIndex<SqliteStatement<'q>>
377{
378}
379
380// only 1 (4)
381
382#[cfg(all(
383    not(any(feature = "mysql", feature = "mssql", feature = "sqlite")),
384    feature = "postgres"
385))]
386pub trait AnyColumnIndex: ColumnIndex<PgRow> + for<'q> ColumnIndex<PgStatement<'q>> {}
387
388#[cfg(all(
389    not(any(feature = "mysql", feature = "mssql", feature = "sqlite")),
390    feature = "postgres"
391))]
392impl<I: ?Sized> AnyColumnIndex for I where
393    I: ColumnIndex<PgRow> + for<'q> ColumnIndex<PgStatement<'q>>
394{
395}
396
397#[cfg(all(
398    not(any(feature = "postgres", feature = "mssql", feature = "sqlite")),
399    feature = "mysql"
400))]
401pub trait AnyColumnIndex: ColumnIndex<MySqlRow> + for<'q> ColumnIndex<MySqlStatement<'q>> {}
402
403#[cfg(all(
404    not(any(feature = "postgres", feature = "mssql", feature = "sqlite")),
405    feature = "mysql"
406))]
407impl<I: ?Sized> AnyColumnIndex for I where
408    I: ColumnIndex<MySqlRow> + for<'q> ColumnIndex<MySqlStatement<'q>>
409{
410}
411
412#[cfg(all(
413    not(any(feature = "mysql", feature = "postgres", feature = "sqlite")),
414    feature = "mssql"
415))]
416pub trait AnyColumnIndex: ColumnIndex<MssqlRow> + for<'q> ColumnIndex<MssqlStatement<'q>> {}
417
418#[cfg(all(
419    not(any(feature = "mysql", feature = "postgres", feature = "sqlite")),
420    feature = "mssql"
421))]
422impl<I: ?Sized> AnyColumnIndex for I where
423    I: ColumnIndex<MssqlRow> + for<'q> ColumnIndex<MssqlStatement<'q>>
424{
425}
426
427#[cfg(all(
428    not(any(feature = "mysql", feature = "mssql", feature = "postgres")),
429    feature = "sqlite"
430))]
431pub trait AnyColumnIndex:
432    ColumnIndex<SqliteRow> + for<'q> ColumnIndex<SqliteStatement<'q>>
433{
434}
435
436#[cfg(all(
437    not(any(feature = "mysql", feature = "mssql", feature = "postgres")),
438    feature = "sqlite"
439))]
440impl<I: ?Sized> AnyColumnIndex for I where
441    I: ColumnIndex<SqliteRow> + for<'q> ColumnIndex<SqliteStatement<'q>>
442{
443}