This is an automated email from the ASF dual-hosted git repository.
alamb pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/datafusion.git
The following commit(s) were added to refs/heads/main by this push:
new 49b9351871 Support timestamp(n) type (#13231)
49b9351871 is described below
commit 49b9351871afe313fa3758c0831eeedfe2582896
Author: Piotr Findeisen <[email protected]>
AuthorDate: Mon Nov 4 20:26:45 2024 +0100
Support timestamp(n) type (#13231)
---
datafusion/sql/src/planner.rs | 16 ++++++++---
datafusion/sqllogictest/test_files/timestamps.slt | 35 +++++++++++++++++++++++
2 files changed, 47 insertions(+), 4 deletions(-)
diff --git a/datafusion/sql/src/planner.rs b/datafusion/sql/src/planner.rs
index 072d2320fc..4d44d5ff25 100644
--- a/datafusion/sql/src/planner.rs
+++ b/datafusion/sql/src/planner.rs
@@ -454,7 +454,8 @@ impl<'a, S: ContextProvider> SqlToRel<'a, S> {
SQLDataType::Char(_)
| SQLDataType::Text
| SQLDataType::String(_) => Ok(DataType::Utf8),
- SQLDataType::Timestamp(None, tz_info) => {
+ SQLDataType::Timestamp(precision, tz_info)
+ if precision.is_none() || [0, 3, 6,
9].contains(&precision.unwrap()) => {
let tz = if matches!(tz_info, TimezoneInfo::Tz)
|| matches!(tz_info, TimezoneInfo::WithTimeZone)
{
@@ -466,7 +467,14 @@ impl<'a, S: ContextProvider> SqlToRel<'a, S> {
// Timestamp Without Time zone
None
};
- Ok(DataType::Timestamp(TimeUnit::Nanosecond,
tz.map(Into::into)))
+ let precision = match precision {
+ Some(0) => TimeUnit::Second,
+ Some(3) => TimeUnit::Millisecond,
+ Some(6) => TimeUnit::Microsecond,
+ None | Some(9) => TimeUnit::Nanosecond,
+ _ => unreachable!(),
+ };
+ Ok(DataType::Timestamp(precision, tz.map(Into::into)))
}
SQLDataType::Date => Ok(DataType::Date32),
SQLDataType::Time(None, tz_info) => {
@@ -535,8 +543,8 @@ impl<'a, S: ContextProvider> SqlToRel<'a, S> {
| SQLDataType::CharVarying(_)
| SQLDataType::CharacterLargeObject(_)
| SQLDataType::CharLargeObject(_)
- // Precision is not supported
- | SQLDataType::Timestamp(Some(_), _)
+ // Unsupported precision
+ | SQLDataType::Timestamp(_, _)
// Precision is not supported
| SQLDataType::Time(Some(_), _)
| SQLDataType::Dec(_)
diff --git a/datafusion/sqllogictest/test_files/timestamps.slt
b/datafusion/sqllogictest/test_files/timestamps.slt
index 42abeff674..70f7dedeac 100644
--- a/datafusion/sqllogictest/test_files/timestamps.slt
+++ b/datafusion/sqllogictest/test_files/timestamps.slt
@@ -425,6 +425,41 @@ SELECT COUNT(*) FROM ts_data_secs where ts >
from_unixtime(1599566400)
----
2
+query P rowsort
+SELECT ts FROM ts_data_nanos;
+----
+2020-09-08T11:42:29.190855123
+2020-09-08T12:42:29.190855123
+2020-09-08T13:42:29.190855123
+
+query P rowsort
+SELECT CAST(ts AS timestamp(0)) FROM ts_data_nanos;
+----
+2020-09-08T11:42:29
+2020-09-08T12:42:29
+2020-09-08T13:42:29
+
+query P rowsort
+SELECT CAST(ts AS timestamp(3)) FROM ts_data_nanos;
+----
+2020-09-08T11:42:29.190
+2020-09-08T12:42:29.190
+2020-09-08T13:42:29.190
+
+query P rowsort
+SELECT CAST(ts AS timestamp(6)) FROM ts_data_nanos;
+----
+2020-09-08T11:42:29.190855
+2020-09-08T12:42:29.190855
+2020-09-08T13:42:29.190855
+
+query P rowsort
+SELECT CAST(ts AS timestamp(9)) FROM ts_data_nanos;
+----
+2020-09-08T11:42:29.190855123
+2020-09-08T12:42:29.190855123
+2020-09-08T13:42:29.190855123
+
# count_distinct_timestamps
query P rowsort
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]