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

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

                Author: ASF GitHub Bot
            Created on: 03/Jul/18 14:09
            Start Date: 03/Jul/18 14:09
    Worklog Time Spent: 10m 
      Work Description: kennknowles closed pull request #5875: [BEAM-4723] 
Support all datetime types plus interval
URL: https://github.com/apache/beam/pull/5875
 
 
   

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/operator/BeamSqlPrimitive.java
 
b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/BeamSqlPrimitive.java
index 4fe628351bc..b6942913c41 100644
--- 
a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/BeamSqlPrimitive.java
+++ 
b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/BeamSqlPrimitive.java
@@ -132,7 +132,6 @@ public boolean accept() {
       case VARCHAR:
         return value instanceof String || value instanceof NlsString;
       case TIME:
-        return value instanceof ReadableInstant;
       case TIMESTAMP:
       case DATE:
         return value instanceof ReadableInstant;
diff --git 
a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/date/BeamSqlDatetimePlusExpression.java
 
b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/date/BeamSqlDatetimePlusExpression.java
index a25070f5181..ced9755a2f1 100644
--- 
a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/date/BeamSqlDatetimePlusExpression.java
+++ 
b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/date/BeamSqlDatetimePlusExpression.java
@@ -58,7 +58,7 @@ public BeamSqlDatetimePlusExpression(List<BeamSqlExpression> 
operands) {
   @Override
   public boolean accept() {
     return operands.size() == 2
-        && SqlTypeName.TIMESTAMP.equals(operands.get(0).getOutputType())
+        && SqlTypeName.DATETIME_TYPES.contains(operands.get(0).getOutputType())
         && SUPPORTED_INTERVAL_TYPES.contains(operands.get(1).getOutputType());
   }
 
@@ -103,12 +103,13 @@ private BeamSqlPrimitive getIntervalOperand(
   private DateTime getTimestampOperand(
       Row inputRow, BoundedWindow window, BeamSqlExpressionEnvironment env) {
     BeamSqlPrimitive timestampOperandPrimitive =
-        findExpressionOfType(operands, 
SqlTypeName.TIMESTAMP).get().evaluate(inputRow, window, env);
+        findExpressionOfType(operands, SqlTypeName.DATETIME_TYPES)
+            .get()
+            .evaluate(inputRow, window, env);
     return new DateTime(timestampOperandPrimitive.getDate());
   }
 
   private DateTime addInterval(DateTime dateTime, SqlTypeName intervalType, 
int numberOfIntervals) {
-
     switch (intervalType) {
       case INTERVAL_SECOND:
         return dateTime.plusSeconds(numberOfIntervals);
diff --git 
a/sdks/java/extensions/sql/src/test/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/date/BeamSqlDateExpressionTestBase.java
 
b/sdks/java/extensions/sql/src/test/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/date/BeamSqlDateExpressionTestBase.java
index 21a5f1d80c9..598c2d6a7de 100644
--- 
a/sdks/java/extensions/sql/src/test/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/date/BeamSqlDateExpressionTestBase.java
+++ 
b/sdks/java/extensions/sql/src/test/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/date/BeamSqlDateExpressionTestBase.java
@@ -29,4 +29,9 @@ static DateTime str2DateTime(String dateStr) {
     DateTimeFormatter format = DateTimeFormat.forPattern("yyyy-MM-dd 
HH:mm:ss").withZoneUTC();
     return format.parseDateTime(dateStr);
   }
+
+  static DateTime str2Date(String dateStr) {
+    DateTimeFormatter format = 
DateTimeFormat.forPattern("yyyy-MM-dd").withZoneUTC();
+    return format.parseDateTime(dateStr);
+  }
 }
diff --git 
a/sdks/java/extensions/sql/src/test/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/date/BeamSqlDatetimePlusExpressionTest.java
 
b/sdks/java/extensions/sql/src/test/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/date/BeamSqlDatetimePlusExpressionTest.java
index 184a309f965..58ec50376d7 100644
--- 
a/sdks/java/extensions/sql/src/test/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/date/BeamSqlDatetimePlusExpressionTest.java
+++ 
b/sdks/java/extensions/sql/src/test/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/date/BeamSqlDatetimePlusExpressionTest.java
@@ -43,7 +43,15 @@
 
   private static final Row NULL_INPUT_ROW = null;
   private static final BoundedWindow NULL_WINDOW = null;
-  private static final DateTime DATE = str2DateTime("1984-04-19 01:02:03");
+  private static final DateTime DATETIME = str2DateTime("1984-04-19 01:02:03");
+  private static final DateTime DATE = str2Date("2018-07-01");
+
+  private static final DateTime DATETIME_PLUS_15_SECONDS = 
DATETIME.plusSeconds(15);
+  private static final DateTime DATETIME_PLUS_10_MINUTES = 
DATETIME.plusMinutes(10);
+  private static final DateTime DATETIME_PLUS_7_HOURS = DATETIME.plusHours(7);
+  private static final DateTime DATETIME_PLUS_3_DAYS = DATETIME.plusDays(3);
+  private static final DateTime DATETIME_PLUS_2_MONTHS = 
DATETIME.plusMonths(2);
+  private static final DateTime DATETIME_PLUS_11_YEARS = 
DATETIME.plusYears(11);
 
   private static final DateTime DATE_PLUS_15_SECONDS = DATE.plusSeconds(15);
   private static final DateTime DATE_PLUS_10_MINUTES = DATE.plusMinutes(10);
@@ -68,7 +76,9 @@
       interval(SqlTypeName.INTERVAL_YEAR, 11);
 
   private static final BeamSqlExpression SQL_TIMESTAMP =
-      BeamSqlPrimitive.of(SqlTypeName.TIMESTAMP, DATE);
+      BeamSqlPrimitive.of(SqlTypeName.TIMESTAMP, DATETIME);
+
+  private static final BeamSqlExpression SQL_DATE = 
BeamSqlPrimitive.of(SqlTypeName.DATE, DATE);
 
   @Test
   public void testHappyPath_outputTypeAndAccept() {
@@ -78,6 +88,14 @@ public void testHappyPath_outputTypeAndAccept() {
     assertTrue(plusExpression.accept());
   }
 
+  @Test
+  public void testDateAndInterval_outputTypeAndAccept() {
+    BeamSqlExpression plusExpression = dateTimePlus(SQL_DATE, 
SQL_INTERVAL_3_DAYS);
+
+    assertEquals(SqlTypeName.TIMESTAMP, plusExpression.getOutputType());
+    assertTrue(plusExpression.accept());
+  }
+
   @Test
   public void testDoesNotAcceptTreeOperands() {
     BeamSqlDatetimePlusExpression plusExpression =
@@ -106,12 +124,21 @@ public void testDoesNotAcceptWithoutIntervalOperand() {
 
   @Test
   public void testEvaluate() {
-    assertEquals(DATE_PLUS_15_SECONDS, evalDatetimePlus(SQL_TIMESTAMP, 
SQL_INTERVAL_15_SECONDS));
-    assertEquals(DATE_PLUS_10_MINUTES, evalDatetimePlus(SQL_TIMESTAMP, 
SQL_INTERVAL_10_MINUTES));
-    assertEquals(DATE_PLUS_7_HOURS, evalDatetimePlus(SQL_TIMESTAMP, 
SQL_INTERVAL_7_HOURS));
-    assertEquals(DATE_PLUS_3_DAYS, evalDatetimePlus(SQL_TIMESTAMP, 
SQL_INTERVAL_3_DAYS));
-    assertEquals(DATE_PLUS_2_MONTHS, evalDatetimePlus(SQL_TIMESTAMP, 
SQL_INTERVAL_2_MONTHS));
-    assertEquals(DATE_PLUS_11_YEARS, evalDatetimePlus(SQL_TIMESTAMP, 
SQL_INTERVAL_11_YEARS));
+    assertEquals(
+        DATETIME_PLUS_15_SECONDS, evalDatetimePlus(SQL_TIMESTAMP, 
SQL_INTERVAL_15_SECONDS));
+    assertEquals(
+        DATETIME_PLUS_10_MINUTES, evalDatetimePlus(SQL_TIMESTAMP, 
SQL_INTERVAL_10_MINUTES));
+    assertEquals(DATETIME_PLUS_7_HOURS, evalDatetimePlus(SQL_TIMESTAMP, 
SQL_INTERVAL_7_HOURS));
+    assertEquals(DATETIME_PLUS_3_DAYS, evalDatetimePlus(SQL_TIMESTAMP, 
SQL_INTERVAL_3_DAYS));
+    assertEquals(DATETIME_PLUS_2_MONTHS, evalDatetimePlus(SQL_TIMESTAMP, 
SQL_INTERVAL_2_MONTHS));
+    assertEquals(DATETIME_PLUS_11_YEARS, evalDatetimePlus(SQL_TIMESTAMP, 
SQL_INTERVAL_11_YEARS));
+
+    assertEquals(DATE_PLUS_15_SECONDS, evalDatetimePlus(SQL_DATE, 
SQL_INTERVAL_15_SECONDS));
+    assertEquals(DATE_PLUS_10_MINUTES, evalDatetimePlus(SQL_DATE, 
SQL_INTERVAL_10_MINUTES));
+    assertEquals(DATE_PLUS_7_HOURS, evalDatetimePlus(SQL_DATE, 
SQL_INTERVAL_7_HOURS));
+    assertEquals(DATE_PLUS_3_DAYS, evalDatetimePlus(SQL_DATE, 
SQL_INTERVAL_3_DAYS));
+    assertEquals(DATE_PLUS_2_MONTHS, evalDatetimePlus(SQL_DATE, 
SQL_INTERVAL_2_MONTHS));
+    assertEquals(DATE_PLUS_11_YEARS, evalDatetimePlus(SQL_DATE, 
SQL_INTERVAL_11_YEARS));
   }
 
   @Test


 

----------------------------------------------------------------
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: 118717)
    Time Spent: 40m  (was: 0.5h)

> Enhance Datetime*Expression Datetime Type
> -----------------------------------------
>
>                 Key: BEAM-4723
>                 URL: https://issues.apache.org/jira/browse/BEAM-4723
>             Project: Beam
>          Issue Type: Bug
>          Components: dsl-sql
>            Reporter: Kai Jiang
>            Assignee: Kai Jiang
>            Priority: Major
>          Time Spent: 40m
>  Remaining Estimate: 0h
>
> Datetime*Expression only supports timestamp type for first operand now. We 
> should let it accept all Datetime_Types



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

Reply via email to