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

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

                Author: ASF GitHub Bot
            Created on: 26/Jun/18 02:35
            Start Date: 26/Jun/18 02:35
    Worklog Time Spent: 10m 
      Work Description: kennknowles closed pull request #5749: 
[BEAM-4602][BEAM-4598] Datetime type comparison
URL: https://github.com/apache/beam/pull/5749
 
 
   

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/comparison/BeamSqlCompareExpression.java
 
b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/comparison/BeamSqlCompareExpression.java
index fdfb46e1d34..33ac37ace3c 100644
--- 
a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/comparison/BeamSqlCompareExpression.java
+++ 
b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/comparison/BeamSqlCompareExpression.java
@@ -24,6 +24,7 @@
 import org.apache.beam.sdk.transforms.windowing.BoundedWindow;
 import org.apache.beam.sdk.values.Row;
 import org.apache.calcite.sql.type.SqlTypeName;
+import org.joda.time.DateTime;
 
 /**
  * {@link BeamSqlCompareExpression} is used for compare operations.
@@ -70,6 +71,9 @@ public boolean accept() {
       case VARCHAR:
         return BeamSqlPrimitive.of(
             SqlTypeName.BOOLEAN, compare((CharSequence) leftValue, 
(CharSequence) rightValue));
+      case DATE:
+        return BeamSqlPrimitive.of(
+            SqlTypeName.BOOLEAN, compare((DateTime) leftValue, (DateTime) 
rightValue));
       default:
         throw new UnsupportedOperationException(toString());
     }
@@ -87,4 +91,7 @@ public boolean accept() {
    * SqlTypeName#INTEGER}, {@link SqlTypeName#SMALLINT} and {@link 
SqlTypeName#TINYINT}.
    */
   public abstract Boolean compare(Number leftValue, Number rightValue);
+
+  /** Compare between DateTime values, mapping to {@link 
SqlTypeName#DATETIME_TYPES}. */
+  public abstract Boolean compare(DateTime leftValue, DateTime rightValue);
 }
diff --git 
a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/comparison/BeamSqlEqualsExpression.java
 
b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/comparison/BeamSqlEqualsExpression.java
index 22c726771d9..d8cbcb761b6 100644
--- 
a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/comparison/BeamSqlEqualsExpression.java
+++ 
b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/comparison/BeamSqlEqualsExpression.java
@@ -19,6 +19,7 @@
 
 import java.util.List;
 import 
org.apache.beam.sdk.extensions.sql.impl.interpreter.operator.BeamSqlExpression;
+import org.joda.time.DateTime;
 
 /** {@code BeamSqlExpression} for {@code =} operation. */
 public class BeamSqlEqualsExpression extends BeamSqlCompareExpression {
@@ -44,4 +45,9 @@ public Boolean compare(Number leftValue, Number rightValue) {
             && rightValue != null
             && leftValue.floatValue() == (rightValue).floatValue());
   }
+
+  @Override
+  public Boolean compare(DateTime leftValue, DateTime rightValue) {
+    return leftValue.isEqual(rightValue);
+  }
 }
diff --git 
a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/comparison/BeamSqlGreaterThanExpression.java
 
b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/comparison/BeamSqlGreaterThanExpression.java
index 202f52b400f..b97823b29ab 100644
--- 
a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/comparison/BeamSqlGreaterThanExpression.java
+++ 
b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/comparison/BeamSqlGreaterThanExpression.java
@@ -19,6 +19,7 @@
 
 import java.util.List;
 import 
org.apache.beam.sdk.extensions.sql.impl.interpreter.operator.BeamSqlExpression;
+import org.joda.time.DateTime;
 
 /** {@code BeamSqlExpression} for {@code >} operation. */
 public class BeamSqlGreaterThanExpression extends BeamSqlCompareExpression {
@@ -44,4 +45,9 @@ public Boolean compare(Number leftValue, Number rightValue) {
             && rightValue != null
             && leftValue.floatValue() > (rightValue).floatValue());
   }
+
+  @Override
+  public Boolean compare(DateTime leftValue, DateTime rightValue) {
+    return leftValue.isAfter(rightValue);
+  }
 }
diff --git 
a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/comparison/BeamSqlGreaterThanOrEqualsExpression.java
 
b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/comparison/BeamSqlGreaterThanOrEqualsExpression.java
index 9429927d58a..dc5555691f9 100644
--- 
a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/comparison/BeamSqlGreaterThanOrEqualsExpression.java
+++ 
b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/comparison/BeamSqlGreaterThanOrEqualsExpression.java
@@ -19,6 +19,7 @@
 
 import java.util.List;
 import 
org.apache.beam.sdk.extensions.sql.impl.interpreter.operator.BeamSqlExpression;
+import org.joda.time.DateTime;
 
 /** {@code BeamSqlExpression} for {@code >=} operation. */
 public class BeamSqlGreaterThanOrEqualsExpression extends 
BeamSqlCompareExpression {
@@ -44,4 +45,9 @@ public Boolean compare(Number leftValue, Number rightValue) {
             && rightValue != null
             && leftValue.floatValue() >= (rightValue).floatValue());
   }
+
+  @Override
+  public Boolean compare(DateTime leftValue, DateTime rightValue) {
+    return leftValue.isAfter(rightValue) || leftValue.isEqual(rightValue);
+  }
 }
diff --git 
a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/comparison/BeamSqlLessThanExpression.java
 
b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/comparison/BeamSqlLessThanExpression.java
index eee5c444730..720cdd38806 100644
--- 
a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/comparison/BeamSqlLessThanExpression.java
+++ 
b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/comparison/BeamSqlLessThanExpression.java
@@ -19,6 +19,7 @@
 
 import java.util.List;
 import 
org.apache.beam.sdk.extensions.sql.impl.interpreter.operator.BeamSqlExpression;
+import org.joda.time.DateTime;
 
 /** {@code BeamSqlExpression} for {@code <} operation. */
 public class BeamSqlLessThanExpression extends BeamSqlCompareExpression {
@@ -44,4 +45,9 @@ public Boolean compare(Number leftValue, Number rightValue) {
             && rightValue != null
             && leftValue.floatValue() < (rightValue).floatValue());
   }
+
+  @Override
+  public Boolean compare(DateTime leftValue, DateTime rightValue) {
+    return leftValue.isBefore(rightValue);
+  }
 }
diff --git 
a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/comparison/BeamSqlLessThanOrEqualsExpression.java
 
b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/comparison/BeamSqlLessThanOrEqualsExpression.java
index 8bed8b480db..1a21178f129 100644
--- 
a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/comparison/BeamSqlLessThanOrEqualsExpression.java
+++ 
b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/comparison/BeamSqlLessThanOrEqualsExpression.java
@@ -19,6 +19,7 @@
 
 import java.util.List;
 import 
org.apache.beam.sdk.extensions.sql.impl.interpreter.operator.BeamSqlExpression;
+import org.joda.time.DateTime;
 
 /** {@code BeamSqlExpression} for {@code <=} operation. */
 public class BeamSqlLessThanOrEqualsExpression extends 
BeamSqlCompareExpression {
@@ -44,4 +45,9 @@ public Boolean compare(Number leftValue, Number rightValue) {
             && rightValue != null
             && leftValue.floatValue() <= (rightValue).floatValue());
   }
+
+  @Override
+  public Boolean compare(DateTime leftValue, DateTime rightValue) {
+    return leftValue.isBefore(rightValue) || leftValue.isEqual(rightValue);
+  }
 }
diff --git 
a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/comparison/BeamSqlLikeExpression.java
 
b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/comparison/BeamSqlLikeExpression.java
index b9b95c557ae..7cfa2074dbe 100644
--- 
a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/comparison/BeamSqlLikeExpression.java
+++ 
b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/comparison/BeamSqlLikeExpression.java
@@ -20,6 +20,7 @@
 import java.util.List;
 import 
org.apache.beam.sdk.extensions.sql.impl.interpreter.operator.BeamSqlExpression;
 import org.apache.calcite.runtime.SqlFunctions;
+import org.joda.time.DateTime;
 
 /** {@code BeamSqlExpression} for 'LIKE' operation. */
 public class BeamSqlLikeExpression extends BeamSqlCompareExpression {
@@ -42,4 +43,9 @@ public Boolean compare(Boolean leftValue, Boolean rightValue) 
{
   public Boolean compare(Number leftValue, Number rightValue) {
     throw new IllegalArgumentException("LIKE is not supported for Number.");
   }
+
+  @Override
+  public Boolean compare(DateTime leftValue, DateTime rightValue) {
+    throw new IllegalArgumentException("LIKE is not supported for DateTime.");
+  }
 }
diff --git 
a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/comparison/BeamSqlNotEqualsExpression.java
 
b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/comparison/BeamSqlNotEqualsExpression.java
index eab4c719552..7accc750f96 100644
--- 
a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/comparison/BeamSqlNotEqualsExpression.java
+++ 
b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/comparison/BeamSqlNotEqualsExpression.java
@@ -19,6 +19,7 @@
 
 import java.util.List;
 import 
org.apache.beam.sdk.extensions.sql.impl.interpreter.operator.BeamSqlExpression;
+import org.joda.time.DateTime;
 
 /** {@code BeamSqlExpression} for {@code <>} operation. */
 public class BeamSqlNotEqualsExpression extends BeamSqlCompareExpression {
@@ -44,4 +45,9 @@ public Boolean compare(Number leftValue, Number rightValue) {
             && rightValue != null
             && leftValue.floatValue() != (rightValue).floatValue());
   }
+
+  @Override
+  public Boolean compare(DateTime leftValue, DateTime rightValue) {
+    return !leftValue.isEqual(rightValue);
+  }
 }
diff --git 
a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/schema/BeamTableUtils.java
 
b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/schema/BeamTableUtils.java
index 02a7e15d7dc..74da22853d0 100644
--- 
a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/schema/BeamTableUtils.java
+++ 
b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/schema/BeamTableUtils.java
@@ -35,6 +35,7 @@
 import org.apache.commons.csv.CSVParser;
 import org.apache.commons.csv.CSVPrinter;
 import org.apache.commons.csv.CSVRecord;
+import org.joda.time.DateTime;
 
 /**
  * Utility methods for working with {@code BeamTable}.
@@ -105,6 +106,8 @@ public static Object autoCastField(Schema.Field field, 
Object rawObj) {
       } else {
         return rawObj;
       }
+    } else if (type.isDateType()) {
+      return DateTime.parse(rawObj.toString());
     } else if (type.isNumericType()
         && ((rawObj instanceof String)
             || (rawObj instanceof BigDecimal && type != TypeName.DECIMAL))) {
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 17e309d7205..29f8502e62c 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
@@ -401,7 +401,16 @@ public void testComparisonOperatorFunction() {
             .addExpr("1 IS NOT DISTINCT FROM 2", false)
             .addExpr("1.0 IS NOT DISTINCT FROM 2.0", false)
             .addExpr("'a' IS NOT DISTINCT FROM 'b'", false)
-            .addExpr("true IS NOT DISTINCT FROM false", false);
+            .addExpr("true IS NOT DISTINCT FROM false", false)
+            .addExpr("date '2018-01-01' > DATE '2017-12-31' ", true)
+            .addExpr("date '2018-01-01' >= DATE '2017-12-31' ", true)
+            .addExpr("date '2018-01-01' < DATE '2017-12-31' ", false)
+            .addExpr("date '2018-01-01' <= DATE '2017-12-31' ", false)
+            .addExpr("date '2018-06-24' = DATE '2018-06-24' ", true)
+            .addExpr("Date '2018-06-24' <> DATE '2018-06-24' ", false)
+            .addExpr("TIME '20:17:40' < Time '15:05:57' ", false)
+            .addExpr("TIME '00:00:01' >= time '00:00:01' ", true)
+            .addExpr("TIMESTAMP '2017-12-31 23:59:59' < TIMESTAMP '2018-01-01 
00:00:00' ", true);
 
     checker.buildRunAndCheck();
   }


 

----------------------------------------------------------------
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: 115741)
    Time Spent: 1h 20m  (was: 1h 10m)

> Implement Date Comparison in BeamSqlCompareExpression
> -----------------------------------------------------
>
>                 Key: BEAM-4602
>                 URL: https://issues.apache.org/jira/browse/BEAM-4602
>             Project: Beam
>          Issue Type: Sub-task
>          Components: dsl-sql
>            Reporter: Kai Jiang
>            Assignee: Kai Jiang
>            Priority: Major
>          Time Spent: 1h 20m
>  Remaining Estimate: 0h
>




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

Reply via email to