From 22f3d6cae1d18f4ec071bd2e76d2c5447c3d2ba8 Mon Sep 17 00:00:00 2001 From: Austin Bonander Date: Fri, 15 Nov 2019 19:13:38 -0800 Subject: [PATCH] implement binary types for MariaDB --- src/mariadb/types/binary.rs | 38 +++++++++++++++++++++++++++++++++++++ src/mariadb/types/mod.rs | 1 + 2 files changed, 39 insertions(+) create mode 100644 src/mariadb/types/binary.rs diff --git a/src/mariadb/types/binary.rs b/src/mariadb/types/binary.rs new file mode 100644 index 00000000..adaf449f --- /dev/null +++ b/src/mariadb/types/binary.rs @@ -0,0 +1,38 @@ +use crate::{HasSqlType, MariaDb, ToSql, FromSql}; +use crate::mariadb::types::MariaDbTypeMetadata; +use crate::mariadb::protocol::{ParameterFlag, FieldType}; +use crate::serialize::IsNull; + +impl HasSqlType<[u8]> for MariaDb { + fn metadata() -> Self::Metadata { + MariaDbTypeMetadata { + field_type: FieldType::MYSQL_TYPE_BLOB, + param_flag: ParameterFlag::empty(), + } + } +} + +impl HasSqlType> for MariaDb { + fn metadata() -> Self::Metadata { + >::metadata() + } +} + +impl ToSql for [u8] { + fn to_sql(&self, buf: &mut Vec) -> IsNull { + buf.extend_from_slice(self); + IsNull::No + } +} + +impl ToSql for Vec { + fn to_sql(&self, buf: &mut Vec) -> IsNull { + <[u8] as ToSql>::to_sql(self, buf) + } +} + +impl FromSql for Vec { + fn from_sql(raw: Option<&[u8]>) -> Self { + raw.unwrap().into() + } +} diff --git a/src/mariadb/types/mod.rs b/src/mariadb/types/mod.rs index 66165979..2b0ca1ac 100644 --- a/src/mariadb/types/mod.rs +++ b/src/mariadb/types/mod.rs @@ -4,6 +4,7 @@ use crate::{ types::{HasTypeMetadata, TypeMetadata}, }; +pub mod binary; pub mod boolean; pub mod character; pub mod numeric;