From 160f345f4f850f06c0250d16876dc68d5f366aaa Mon Sep 17 00:00:00 2001 From: Arttu Liimola Date: Wed, 16 Feb 2022 07:12:02 +0200 Subject: [PATCH] Fix Option for Any driver. (#1661) With macro impl_encode_for_option Null values are not added, when creating arguments for the actual driver selected at runtime. --- sqlx-core/src/any/mod.rs | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/sqlx-core/src/any/mod.rs b/sqlx-core/src/any/mod.rs index 9dd7fea9..e37b8e23 100644 --- a/sqlx-core/src/any/mod.rs +++ b/sqlx-core/src/any/mod.rs @@ -61,4 +61,26 @@ impl_column_index_for_statement!(AnyStatement); impl_into_maybe_pool!(Any, AnyConnection); // required because some databases have a different handling of NULL -impl_encode_for_option!(Any); +impl<'q, T> crate::encode::Encode<'q, Any> for Option +where + T: AnyEncode<'q> + 'q, +{ + fn encode_by_ref(&self, buf: &mut AnyArgumentBuffer<'q>) -> crate::encode::IsNull { + match &mut buf.0 { + #[cfg(feature = "postgres")] + arguments::AnyArgumentBufferKind::Postgres(args, _) => args.add(self), + + #[cfg(feature = "mysql")] + arguments::AnyArgumentBufferKind::MySql(args, _) => args.add(self), + + #[cfg(feature = "mssql")] + arguments::AnyArgumentBufferKind::Mssql(args, _) => args.add(self), + + #[cfg(feature = "sqlite")] + arguments::AnyArgumentBufferKind::Sqlite(args) => args.add(self), + } + + // unused + crate::encode::IsNull::No + } +}