sqlx_core_oldapi/any/
mod.rs

1//! Generic database driver with the specific driver selected at runtime.
2
3use crate::executor::Executor;
4
5#[macro_use]
6mod feature_combinations;
7
8#[macro_use]
9mod decode;
10
11#[macro_use]
12mod encode;
13
14#[macro_use]
15mod r#type;
16
17mod arguments;
18pub(crate) mod column;
19mod connection;
20mod database;
21mod error;
22mod kind;
23mod options;
24mod query_result;
25pub(crate) mod row;
26mod statement;
27mod transaction;
28pub(crate) mod type_info;
29pub mod types;
30pub(crate) mod value;
31
32#[cfg(feature = "migrate")]
33mod migrate;
34
35pub use arguments::{AnyArgumentBuffer, AnyArguments};
36pub use column::{AnyColumn, AnyColumnIndex};
37pub use connection::AnyConnection;
38// Used internally in `sqlx-macros`
39#[doc(hidden)]
40pub use connection::AnyConnectionKind;
41pub use database::Any;
42pub use decode::AnyDecode;
43pub use encode::AnyEncode;
44pub use kind::AnyKind;
45pub use options::AnyConnectOptions;
46pub use query_result::AnyQueryResult;
47pub use row::AnyRow;
48pub use statement::AnyStatement;
49pub use transaction::AnyTransactionManager;
50pub use type_info::{AnyTypeInfo, AnyTypeInfoKind};
51pub use value::{AnyValue, AnyValueRef};
52
53pub type AnyPool = crate::pool::Pool<Any>;
54
55pub type AnyPoolOptions = crate::pool::PoolOptions<Any>;
56
57/// An alias for [`Executor<'_, Database = Any>`][Executor].
58pub trait AnyExecutor<'c>: Executor<'c, Database = Any> {}
59impl<'c, T: Executor<'c, Database = Any>> AnyExecutor<'c> for T {}
60
61// NOTE: required due to the lack of lazy normalization
62impl_into_arguments_for_arguments!(AnyArguments<'q>);
63impl_executor_for_pool_connection!(Any, AnyConnection, AnyRow);
64impl_executor_for_transaction!(Any, AnyRow);
65impl_acquire!(Any, AnyConnection);
66impl_column_index_for_row!(AnyRow);
67impl_column_index_for_statement!(AnyStatement);
68impl_into_maybe_pool!(Any, AnyConnection);
69
70// required because some databases have a different handling of NULL
71impl<'q, T> crate::encode::Encode<'q, Any> for Option<T>
72where
73    T: AnyEncode<'q> + 'q + Sync,
74{
75    fn encode_by_ref(&self, buf: &mut AnyArgumentBuffer<'q>) -> crate::encode::IsNull {
76        match &mut buf.0 {
77            #[cfg(feature = "postgres")]
78            arguments::AnyArgumentBufferKind::Postgres(args, _) => args.add(self),
79
80            #[cfg(feature = "mysql")]
81            arguments::AnyArgumentBufferKind::MySql(args, _) => args.add(self),
82
83            #[cfg(feature = "mssql")]
84            arguments::AnyArgumentBufferKind::Mssql(args, _) => args.add(self),
85
86            #[cfg(feature = "sqlite")]
87            arguments::AnyArgumentBufferKind::Sqlite(args) => args.add(self),
88
89            #[cfg(feature = "odbc")]
90            arguments::AnyArgumentBufferKind::Odbc(args, _) => {
91                let _ = <Option<T> as crate::encode::Encode<'q, crate::odbc::Odbc>>::encode_by_ref(
92                    self,
93                    &mut args.values,
94                );
95            }
96        }
97
98        // unused
99        crate::encode::IsNull::No
100    }
101}