From b59a93dfbcca1f2d734994130f93436846c7d1a0 Mon Sep 17 00:00:00 2001 From: discord9 <55937128+discord9@users.noreply.github.com> Date: Wed, 14 Aug 2024 11:11:44 +0800 Subject: [PATCH] chore: Helper function to convert `Vec` to VectorRef (#4546) * chore: `try_from_row_into_vector` helper * test: try_from_row * refactor: simplify with builder * fix: deicmal set prec&scale * refactor: more simplify * refactor: use ref --- src/datatypes/src/duration.rs | 18 ++++++++++ src/datatypes/src/interval.rs | 18 ++++++++++ src/datatypes/src/time.rs | 18 ++++++++++ src/datatypes/src/timestamp.rs | 18 ++++++++++ src/datatypes/src/vectors/helper.rs | 55 +++++++++++++++++++++++++++++ 5 files changed, 127 insertions(+) diff --git a/src/datatypes/src/duration.rs b/src/datatypes/src/duration.rs index af1a39da1f..e2e2440cc5 100644 --- a/src/datatypes/src/duration.rs +++ b/src/datatypes/src/duration.rs @@ -111,6 +111,24 @@ macro_rules! define_duration_with_unit { val.0.value() } } + + impl TryFrom for Option<[]> { + type Error = $crate::error::Error; + + #[inline] + fn try_from(from: Value) -> std::result::Result { + match from { + Value::Duration(v) if v.unit() == TimeUnit::$unit => { + Ok(Some([](v))) + }, + Value::Null => Ok(None), + _ => $crate::error::TryFromValueSnafu { + reason: format!("{:?} is not a {}", from, stringify!([])), + } + .fail(), + } + } + } } }; } diff --git a/src/datatypes/src/interval.rs b/src/datatypes/src/interval.rs index 3b80277fcc..c0969abc44 100644 --- a/src/datatypes/src/interval.rs +++ b/src/datatypes/src/interval.rs @@ -106,6 +106,24 @@ macro_rules! define_interval_with_unit { val.0.[]() } } + + impl TryFrom for Option<[]> { + type Error = $crate::error::Error; + + #[inline] + fn try_from(from: Value) -> std::result::Result { + match from { + Value::Interval(v) if v.unit() == common_time::interval::IntervalUnit::$unit => { + Ok(Some([](v))) + }, + Value::Null => Ok(None), + _ => $crate::error::TryFromValueSnafu { + reason: format!("{:?} is not a {}", from, stringify!([])), + } + .fail(), + } + } + } } }; } diff --git a/src/datatypes/src/time.rs b/src/datatypes/src/time.rs index 845e1dd25c..2b282af980 100644 --- a/src/datatypes/src/time.rs +++ b/src/datatypes/src/time.rs @@ -109,6 +109,24 @@ macro_rules! define_time_with_unit { val.0.value() } } + + impl TryFrom for Option<[