You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by jc...@apache.org on 2018/06/28 22:45:47 UTC
calcite git commit: [CALCITE-2387] Fix for date/timestamp cast
expressions in Druid adapter
Repository: calcite
Updated Branches:
refs/heads/master a7e8fb84c -> 8a91c8dd4
[CALCITE-2387] Fix for date/timestamp cast expressions in Druid adapter
Project: http://git-wip-us.apache.org/repos/asf/calcite/repo
Commit: http://git-wip-us.apache.org/repos/asf/calcite/commit/8a91c8dd
Tree: http://git-wip-us.apache.org/repos/asf/calcite/tree/8a91c8dd
Diff: http://git-wip-us.apache.org/repos/asf/calcite/diff/8a91c8dd
Branch: refs/heads/master
Commit: 8a91c8dd4510f0741242f89c1a988e46036a2139
Parents: a7e8fb8
Author: Jesus Camacho Rodriguez <jc...@apache.org>
Authored: Thu Jun 28 13:07:10 2018 -0700
Committer: Jesus Camacho Rodriguez <jc...@apache.org>
Committed: Thu Jun 28 15:45:31 2018 -0700
----------------------------------------------------------------------
.../adapter/druid/DruidSqlCastConverter.java | 19 +++++++++++--------
.../org/apache/calcite/test/DruidAdapterIT2.java | 11 +++++++++++
2 files changed, 22 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/calcite/blob/8a91c8dd/druid/src/main/java/org/apache/calcite/adapter/druid/DruidSqlCastConverter.java
----------------------------------------------------------------------
diff --git a/druid/src/main/java/org/apache/calcite/adapter/druid/DruidSqlCastConverter.java b/druid/src/main/java/org/apache/calcite/adapter/druid/DruidSqlCastConverter.java
index def28c6..65a2ab4 100644
--- a/druid/src/main/java/org/apache/calcite/adapter/druid/DruidSqlCastConverter.java
+++ b/druid/src/main/java/org/apache/calcite/adapter/druid/DruidSqlCastConverter.java
@@ -56,16 +56,19 @@ public class DruidSqlCastConverter implements DruidSqlOperatorConverter {
final TimeZone timeZone = TimeZone.getTimeZone(timeZoneConf == null ? "UTC" : timeZoneConf);
final boolean nullEqualToEmpty = druidQuery.getConnectionConfig().nullEqualToEmpty();
- if (SqlTypeName.CHAR_TYPES.contains(fromType) && SqlTypeName.DATETIME_TYPES.contains(toType)) {
+ if (SqlTypeName.CHAR_TYPES.contains(fromType)
+ && SqlTypeName.DATETIME_TYPES.contains(toType)) {
//case chars to dates
- return castCharToDateTime(timeZone, operandExpression, toType,
- nullEqualToEmpty ? "" : null);
- } else if (SqlTypeName.DATETIME_TYPES.contains(fromType) && SqlTypeName.CHAR_TYPES.contains
- (toType)) {
+ return castCharToDateTime(toType == SqlTypeName.TIMESTAMP_WITH_LOCAL_TIME_ZONE
+ ? timeZone : DateTimeUtils.UTC_ZONE,
+ operandExpression, toType, nullEqualToEmpty ? "" : null);
+ } else if (SqlTypeName.DATETIME_TYPES.contains(fromType)
+ && SqlTypeName.CHAR_TYPES.contains(toType)) {
//case dates to chars
- return castDateTimeToChar(timeZone, operandExpression, fromType);
- } else if (toType == SqlTypeName.TIMESTAMP_WITH_LOCAL_TIME_ZONE
- && SqlTypeName.DATETIME_TYPES.contains(fromType)) {
+ return castDateTimeToChar(fromType == SqlTypeName.TIMESTAMP_WITH_LOCAL_TIME_ZONE
+ ? timeZone : DateTimeUtils.UTC_ZONE, operandExpression, fromType);
+ } else if (SqlTypeName.DATETIME_TYPES.contains(fromType)
+ && toType == SqlTypeName.TIMESTAMP_WITH_LOCAL_TIME_ZONE) {
if (timeZone.equals(DateTimeUtils.UTC_ZONE)) {
// bail out, internal representation is the same,
// we do not need to do anything
http://git-wip-us.apache.org/repos/asf/calcite/blob/8a91c8dd/druid/src/test/java/org/apache/calcite/test/DruidAdapterIT2.java
----------------------------------------------------------------------
diff --git a/druid/src/test/java/org/apache/calcite/test/DruidAdapterIT2.java b/druid/src/test/java/org/apache/calcite/test/DruidAdapterIT2.java
index c673c7c..97e9cc4 100644
--- a/druid/src/test/java/org/apache/calcite/test/DruidAdapterIT2.java
+++ b/druid/src/test/java/org/apache/calcite/test/DruidAdapterIT2.java
@@ -3969,6 +3969,17 @@ public class DruidAdapterIT2 {
"QUARTER"
));
}
+
+ @Test
+ public void testCastTimestamp() {
+ final String sql = "Select cast(cast(\"timestamp\" as timestamp) as varchar) as t"
+ + " from \"foodmart\" order by t limit 1";
+
+ sql(sql, FOODMART)
+ .returnsOrdered("T=1997-01-01 00:00:00")
+ .queryContains(
+ druidChecker("UTC"));
+ }
}
// End DruidAdapterIT2.java