You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by jh...@apache.org on 2017/02/09 01:59:00 UTC

[3/3] calcite git commit: [CALCITE-1623] Make sure DATE, TIME and TIMESTAMP literals have Calendar with timezone UTC

[CALCITE-1623] Make sure DATE, TIME and TIMESTAMP literals have Calendar with timezone UTC


Project: http://git-wip-us.apache.org/repos/asf/calcite/repo
Commit: http://git-wip-us.apache.org/repos/asf/calcite/commit/a269a2b7
Tree: http://git-wip-us.apache.org/repos/asf/calcite/tree/a269a2b7
Diff: http://git-wip-us.apache.org/repos/asf/calcite/diff/a269a2b7

Branch: refs/heads/master
Commit: a269a2b783648f16be0bf721d4696e3d8bd7d958
Parents: 4f25714
Author: Julian Hyde <jh...@apache.org>
Authored: Wed Feb 8 13:26:59 2017 -0800
Committer: Julian Hyde <jh...@apache.org>
Committed: Wed Feb 8 14:27:41 2017 -0800

----------------------------------------------------------------------
 .../apache/calcite/plan/RelOptMaterializations.java |  1 +
 .../apache/calcite/rel/rules/DateRangeRules.java    |  4 ++--
 .../java/org/apache/calcite/rex/RexLiteral.java     | 16 +++++++++-------
 .../java/org/apache/calcite/sql/SqlDialect.java     |  4 ++--
 .../org/apache/calcite/rex/RexExecutorTest.java     |  5 +++--
 .../java/org/apache/calcite/test/CalciteAssert.java |  3 ++-
 .../java/org/apache/calcite/test/SqlLimitsTest.java |  4 ++--
 .../calcite/adapter/druid/DruidConnectionImpl.java  |  4 +++-
 .../apache/calcite/adapter/csv/CsvEnumerator.java   |  2 +-
 9 files changed, 25 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/calcite/blob/a269a2b7/core/src/main/java/org/apache/calcite/plan/RelOptMaterializations.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/plan/RelOptMaterializations.java b/core/src/main/java/org/apache/calcite/plan/RelOptMaterializations.java
index 7778122..1e3a9e9 100644
--- a/core/src/main/java/org/apache/calcite/plan/RelOptMaterializations.java
+++ b/core/src/main/java/org/apache/calcite/plan/RelOptMaterializations.java
@@ -231,4 +231,5 @@ public abstract class RelOptMaterializations {
     return false;
   }
 }
+
 // End RelOptMaterializations.java

http://git-wip-us.apache.org/repos/asf/calcite/blob/a269a2b7/core/src/main/java/org/apache/calcite/rel/rules/DateRangeRules.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/DateRangeRules.java b/core/src/main/java/org/apache/calcite/rel/rules/DateRangeRules.java
index cd59787..9fc71b8 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/DateRangeRules.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/DateRangeRules.java
@@ -16,6 +16,7 @@
  */
 package org.apache.calcite.rel.rules;
 
+import org.apache.calcite.avatica.util.DateTimeUtils;
 import org.apache.calcite.avatica.util.TimeUnitRange;
 import org.apache.calcite.plan.RelOptRule;
 import org.apache.calcite.plan.RelOptRuleCall;
@@ -53,7 +54,6 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.TimeZone;
 
 /**
  * Collection of planner rules that convert
@@ -251,7 +251,7 @@ public abstract class DateRangeRules {
         final Calendar c;
         switch (timeUnit) {
         case YEAR:
-          c = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
+          c = Calendar.getInstance(DateTimeUtils.GMT_ZONE);
           c.clear();
           c.set(v, Calendar.JANUARY, 1);
           s2.add(baz(timeUnit, comparison, c));

http://git-wip-us.apache.org/repos/asf/calcite/blob/a269a2b7/core/src/main/java/org/apache/calcite/rex/RexLiteral.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rex/RexLiteral.java b/core/src/main/java/org/apache/calcite/rex/RexLiteral.java
index 1d1e14d..5bfd08e 100644
--- a/core/src/main/java/org/apache/calcite/rex/RexLiteral.java
+++ b/core/src/main/java/org/apache/calcite/rex/RexLiteral.java
@@ -35,6 +35,8 @@ import org.apache.calcite.util.ZonelessDatetime;
 import org.apache.calcite.util.ZonelessTime;
 import org.apache.calcite.util.ZonelessTimestamp;
 
+import com.google.common.base.Preconditions;
+
 import java.io.PrintWriter;
 import java.io.StringWriter;
 import java.math.BigDecimal;
@@ -169,13 +171,12 @@ public class RexLiteral extends RexNode {
       Comparable value,
       RelDataType type,
       SqlTypeName typeName) {
-    assert type != null;
-    assert value == null || valueMatchesType(value, typeName, true);
-    assert (value == null) == type.isNullable();
-    assert typeName != SqlTypeName.ANY;
     this.value = value;
-    this.type = type;
-    this.typeName = typeName;
+    this.type = Preconditions.checkNotNull(type);
+    this.typeName = Preconditions.checkNotNull(typeName);
+    Preconditions.checkArgument(valueMatchesType(value, typeName, true));
+    Preconditions.checkArgument((value == null) == type.isNullable());
+    Preconditions.checkArgument(typeName != SqlTypeName.ANY);
     this.digest = toJavaString(value, typeName);
   }
 
@@ -214,7 +215,8 @@ public class RexLiteral extends RexNode {
     case DATE:
     case TIME:
     case TIMESTAMP:
-      return value instanceof Calendar;
+      return value instanceof Calendar
+          && ((Calendar) value).getTimeZone().equals(DateTimeUtils.GMT_ZONE);
     case INTERVAL_YEAR:
     case INTERVAL_YEAR_MONTH:
     case INTERVAL_MONTH:

http://git-wip-us.apache.org/repos/asf/calcite/blob/a269a2b7/core/src/main/java/org/apache/calcite/sql/SqlDialect.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/sql/SqlDialect.java b/core/src/main/java/org/apache/calcite/sql/SqlDialect.java
index 88e7f51..d3ea0f7 100644
--- a/core/src/main/java/org/apache/calcite/sql/SqlDialect.java
+++ b/core/src/main/java/org/apache/calcite/sql/SqlDialect.java
@@ -16,6 +16,7 @@
  */
 package org.apache.calcite.sql;
 
+import org.apache.calcite.avatica.util.DateTimeUtils;
 import org.apache.calcite.config.NullCollation;
 import org.apache.calcite.rel.RelFieldCollation;
 
@@ -26,7 +27,6 @@ import java.sql.SQLException;
 import java.sql.Timestamp;
 import java.text.SimpleDateFormat;
 import java.util.List;
-import java.util.TimeZone;
 import java.util.regex.Pattern;
 
 /**
@@ -471,7 +471,7 @@ public class SqlDialect {
     final SimpleDateFormat format =
         new SimpleDateFormat(
             "'TIMESTAMP' ''yyyy-MM-DD HH:mm:SS''");
-    format.setTimeZone(TimeZone.getTimeZone("GMT"));
+    format.setTimeZone(DateTimeUtils.GMT_ZONE);
     return format.format(timestamp);
   }
 

http://git-wip-us.apache.org/repos/asf/calcite/blob/a269a2b7/core/src/test/java/org/apache/calcite/rex/RexExecutorTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/calcite/rex/RexExecutorTest.java b/core/src/test/java/org/apache/calcite/rex/RexExecutorTest.java
index 60de81c..cd453cd 100644
--- a/core/src/test/java/org/apache/calcite/rex/RexExecutorTest.java
+++ b/core/src/test/java/org/apache/calcite/rex/RexExecutorTest.java
@@ -19,6 +19,7 @@ package org.apache.calcite.rex;
 import org.apache.calcite.DataContext;
 import org.apache.calcite.adapter.java.JavaTypeFactory;
 import org.apache.calcite.avatica.util.ByteString;
+import org.apache.calcite.avatica.util.DateTimeUtils;
 import org.apache.calcite.linq4j.QueryProvider;
 import org.apache.calcite.plan.RelOptCluster;
 import org.apache.calcite.plan.RelOptSchema;
@@ -158,7 +159,7 @@ public class RexExecutorTest {
     checkConstant(true,
         new Function<RexBuilder, RexNode>() {
           public RexNode apply(RexBuilder rexBuilder) {
-            Calendar calendar = Calendar.getInstance();
+            Calendar calendar = Calendar.getInstance(DateTimeUtils.GMT_ZONE);
             return rexBuilder.makeCall(SqlStdOperatorTable.LESS_THAN_OR_EQUAL,
                 rexBuilder.makeDateLiteral(calendar),
                 rexBuilder.makeDateLiteral(calendar));
@@ -168,7 +169,7 @@ public class RexExecutorTest {
     checkConstant(false,
         new Function<RexBuilder, RexNode>() {
           public RexNode apply(RexBuilder rexBuilder) {
-            Calendar calendar = Calendar.getInstance();
+            Calendar calendar = Calendar.getInstance(DateTimeUtils.GMT_ZONE);
             return rexBuilder.makeCall(SqlStdOperatorTable.LESS_THAN,
                 rexBuilder.makeDateLiteral(calendar),
                 rexBuilder.makeDateLiteral(calendar));

http://git-wip-us.apache.org/repos/asf/calcite/blob/a269a2b7/core/src/test/java/org/apache/calcite/test/CalciteAssert.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/calcite/test/CalciteAssert.java b/core/src/test/java/org/apache/calcite/test/CalciteAssert.java
index c430d7b..fad0812 100644
--- a/core/src/test/java/org/apache/calcite/test/CalciteAssert.java
+++ b/core/src/test/java/org/apache/calcite/test/CalciteAssert.java
@@ -20,6 +20,7 @@ import org.apache.calcite.DataContext;
 import org.apache.calcite.adapter.clone.CloneSchema;
 import org.apache.calcite.adapter.java.ReflectiveSchema;
 import org.apache.calcite.adapter.jdbc.JdbcSchema;
+import org.apache.calcite.avatica.util.DateTimeUtils;
 import org.apache.calcite.config.CalciteConnectionProperty;
 import org.apache.calcite.config.Lex;
 import org.apache.calcite.jdbc.CalciteConnection;
@@ -123,7 +124,7 @@ public class CalciteAssert {
   private static final DateFormat UTC_TIME_FORMAT;
   private static final DateFormat UTC_TIMESTAMP_FORMAT;
   static {
-    final TimeZone utc = TimeZone.getTimeZone("UTC");
+    final TimeZone utc = DateTimeUtils.GMT_ZONE;
     UTC_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd");
     UTC_DATE_FORMAT.setTimeZone(utc);
     UTC_TIME_FORMAT = new SimpleDateFormat("HH:mm:ss");

http://git-wip-us.apache.org/repos/asf/calcite/blob/a269a2b7/core/src/test/java/org/apache/calcite/test/SqlLimitsTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/calcite/test/SqlLimitsTest.java b/core/src/test/java/org/apache/calcite/test/SqlLimitsTest.java
index 7ca1d60..c8d44ce 100644
--- a/core/src/test/java/org/apache/calcite/test/SqlLimitsTest.java
+++ b/core/src/test/java/org/apache/calcite/test/SqlLimitsTest.java
@@ -16,6 +16,7 @@
  */
 package org.apache.calcite.test;
 
+import org.apache.calcite.avatica.util.DateTimeUtils;
 import org.apache.calcite.jdbc.JavaTypeFactoryImpl;
 import org.apache.calcite.rel.type.RelDataType;
 import org.apache.calcite.rel.type.RelDataTypeFactory;
@@ -38,7 +39,6 @@ import java.text.SimpleDateFormat;
 import java.util.Calendar;
 import java.util.List;
 import java.util.Locale;
-import java.util.TimeZone;
 
 /**
  * Unit test for SQL limits.
@@ -195,7 +195,7 @@ public class SqlLimitsTest {
     } else if (o instanceof Calendar) {
       Calendar calendar = (Calendar) o;
       DateFormat dateFormat = getDateFormat(type.getSqlTypeName());
-      dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
+      dateFormat.setTimeZone(DateTimeUtils.GMT_ZONE);
       s = dateFormat.format(calendar.getTime());
     } else {
       s = o.toString();

http://git-wip-us.apache.org/repos/asf/calcite/blob/a269a2b7/druid/src/main/java/org/apache/calcite/adapter/druid/DruidConnectionImpl.java
----------------------------------------------------------------------
diff --git a/druid/src/main/java/org/apache/calcite/adapter/druid/DruidConnectionImpl.java b/druid/src/main/java/org/apache/calcite/adapter/druid/DruidConnectionImpl.java
index 536421d..d7f54fa 100644
--- a/druid/src/main/java/org/apache/calcite/adapter/druid/DruidConnectionImpl.java
+++ b/druid/src/main/java/org/apache/calcite/adapter/druid/DruidConnectionImpl.java
@@ -18,6 +18,7 @@ package org.apache.calcite.adapter.druid;
 
 import org.apache.calcite.avatica.AvaticaUtils;
 import org.apache.calcite.avatica.ColumnMetaData;
+import org.apache.calcite.avatica.util.DateTimeUtils;
 import org.apache.calcite.interpreter.Row;
 import org.apache.calcite.interpreter.Sink;
 import org.apache.calcite.linq4j.AbstractEnumerable;
@@ -36,6 +37,7 @@ import com.fasterxml.jackson.core.JsonToken;
 import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.type.CollectionType;
+
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
@@ -68,7 +70,7 @@ class DruidConnectionImpl implements DruidConnection {
   private static final SimpleDateFormat UTC_TIMESTAMP_FORMAT;
 
   static {
-    final TimeZone utc = TimeZone.getTimeZone("UTC");
+    final TimeZone utc = DateTimeUtils.GMT_ZONE;
     UTC_TIMESTAMP_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
     UTC_TIMESTAMP_FORMAT.setTimeZone(utc);
   }

http://git-wip-us.apache.org/repos/asf/calcite/blob/a269a2b7/example/csv/src/main/java/org/apache/calcite/adapter/csv/CsvEnumerator.java
----------------------------------------------------------------------
diff --git a/example/csv/src/main/java/org/apache/calcite/adapter/csv/CsvEnumerator.java b/example/csv/src/main/java/org/apache/calcite/adapter/csv/CsvEnumerator.java
index 25a3c38..c43ce39 100644
--- a/example/csv/src/main/java/org/apache/calcite/adapter/csv/CsvEnumerator.java
+++ b/example/csv/src/main/java/org/apache/calcite/adapter/csv/CsvEnumerator.java
@@ -57,7 +57,7 @@ class CsvEnumerator<E> implements Enumerator<E> {
   private static final FastDateFormat TIME_FORMAT_TIMESTAMP;
 
   static {
-    TimeZone gmt = TimeZone.getTimeZone("GMT");
+    final TimeZone gmt = TimeZone.getTimeZone("GMT");
     TIME_FORMAT_DATE = FastDateFormat.getInstance("yyyy-MM-dd", gmt);
     TIME_FORMAT_TIME = FastDateFormat.getInstance("HH:mm:ss", gmt);
     TIME_FORMAT_TIMESTAMP =