You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beam.apache.org by lz...@apache.org on 2017/07/18 08:19:53 UTC

[2/3] beam git commit: refactor the datetime test to use ExpressionChecker and fix BeamSqlDivideExpression to speicify round mode.

refactor the datetime test to use ExpressionChecker and fix BeamSqlDivideExpression to speicify round mode.


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

Branch: refs/heads/DSL_SQL
Commit: 1d826dae8efa2fb2efac6ce19d8058a914c8d41a
Parents: 6c289d3
Author: James Xu <xu...@gmail.com>
Authored: Mon Jul 17 17:14:04 2017 +0800
Committer: JingsongLi <lz...@aliyun.com>
Committed: Tue Jul 18 16:17:24 2017 +0800

----------------------------------------------------------------------
 .../arithmetic/BeamSqlDivideExpression.java     |  5 +-
 ...amSqlArithmeticOperatorsIntegrationTest.java | 13 ++--
 .../BeamSqlDateFunctionsIntegrationTest.java    | 68 +++++++++-----------
 3 files changed, 42 insertions(+), 44 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/beam/blob/1d826dae/dsls/sql/src/main/java/org/apache/beam/dsls/sql/interpreter/operator/arithmetic/BeamSqlDivideExpression.java
----------------------------------------------------------------------
diff --git a/dsls/sql/src/main/java/org/apache/beam/dsls/sql/interpreter/operator/arithmetic/BeamSqlDivideExpression.java b/dsls/sql/src/main/java/org/apache/beam/dsls/sql/interpreter/operator/arithmetic/BeamSqlDivideExpression.java
index 6040690..c5fe02b 100644
--- a/dsls/sql/src/main/java/org/apache/beam/dsls/sql/interpreter/operator/arithmetic/BeamSqlDivideExpression.java
+++ b/dsls/sql/src/main/java/org/apache/beam/dsls/sql/interpreter/operator/arithmetic/BeamSqlDivideExpression.java
@@ -19,6 +19,7 @@
 package org.apache.beam.dsls.sql.interpreter.operator.arithmetic;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.List;
 import org.apache.beam.dsls.sql.interpreter.operator.BeamSqlExpression;
 
@@ -27,10 +28,10 @@ import org.apache.beam.dsls.sql.interpreter.operator.BeamSqlExpression;
  */
 public class BeamSqlDivideExpression extends BeamSqlArithmeticExpression {
   public BeamSqlDivideExpression(List<BeamSqlExpression> operands) {
-    super(operands, operands.get(0).getOutputType());
+    super(operands);
   }
 
   @Override protected BigDecimal calc(BigDecimal left, BigDecimal right) {
-    return left.divide(right);
+    return left.divide(right, 10, RoundingMode.HALF_EVEN);
   }
 }

http://git-wip-us.apache.org/repos/asf/beam/blob/1d826dae/dsls/sql/src/test/java/org/apache/beam/dsls/sql/integrationtest/BeamSqlArithmeticOperatorsIntegrationTest.java
----------------------------------------------------------------------
diff --git a/dsls/sql/src/test/java/org/apache/beam/dsls/sql/integrationtest/BeamSqlArithmeticOperatorsIntegrationTest.java b/dsls/sql/src/test/java/org/apache/beam/dsls/sql/integrationtest/BeamSqlArithmeticOperatorsIntegrationTest.java
index b1c577f..947660a 100644
--- a/dsls/sql/src/test/java/org/apache/beam/dsls/sql/integrationtest/BeamSqlArithmeticOperatorsIntegrationTest.java
+++ b/dsls/sql/src/test/java/org/apache/beam/dsls/sql/integrationtest/BeamSqlArithmeticOperatorsIntegrationTest.java
@@ -19,6 +19,7 @@
 package org.apache.beam.dsls.sql.integrationtest;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import org.junit.Test;
 
 /**
@@ -31,6 +32,8 @@ public class BeamSqlArithmeticOperatorsIntegrationTest
   private static final BigDecimal ONE0 = BigDecimal.valueOf(1);
   private static final BigDecimal ONE = BigDecimal.valueOf(1.0);
   private static final BigDecimal ONE2 = BigDecimal.valueOf(1.0).multiply(BigDecimal.valueOf(1.0));
+  private static final BigDecimal ONE10 = BigDecimal.ONE.divide(
+      BigDecimal.ONE, 10, RoundingMode.HALF_EVEN);
   private static final BigDecimal TWO = BigDecimal.valueOf(2.0);
 
   @Test
@@ -123,14 +126,14 @@ public class BeamSqlArithmeticOperatorsIntegrationTest
   public void testDivide() throws Exception {
     ExpressionChecker checker = new ExpressionChecker()
         .addExpr("1 / 1", 1)
-        .addExpr("1.0 / 1", ONE0)
-        .addExpr("1 / 1.0", ONE0)
-        .addExpr("1.0 / 1.0", ONE0)
+        .addExpr("1.0 / 1", ONE10)
+        .addExpr("1 / 1.0", ONE10)
+        .addExpr("1.0 / 1.0", ONE10)
         .addExpr("c_tinyint / c_tinyint", (byte) 1)
         .addExpr("c_smallint / c_smallint", (short) 1)
         .addExpr("c_bigint / c_bigint", 1L)
-        .addExpr("c_decimal / c_decimal", ONE0)
-        .addExpr("c_tinyint / c_decimal", ONE0)
+        .addExpr("c_decimal / c_decimal", ONE10)
+        .addExpr("c_tinyint / c_decimal", ONE10)
         .addExpr("c_float / c_decimal", 1.0)
         .addExpr("c_double / c_decimal", 1.0)
         .addExpr("c_float / c_float", 1.0f)

http://git-wip-us.apache.org/repos/asf/beam/blob/1d826dae/dsls/sql/src/test/java/org/apache/beam/dsls/sql/integrationtest/BeamSqlDateFunctionsIntegrationTest.java
----------------------------------------------------------------------
diff --git a/dsls/sql/src/test/java/org/apache/beam/dsls/sql/integrationtest/BeamSqlDateFunctionsIntegrationTest.java b/dsls/sql/src/test/java/org/apache/beam/dsls/sql/integrationtest/BeamSqlDateFunctionsIntegrationTest.java
index 386241d..bd0d3ba 100644
--- a/dsls/sql/src/test/java/org/apache/beam/dsls/sql/integrationtest/BeamSqlDateFunctionsIntegrationTest.java
+++ b/dsls/sql/src/test/java/org/apache/beam/dsls/sql/integrationtest/BeamSqlDateFunctionsIntegrationTest.java
@@ -18,6 +18,9 @@
 
 package org.apache.beam.dsls.sql.integrationtest;
 
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
 import java.util.Date;
 import java.util.Iterator;
 import org.apache.beam.dsls.sql.BeamSql;
@@ -25,7 +28,6 @@ import org.apache.beam.dsls.sql.schema.BeamSqlRow;
 import org.apache.beam.sdk.testing.PAssert;
 import org.apache.beam.sdk.transforms.SerializableFunction;
 import org.apache.beam.sdk.values.PCollection;
-import org.junit.Assert;
 import org.junit.Test;
 
 /**
@@ -34,20 +36,26 @@ import org.junit.Test;
 public class BeamSqlDateFunctionsIntegrationTest
     extends BeamSqlBuiltinFunctionsIntegrationTestBase {
   @Test public void testDateTimeFunctions() throws Exception {
+    ExpressionChecker checker = new ExpressionChecker()
+        .addExpr("EXTRACT(YEAR FROM ts)", 1986L)
+        .addExpr("YEAR(ts)", 1986L)
+        .addExpr("QUARTER(ts)", 1L)
+        .addExpr("MONTH(ts)", 2L)
+        .addExpr("WEEK(ts)", 7L)
+        .addExpr("DAYOFMONTH(ts)", 15L)
+        .addExpr("DAYOFYEAR(ts)", 46L)
+        .addExpr("DAYOFWEEK(ts)", 7L)
+        .addExpr("HOUR(ts)", 11L)
+        .addExpr("MINUTE(ts)", 35L)
+        .addExpr("SECOND(ts)", 26L)
+        .addExpr("FLOOR(ts TO YEAR)", parseDate("1986-01-01 00:00:00"))
+        .addExpr("CEIL(ts TO YEAR)", parseDate("1987-01-01 00:00:00"))
+        ;
+    checker.buildRunAndCheck();
+  }
+
+  @Test public void testDateTimeFunctions_currentTime() throws Exception {
     String sql = "SELECT "
-        + "EXTRACT(YEAR FROM ts) as ex,"
-        + "YEAR(ts) as y,"
-        + "QUARTER(ts) as q,"
-        + "MONTH(ts) as m,"
-        + "WEEK(ts) as w,"
-        + "DAYOFMONTH(ts) as d,"
-        + "DAYOFYEAR(ts) as d1,"
-        + "DAYOFWEEK(ts) as d2,"
-        + "HOUR(ts) as h,"
-        + "MINUTE(ts) as m1,"
-        + "SECOND(ts) as s, "
-        + "FLOOR(ts TO YEAR) as f,"
-        + "CEIL(ts TO YEAR) as c, "
         + "LOCALTIME as l,"
         + "LOCALTIMESTAMP as l1,"
         + "CURRENT_DATE as c1,"
@@ -64,30 +72,16 @@ public class BeamSqlDateFunctionsIntegrationTest
   private static class Checker implements SerializableFunction<Iterable<BeamSqlRow>, Void> {
     @Override public Void apply(Iterable<BeamSqlRow> input) {
       Iterator<BeamSqlRow> iter = input.iterator();
-      while (iter.hasNext()) {
-        BeamSqlRow row = iter.next();
-        Assert.assertEquals(1986L, row.getLong(0));
-        Assert.assertEquals(1986L, row.getLong(1));
-        Assert.assertEquals(1L, row.getLong(2));
-        Assert.assertEquals(2L, row.getLong(3));
-        Assert.assertEquals(7L, row.getLong(4));
-        Assert.assertEquals(15L, row.getLong(5));
-        Assert.assertEquals(46L, row.getLong(6));
-        Assert.assertEquals(7L, row.getLong(7));
-        Assert.assertEquals(11L, row.getLong(8));
-        Assert.assertEquals(35L, row.getLong(9));
-        Assert.assertEquals(26L, row.getLong(10));
-        Assert.assertEquals(parseDate("1986-01-01 00:00:00"), row.getDate(11));
-        Assert.assertEquals(parseDate("1987-01-01 00:00:00"), row.getDate(12));
-
+      assertTrue(iter.hasNext());
+      BeamSqlRow row = iter.next();
         // LOCALTIME
-        Date date = new Date();
-        Assert.assertTrue(date.getTime() - row.getGregorianCalendar(13).getTime().getTime() < 1000);
-        Assert.assertTrue(date.getTime() - row.getDate(14).getTime() < 1000);
-        Assert.assertTrue(date.getTime() - row.getDate(15).getTime() < 1000);
-        Assert.assertTrue(date.getTime() - row.getGregorianCalendar(16).getTime().getTime() < 1000);
-        Assert.assertTrue(date.getTime() - row.getDate(17).getTime() < 1000);
-      }
+      Date date = new Date();
+      assertTrue(date.getTime() - row.getGregorianCalendar(0).getTime().getTime() < 1000);
+      assertTrue(date.getTime() - row.getDate(1).getTime() < 1000);
+      assertTrue(date.getTime() - row.getDate(2).getTime() < 1000);
+      assertTrue(date.getTime() - row.getGregorianCalendar(3).getTime().getTime() < 1000);
+      assertTrue(date.getTime() - row.getDate(4).getTime() < 1000);
+      assertFalse(iter.hasNext());
       return null;
     }
   }