[ 
https://issues.apache.org/jira/browse/BEAM-6001?focusedWorklogId=163288&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-163288
 ]

ASF GitHub Bot logged work on BEAM-6001:
----------------------------------------

                Author: ASF GitHub Bot
            Created on: 07/Nov/18 00:32
            Start Date: 07/Nov/18 00:32
    Worklog Time Spent: 10m 
      Work Description: akedin closed pull request #6968: [BEAM-6001] Fix DATE 
- INTERVAL and test DATE +/- INTERVAL.
URL: https://github.com/apache/beam/pull/6968
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git 
a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/BeamSqlFnExecutor.java
 
b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/BeamSqlFnExecutor.java
index ccda06e0433..ebff981711c 100644
--- 
a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/BeamSqlFnExecutor.java
+++ 
b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/BeamSqlFnExecutor.java
@@ -167,9 +167,7 @@ private static BeamSqlExpression 
getBeamSqlExpression(RexNode rexNode) {
         // it to string explicitly.
         ret = BeamSqlPrimitive.of(type, ((NlsString) value).getValue());
       } else if (isDateNode(type, value)) {
-        // does this actually make sense?
-        // Calcite actually treat Calendar as the java type of Date Literal
-        ret = BeamSqlPrimitive.of(type, new DateTime(((Calendar) 
value).getTimeInMillis()));
+        ret = BeamSqlPrimitive.of(type, new DateTime(value));
       } else {
         // node.getTypeName().getSqlTypeName() and node.getSqlTypeName() can 
be different
         // e.g. sql: "select 1"
diff --git 
a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/date/BeamSqlDatetimeMinusIntervalExpression.java
 
b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/date/BeamSqlDatetimeMinusIntervalExpression.java
index 89de27c8e61..cc3c75a15e0 100644
--- 
a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/date/BeamSqlDatetimeMinusIntervalExpression.java
+++ 
b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/date/BeamSqlDatetimeMinusIntervalExpression.java
@@ -43,7 +43,7 @@ public boolean accept() {
 
   static boolean accept(List<BeamSqlExpression> operands, SqlTypeName 
outputType) {
     return operands.size() == 2
-        && SqlTypeName.TIMESTAMP.equals(outputType)
+        && (SqlTypeName.TIMESTAMP.equals(outputType) || 
SqlTypeName.DATE.equals(outputType))
         && SqlTypeName.DATETIME_TYPES.contains(operands.get(0).getOutputType())
         && 
TimeUnitUtils.INTERVALS_DURATIONS_TYPES.containsKey(operands.get(1).getOutputType());
   }
diff --git 
a/sdks/java/extensions/sql/src/test/java/org/apache/beam/sdk/extensions/sql/BeamSqlDslSqlStdOperatorsTest.java
 
b/sdks/java/extensions/sql/src/test/java/org/apache/beam/sdk/extensions/sql/BeamSqlDslSqlStdOperatorsTest.java
index ebca6afa24d..35f265ab535 100644
--- 
a/sdks/java/extensions/sql/src/test/java/org/apache/beam/sdk/extensions/sql/BeamSqlDslSqlStdOperatorsTest.java
+++ 
b/sdks/java/extensions/sql/src/test/java/org/apache/beam/sdk/extensions/sql/BeamSqlDslSqlStdOperatorsTest.java
@@ -581,7 +581,7 @@ public void testMax() {
             .addExpr("MAX(c_float)", 3.0f)
             .addExpr("MAX(c_double)", 3.0)
             .addExpr("MAX(c_decimal)", BigDecimal.valueOf(3.0))
-            .addExpr("MAX(ts)", parseDate("1986-04-15 11:35:26"));
+            .addExpr("MAX(ts)", parseTimestamp("1986-04-15 11:35:26"));
     checker.buildRunAndCheck(getAggregationTestPCollection());
   }
 
@@ -597,7 +597,7 @@ public void testMin() {
             .addExpr("MIN(c_float)", 1.0f)
             .addExpr("MIN(c_double)", 1.0)
             .addExpr("MIN(c_decimal)", BigDecimal.valueOf(1.0))
-            .addExpr("MIN(ts)", parseDate("1986-02-15 11:35:26"));
+            .addExpr("MIN(ts)", parseTimestamp("1986-02-15 11:35:26"));
     checker.buildRunAndCheck(getAggregationTestPCollection());
   }
 
@@ -1117,8 +1117,8 @@ public void testBasicDateTimeFunctions() {
   public void testFloor() {
     ExpressionChecker checker =
         new ExpressionChecker()
-            .addExpr("FLOOR(ts TO MONTH)", parseDate("1986-02-01 00:00:00"))
-            .addExpr("FLOOR(ts TO YEAR)", parseDate("1986-01-01 00:00:00"))
+            .addExpr("FLOOR(ts TO MONTH)", parseTimestamp("1986-02-01 
00:00:00"))
+            .addExpr("FLOOR(ts TO YEAR)", parseTimestamp("1986-01-01 
00:00:00"))
             .addExpr("FLOOR(c_double)", 1.0);
 
     checker.buildRunAndCheck(getFloorCeilingTestPCollection());
@@ -1130,8 +1130,8 @@ public void testFloor() {
   public void testCeil() {
     ExpressionChecker checker =
         new ExpressionChecker()
-            .addExpr("CEIL(ts TO MONTH)", parseDate("1986-03-01 00:00:00"))
-            .addExpr("CEIL(ts TO YEAR)", parseDate("1987-01-01 00:00:00"))
+            .addExpr("CEIL(ts TO MONTH)", parseTimestamp("1986-03-01 
00:00:00"))
+            .addExpr("CEIL(ts TO YEAR)", parseTimestamp("1987-01-01 00:00:00"))
             .addExpr("CEIL(c_double)", 2.0);
 
     checker.buildRunAndCheck(getFloorCeilingTestPCollection());
@@ -1142,7 +1142,7 @@ public void testCeil() {
   public void testFloorAndCeilResolutionLimit() {
     thrown.expect(IllegalArgumentException.class);
     ExpressionChecker checker =
-        new ExpressionChecker().addExpr("FLOOR(ts TO DAY)", 
parseDate("1986-02-01 00:00:00"));
+        new ExpressionChecker().addExpr("FLOOR(ts TO DAY)", 
parseTimestamp("1986-02-01 00:00:00"));
     checker.buildRunAndCheck();
   }
 
@@ -1153,22 +1153,22 @@ public void testDatetimePlusFunction() {
         new ExpressionChecker()
             .addExpr(
                 "TIMESTAMPADD(SECOND, 3, TIMESTAMP '1984-04-19 01:02:03')",
-                parseDate("1984-04-19 01:02:06"))
+                parseTimestamp("1984-04-19 01:02:06"))
             .addExpr(
                 "TIMESTAMPADD(MINUTE, 3, TIMESTAMP '1984-04-19 01:02:03')",
-                parseDate("1984-04-19 01:05:03"))
+                parseTimestamp("1984-04-19 01:05:03"))
             .addExpr(
                 "TIMESTAMPADD(HOUR, 3, TIMESTAMP '1984-04-19 01:02:03')",
-                parseDate("1984-04-19 04:02:03"))
+                parseTimestamp("1984-04-19 04:02:03"))
             .addExpr(
                 "TIMESTAMPADD(DAY, 3, TIMESTAMP '1984-04-19 01:02:03')",
-                parseDate("1984-04-22 01:02:03"))
+                parseTimestamp("1984-04-22 01:02:03"))
             .addExpr(
                 "TIMESTAMPADD(MONTH, 2, TIMESTAMP '1984-01-19 01:02:03')",
-                parseDate("1984-03-19 01:02:03"))
+                parseTimestamp("1984-03-19 01:02:03"))
             .addExpr(
                 "TIMESTAMPADD(YEAR, 2, TIMESTAMP '1985-01-19 01:02:03')",
-                parseDate("1987-01-19 01:02:03"));
+                parseTimestamp("1987-01-19 01:02:03"));
     checker.buildRunAndCheck();
   }
 
@@ -1179,22 +1179,26 @@ public void testDatetimeInfixPlus() {
         new ExpressionChecker()
             .addExpr(
                 "TIMESTAMP '1984-01-19 01:02:03' + INTERVAL '3' SECOND",
-                parseDate("1984-01-19 01:02:06"))
+                parseTimestamp("1984-01-19 01:02:06"))
             .addExpr(
                 "TIMESTAMP '1984-01-19 01:02:03' + INTERVAL '2' MINUTE",
-                parseDate("1984-01-19 01:04:03"))
+                parseTimestamp("1984-01-19 01:04:03"))
             .addExpr(
                 "TIMESTAMP '1984-01-19 01:02:03' + INTERVAL '2' HOUR",
-                parseDate("1984-01-19 03:02:03"))
+                parseTimestamp("1984-01-19 03:02:03"))
             .addExpr(
                 "TIMESTAMP '1984-01-19 01:02:03' + INTERVAL '2' DAY",
-                parseDate("1984-01-21 01:02:03"))
+                parseTimestamp("1984-01-21 01:02:03"))
             .addExpr(
                 "TIMESTAMP '1984-01-19 01:02:03' + INTERVAL '2' MONTH",
-                parseDate("1984-03-19 01:02:03"))
+                parseTimestamp("1984-03-19 01:02:03"))
             .addExpr(
                 "TIMESTAMP '1984-01-19 01:02:03' + INTERVAL '2' YEAR",
-                parseDate("1986-01-19 01:02:03"));
+                parseTimestamp("1986-01-19 01:02:03"))
+            .addExpr("DATE '1984-04-19' + INTERVAL '2' DAY", 
parseDate("1984-04-21"))
+            .addExpr("DATE '1984-04-19' + INTERVAL '1' MONTH", 
parseDate("1984-05-19"))
+            .addExpr("DATE '1984-04-19' + INTERVAL '3' YEAR", 
parseDate("1987-04-19"));
+
     checker.buildRunAndCheck();
   }
 
@@ -1293,22 +1297,26 @@ public void testTimestampMinusInterval() throws 
Exception {
         new ExpressionChecker()
             .addExpr(
                 "TIMESTAMP '1984-04-19 01:01:58' - INTERVAL '2' SECOND",
-                parseDate("1984-04-19 01:01:56"))
+                parseTimestamp("1984-04-19 01:01:56"))
             .addExpr(
                 "TIMESTAMP '1984-04-19 01:01:58' - INTERVAL '1' MINUTE",
-                parseDate("1984-04-19 01:00:58"))
+                parseTimestamp("1984-04-19 01:00:58"))
             .addExpr(
                 "TIMESTAMP '1984-04-19 01:01:58' - INTERVAL '4' HOUR",
-                parseDate("1984-04-18 21:01:58"))
+                parseTimestamp("1984-04-18 21:01:58"))
             .addExpr(
                 "TIMESTAMP '1984-04-19 01:01:58' - INTERVAL '5' DAY",
-                parseDate("1984-04-14 01:01:58"))
+                parseTimestamp("1984-04-14 01:01:58"))
             .addExpr(
                 "TIMESTAMP '1984-01-19 01:01:58' - INTERVAL '2' MONTH",
-                parseDate("1983-11-19 01:01:58"))
+                parseTimestamp("1983-11-19 01:01:58"))
             .addExpr(
                 "TIMESTAMP '1984-01-19 01:01:58' - INTERVAL '1' YEAR",
-                parseDate("1983-01-19 01:01:58"));
+                parseTimestamp("1983-01-19 01:01:58"))
+            .addExpr("DATE '1984-04-19' - INTERVAL '2' DAY", 
parseDate("1984-04-17"))
+            .addExpr("DATE '1984-04-19' - INTERVAL '1' MONTH", 
parseDate("1984-03-19"))
+            .addExpr("DATE '1984-04-19' - INTERVAL '3' YEAR", 
parseDate("1981-04-19"));
+    ;
     checker.buildRunAndCheck();
   }
 
diff --git 
a/sdks/java/extensions/sql/src/test/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/date/BeamSqlDatetimeMinusIntervalExpressionTest.java
 
b/sdks/java/extensions/sql/src/test/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/date/BeamSqlDatetimeMinusIntervalExpressionTest.java
index 074c296d2c7..870057af148 100644
--- 
a/sdks/java/extensions/sql/src/test/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/date/BeamSqlDatetimeMinusIntervalExpressionTest.java
+++ 
b/sdks/java/extensions/sql/src/test/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/date/BeamSqlDatetimeMinusIntervalExpressionTest.java
@@ -67,6 +67,7 @@ public void testAcceptsHappyPath() {
   public void testDoesNotAcceptWrongOutputType() {
     Set<SqlTypeName> unsupportedTypes = new HashSet<>(SqlTypeName.ALL_TYPES);
     unsupportedTypes.remove(SqlTypeName.TIMESTAMP);
+    unsupportedTypes.remove(SqlTypeName.DATE);
 
     for (SqlTypeName unsupportedType : unsupportedTypes) {
       BeamSqlDatetimeMinusIntervalExpression minusExpression =
diff --git 
a/sdks/java/extensions/sql/src/test/java/org/apache/beam/sdk/extensions/sql/integrationtest/BeamSqlBuiltinFunctionsIntegrationTestBase.java
 
b/sdks/java/extensions/sql/src/test/java/org/apache/beam/sdk/extensions/sql/integrationtest/BeamSqlBuiltinFunctionsIntegrationTestBase.java
index 9660295f8a4..0696012207f 100644
--- 
a/sdks/java/extensions/sql/src/test/java/org/apache/beam/sdk/extensions/sql/integrationtest/BeamSqlBuiltinFunctionsIntegrationTestBase.java
+++ 
b/sdks/java/extensions/sql/src/test/java/org/apache/beam/sdk/extensions/sql/integrationtest/BeamSqlBuiltinFunctionsIntegrationTestBase.java
@@ -117,7 +117,7 @@
     try {
       return TestBoundedTable.of(ROW_TYPE)
           .addRows(
-              parseDate("1986-02-15 11:35:26"),
+              parseTimestamp("1986-02-15 11:35:26"),
               (byte) 1,
               (short) 1,
               1,
@@ -139,7 +139,7 @@
   protected PCollection<Row> getFloorCeilingTestPCollection() {
     try {
       return TestBoundedTable.of(ROW_TYPE_THREE)
-          .addRows(parseDate("1986-02-15 11:35:26"), 1.4)
+          .addRows(parseTimestamp("1986-02-15 11:35:26"), 1.4)
           .buildIOReader(pipeline.begin())
           .setRowSchema(ROW_TYPE_THREE);
     } catch (Exception e) {
@@ -151,7 +151,7 @@
     try {
       return TestBoundedTable.of(ROW_TYPE_TWO)
           .addRows(
-              parseDate("1986-02-15 11:35:26"),
+              parseTimestamp("1986-02-15 11:35:26"),
               (byte) 1,
               (short) 1,
               1,
@@ -162,7 +162,7 @@
               7.0,
               BigDecimal.valueOf(1.0))
           .addRows(
-              parseDate("1986-03-15 11:35:26"),
+              parseTimestamp("1986-03-15 11:35:26"),
               (byte) 2,
               (short) 2,
               2,
@@ -173,7 +173,7 @@
               8.0,
               BigDecimal.valueOf(2.0))
           .addRows(
-              parseDate("1986-04-15 11:35:26"),
+              parseTimestamp("1986-04-15 11:35:26"),
               (byte) 3,
               (short) 3,
               3,
@@ -191,10 +191,14 @@
     }
   }
 
-  protected static DateTime parseDate(String str) {
+  protected static DateTime parseTimestamp(String str) {
     return DateTimeFormat.forPattern("yyyy-MM-dd 
HH:mm:ss").withZoneUTC().parseDateTime(str);
   }
 
+  protected static DateTime parseDate(String str) {
+    return 
DateTimeFormat.forPattern("yyyy-MM-dd").withZoneUTC().parseDateTime(str);
+  }
+
   @AutoValue
   abstract static class ExpressionTestCase {
 


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


Issue Time Tracking
-------------------

    Worklog Id:     (was: 163288)
    Time Spent: 0.5h  (was: 20m)

> Test DATE +/- INTERVAL
> ----------------------
>
>                 Key: BEAM-6001
>                 URL: https://issues.apache.org/jira/browse/BEAM-6001
>             Project: Beam
>          Issue Type: Sub-task
>          Components: dsl-sql
>            Reporter: Rui Wang
>            Assignee: Rui Wang
>            Priority: Major
>          Time Spent: 0.5h
>  Remaining Estimate: 0h
>




--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to