You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by vi...@apache.org on 2023/09/25 04:53:37 UTC

[arrow-datafusion] branch main updated: Minor: remove unecessary Arcs in datetime_expressions (#7630)

This is an automated email from the ASF dual-hosted git repository.

viirya pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-datafusion.git


The following commit(s) were added to refs/heads/main by this push:
     new 8f3fdabf1c Minor: remove unecessary Arcs in datetime_expressions (#7630)
8f3fdabf1c is described below

commit 8f3fdabf1cc8140c80e3dcf29c409afbf038c6f6
Author: Andrew Lamb <an...@nerdnetworks.org>
AuthorDate: Mon Sep 25 00:53:30 2023 -0400

    Minor: remove unecessary Arcs in datetime_expressions (#7630)
---
 .../physical-expr/src/datetime_expressions.rs      | 62 ++++++++--------------
 1 file changed, 23 insertions(+), 39 deletions(-)

diff --git a/datafusion/physical-expr/src/datetime_expressions.rs b/datafusion/physical-expr/src/datetime_expressions.rs
index 263b46192e..5ce71f4584 100644
--- a/datafusion/physical-expr/src/datetime_expressions.rs
+++ b/datafusion/physical-expr/src/datetime_expressions.rs
@@ -295,15 +295,15 @@ fn _date_trunc_coarse_without_tz(
 /// epoch, for granularities greater than 1 second, in taking into
 /// account that some granularities are not uniform durations of time
 /// (e.g. months are not always the same lengths, leap seconds, etc)
-fn date_trunc_coarse(granularity: &str, value: i64, tz: Arc<Option<Tz>>) -> Result<i64> {
-    let value = match tz.as_ref() {
+fn date_trunc_coarse(granularity: &str, value: i64, tz: Option<Tz>) -> Result<i64> {
+    let value = match tz {
         Some(tz) => {
             // Use chrono DateTime<Tz> to clear the various fields because need to clear per timezone,
             // and NaiveDateTime (ISO 8601) has no concept of timezones
-            let value = as_datetime_with_timezone::<TimestampNanosecondType>(value, *tz)
+            let value = as_datetime_with_timezone::<TimestampNanosecondType>(value, tz)
                 .ok_or(DataFusionError::Execution(format!(
-                    "Timestamp {value} out of range"
-                )))?;
+                "Timestamp {value} out of range"
+            )))?;
             _date_trunc_coarse_with_tz(granularity, Some(value))
         }
         None => {
@@ -323,7 +323,7 @@ fn date_trunc_coarse(granularity: &str, value: i64, tz: Arc<Option<Tz>>) -> Resu
 fn _date_trunc(
     tu: TimeUnit,
     value: &Option<i64>,
-    tz: Arc<Option<Tz>>,
+    tz: Option<Tz>,
     granularity: &str,
 ) -> Result<Option<i64>, DataFusionError> {
     let scale = match tu {
@@ -391,45 +391,29 @@ pub fn date_trunc(args: &[ColumnarValue]) -> Result<ColumnarValue> {
     Ok(match array {
         ColumnarValue::Scalar(ScalarValue::TimestampNanosecond(v, tz_opt)) => {
             let parsed_tz = parse_tz(tz_opt)?;
-            let value = _date_trunc(
-                TimeUnit::Nanosecond,
-                v,
-                Arc::new(parsed_tz),
-                granularity.as_str(),
-            )?;
+            let value =
+                _date_trunc(TimeUnit::Nanosecond, v, parsed_tz, granularity.as_str())?;
             let value = ScalarValue::TimestampNanosecond(value, tz_opt.clone());
             ColumnarValue::Scalar(value)
         }
         ColumnarValue::Scalar(ScalarValue::TimestampMicrosecond(v, tz_opt)) => {
             let parsed_tz = parse_tz(tz_opt)?;
-            let value = _date_trunc(
-                TimeUnit::Microsecond,
-                v,
-                Arc::new(parsed_tz),
-                granularity.as_str(),
-            )?;
+            let value =
+                _date_trunc(TimeUnit::Microsecond, v, parsed_tz, granularity.as_str())?;
             let value = ScalarValue::TimestampMicrosecond(value, tz_opt.clone());
             ColumnarValue::Scalar(value)
         }
         ColumnarValue::Scalar(ScalarValue::TimestampMillisecond(v, tz_opt)) => {
             let parsed_tz = parse_tz(tz_opt)?;
-            let value = _date_trunc(
-                TimeUnit::Millisecond,
-                v,
-                Arc::new(parsed_tz),
-                granularity.as_str(),
-            )?;
+            let value =
+                _date_trunc(TimeUnit::Millisecond, v, parsed_tz, granularity.as_str())?;
             let value = ScalarValue::TimestampMillisecond(value, tz_opt.clone());
             ColumnarValue::Scalar(value)
         }
         ColumnarValue::Scalar(ScalarValue::TimestampSecond(v, tz_opt)) => {
             let parsed_tz = parse_tz(tz_opt)?;
-            let value = _date_trunc(
-                TimeUnit::Second,
-                v,
-                Arc::new(parsed_tz),
-                granularity.as_str(),
-            )?;
+            let value =
+                _date_trunc(TimeUnit::Second, v, parsed_tz, granularity.as_str())?;
             let value = ScalarValue::TimestampSecond(value, tz_opt.clone());
             ColumnarValue::Scalar(value)
         }
@@ -437,7 +421,7 @@ pub fn date_trunc(args: &[ColumnarValue]) -> Result<ColumnarValue> {
             let array_type = array.data_type();
             match array_type {
                 DataType::Timestamp(TimeUnit::Second, tz_opt) => {
-                    let parsed_tz = Arc::new(parse_tz(tz_opt)?);
+                    let parsed_tz = parse_tz(tz_opt)?;
                     let array = as_timestamp_second_array(array)?;
                     let array = array
                         .iter()
@@ -445,7 +429,7 @@ pub fn date_trunc(args: &[ColumnarValue]) -> Result<ColumnarValue> {
                             _date_trunc(
                                 TimeUnit::Second,
                                 &x,
-                                parsed_tz.clone(),
+                                parsed_tz,
                                 granularity.as_str(),
                             )
                         })
@@ -453,7 +437,7 @@ pub fn date_trunc(args: &[ColumnarValue]) -> Result<ColumnarValue> {
                     ColumnarValue::Array(Arc::new(array))
                 }
                 DataType::Timestamp(TimeUnit::Millisecond, tz_opt) => {
-                    let parsed_tz = Arc::new(parse_tz(tz_opt)?);
+                    let parsed_tz = parse_tz(tz_opt)?;
                     let array = as_timestamp_millisecond_array(array)?;
                     let array = array
                         .iter()
@@ -461,7 +445,7 @@ pub fn date_trunc(args: &[ColumnarValue]) -> Result<ColumnarValue> {
                             _date_trunc(
                                 TimeUnit::Millisecond,
                                 &x,
-                                parsed_tz.clone(),
+                                parsed_tz,
                                 granularity.as_str(),
                             )
                         })
@@ -469,7 +453,7 @@ pub fn date_trunc(args: &[ColumnarValue]) -> Result<ColumnarValue> {
                     ColumnarValue::Array(Arc::new(array))
                 }
                 DataType::Timestamp(TimeUnit::Microsecond, tz_opt) => {
-                    let parsed_tz = Arc::new(parse_tz(tz_opt)?);
+                    let parsed_tz = parse_tz(tz_opt)?;
                     let array = as_timestamp_microsecond_array(array)?;
                     let array = array
                         .iter()
@@ -477,7 +461,7 @@ pub fn date_trunc(args: &[ColumnarValue]) -> Result<ColumnarValue> {
                             _date_trunc(
                                 TimeUnit::Microsecond,
                                 &x,
-                                parsed_tz.clone(),
+                                parsed_tz,
                                 granularity.as_str(),
                             )
                         })
@@ -485,7 +469,7 @@ pub fn date_trunc(args: &[ColumnarValue]) -> Result<ColumnarValue> {
                     ColumnarValue::Array(Arc::new(array))
                 }
                 _ => {
-                    let parsed_tz = Arc::new(None);
+                    let parsed_tz = None;
                     let array = as_timestamp_nanosecond_array(array)?;
                     let array = array
                         .iter()
@@ -493,7 +477,7 @@ pub fn date_trunc(args: &[ColumnarValue]) -> Result<ColumnarValue> {
                             _date_trunc(
                                 TimeUnit::Nanosecond,
                                 &x,
-                                parsed_tz.clone(),
+                                parsed_tz,
                                 granularity.as_str(),
                             )
                         })
@@ -1062,7 +1046,7 @@ mod tests {
         cases.iter().for_each(|(original, granularity, expected)| {
             let left = string_to_timestamp_nanos(original).unwrap();
             let right = string_to_timestamp_nanos(expected).unwrap();
-            let result = date_trunc_coarse(granularity, left, Arc::new(None)).unwrap();
+            let result = date_trunc_coarse(granularity, left, None).unwrap();
             assert_eq!(result, right, "{original} = {expected}");
         });
     }