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 =