sqlx_core_oldapi/mssql/
value.rs1use crate::error::{BoxDynError, UnexpectedNullError};
2use crate::mssql::{Mssql, MssqlTypeInfo};
3use crate::value::{Value, ValueRef};
4use bytes::Bytes;
5use std::borrow::Cow;
6
7#[derive(Clone, Debug)]
9pub struct MssqlValueRef<'r> {
10 pub(crate) type_info: MssqlTypeInfo,
11 pub(crate) data: Option<&'r Bytes>,
12}
13
14impl<'r> MssqlValueRef<'r> {
15 pub(crate) fn as_bytes(&self) -> Result<&'r [u8], BoxDynError> {
16 match &self.data {
17 Some(v) => Ok(v),
18 None => Err(UnexpectedNullError.into()),
19 }
20 }
21}
22
23impl ValueRef<'_> for MssqlValueRef<'_> {
24 type Database = Mssql;
25
26 fn to_owned(&self) -> MssqlValue {
27 MssqlValue {
28 data: self.data.cloned(),
29 type_info: self.type_info.clone(),
30 }
31 }
32
33 fn type_info(&self) -> Cow<'_, MssqlTypeInfo> {
34 Cow::Borrowed(&self.type_info)
35 }
36
37 fn is_null(&self) -> bool {
38 self.data.is_none() || self.type_info.0.is_null()
39 }
40}
41
42#[cfg(feature = "any")]
43impl<'r> From<MssqlValueRef<'r>> for crate::any::AnyValueRef<'r> {
44 #[inline]
45 fn from(value: MssqlValueRef<'r>) -> Self {
46 crate::any::AnyValueRef {
47 type_info: value.type_info.clone().into(),
48 kind: crate::any::value::AnyValueRefKind::Mssql(value),
49 }
50 }
51}
52
53#[derive(Clone)]
55pub struct MssqlValue {
56 pub(crate) type_info: MssqlTypeInfo,
57 pub(crate) data: Option<Bytes>,
58}
59
60impl Value for MssqlValue {
61 type Database = Mssql;
62
63 fn as_ref(&self) -> MssqlValueRef<'_> {
64 MssqlValueRef {
65 data: self.data.as_ref(),
66 type_info: self.type_info.clone(),
67 }
68 }
69
70 fn type_info(&self) -> Cow<'_, MssqlTypeInfo> {
71 Cow::Borrowed(&self.type_info)
72 }
73
74 fn is_null(&self) -> bool {
75 self.data.is_none() || self.type_info.0.is_null()
76 }
77}
78
79#[cfg(feature = "any")]
80impl From<MssqlValue> for crate::any::AnyValue {
81 #[inline]
82 fn from(value: MssqlValue) -> Self {
83 crate::any::AnyValue {
84 type_info: value.type_info.clone().into(),
85 kind: crate::any::value::AnyValueKind::Mssql(value),
86 }
87 }
88}