This is an automated email from the ASF dual-hosted git repository.

mingmxu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/beam.git


The following commit(s) were added to refs/heads/master by this push:
     new 5b6ca47  [BEAM-2281][Sql] Use SqlFunctions.toBigDecimal not toString 
(#4865)
5b6ca47 is described below

commit 5b6ca47fec0b5b720ad5afb9274dc0d418545b43
Author: Andrew Pilloud <apill...@users.noreply.github.com>
AuthorDate: Wed Mar 14 23:09:20 2018 -0700

    [BEAM-2281][Sql] Use SqlFunctions.toBigDecimal not toString (#4865)
---
 .../arithmetic/BeamSqlArithmeticExpression.java     |  7 +++----
 .../operator/math/BeamSqlAbsExpression.java         |  3 +--
 .../sql/impl/transform/agg/CovarianceFn.java        |  8 +++-----
 .../sql/impl/transform/agg/VarianceFn.java          |  8 +++-----
 .../BeamSqlArithmeticOperatorsIntegrationTest.java  | 21 ++++++++++-----------
 5 files changed, 20 insertions(+), 27 deletions(-)

diff --git 
a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/arithmetic/BeamSqlArithmeticExpression.java
 
b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/arithmetic/BeamSqlArithmeticExpression.java
index 1d56be9..63acdc4 100644
--- 
a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/arithmetic/BeamSqlArithmeticExpression.java
+++ 
b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/arithmetic/BeamSqlArithmeticExpression.java
@@ -25,6 +25,7 @@ import 
org.apache.beam.sdk.extensions.sql.impl.interpreter.operator.BeamSqlExpre
 import 
org.apache.beam.sdk.extensions.sql.impl.interpreter.operator.BeamSqlPrimitive;
 import org.apache.beam.sdk.transforms.windowing.BoundedWindow;
 import org.apache.beam.sdk.values.Row;
+import org.apache.calcite.runtime.SqlFunctions;
 import org.apache.calcite.sql.type.SqlTypeName;
 
 /**
@@ -53,10 +54,8 @@ public abstract class BeamSqlArithmeticExpression extends 
BeamSqlExpression {
 
   @Override public BeamSqlPrimitive<? extends Number> evaluate(Row inputRow,
       BoundedWindow window) {
-    BigDecimal left = BigDecimal.valueOf(
-        Double.valueOf(opValueEvaluated(0, inputRow, window).toString()));
-    BigDecimal right = BigDecimal.valueOf(
-        Double.valueOf(opValueEvaluated(1, inputRow, window).toString()));
+    BigDecimal left = SqlFunctions.toBigDecimal((Object) opValueEvaluated(0, 
inputRow, window));
+    BigDecimal right = SqlFunctions.toBigDecimal((Object) opValueEvaluated(1, 
inputRow, window));
 
     BigDecimal result = calc(left, right);
     return getCorrectlyTypedResult(result);
diff --git 
a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/math/BeamSqlAbsExpression.java
 
b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/math/BeamSqlAbsExpression.java
index 01b4cc7..20155b0 100644
--- 
a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/math/BeamSqlAbsExpression.java
+++ 
b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/interpreter/operator/math/BeamSqlAbsExpression.java
@@ -18,7 +18,6 @@
 
 package org.apache.beam.sdk.extensions.sql.impl.interpreter.operator.math;
 
-import java.math.BigDecimal;
 import java.util.List;
 import 
org.apache.beam.sdk.extensions.sql.impl.interpreter.operator.BeamSqlExpression;
 import 
org.apache.beam.sdk.extensions.sql.impl.interpreter.operator.BeamSqlPrimitive;
@@ -60,7 +59,7 @@ public class BeamSqlAbsExpression extends 
BeamSqlMathUnaryExpression {
         break;
       case DECIMAL:
         result = BeamSqlPrimitive
-            .of(SqlTypeName.DECIMAL, SqlFunctions.abs(new 
BigDecimal(op.getValue().toString())));
+            .of(SqlTypeName.DECIMAL, SqlFunctions.abs(op.getDecimal()));
         break;
       case DOUBLE:
         result = BeamSqlPrimitive
diff --git 
a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/transform/agg/CovarianceFn.java
 
b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/transform/agg/CovarianceFn.java
index 6959aac..9cf386a 100644
--- 
a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/transform/agg/CovarianceFn.java
+++ 
b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/transform/agg/CovarianceFn.java
@@ -29,6 +29,7 @@ import org.apache.beam.sdk.coders.SerializableCoder;
 import org.apache.beam.sdk.transforms.Combine;
 import org.apache.beam.sdk.transforms.SerializableFunction;
 import org.apache.beam.sdk.values.KV;
+import org.apache.calcite.runtime.SqlFunctions;
 
 /**
  * {@link Combine.CombineFn} for <em>Covariance</em> on {@link Number} types.
@@ -83,7 +84,8 @@ public class CovarianceFn<T extends Number>
         }
 
         return 
currentVariance.combineWith(CovarianceAccumulator.ofSingleElement(
-                toBigDecimal(rawInput.getKey()), 
toBigDecimal(rawInput.getValue())));
+                SqlFunctions.toBigDecimal(rawInput.getKey()),
+                SqlFunctions.toBigDecimal(rawInput.getValue())));
     }
 
     @Override
@@ -113,8 +115,4 @@ public class CovarianceFn<T extends Number>
 
         return covariance.covariance().divide(adjustedCount, MATH_CTX);
     }
-
-    private BigDecimal toBigDecimal(T rawInput) {
-        return new BigDecimal(rawInput.toString());
-    }
 }
diff --git 
a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/transform/agg/VarianceFn.java
 
b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/transform/agg/VarianceFn.java
index 0ac1470..f124dd6 100644
--- 
a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/transform/agg/VarianceFn.java
+++ 
b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/transform/agg/VarianceFn.java
@@ -28,6 +28,7 @@ import org.apache.beam.sdk.coders.CoderRegistry;
 import org.apache.beam.sdk.coders.SerializableCoder;
 import org.apache.beam.sdk.transforms.Combine;
 import org.apache.beam.sdk.transforms.SerializableFunction;
+import org.apache.calcite.runtime.SqlFunctions;
 
 /**
  * {@link Combine.CombineFn} for <em>Variance</em> on {@link Number} types.
@@ -102,7 +103,8 @@ public class VarianceFn<T extends Number>
       return currentVariance;
     }
 
-    return 
currentVariance.combineWith(VarianceAccumulator.ofSingleElement(toBigDecimal(rawInput)));
+    return currentVariance.combineWith(VarianceAccumulator.ofSingleElement(
+        SqlFunctions.toBigDecimal(rawInput)));
   }
 
   @Override
@@ -131,8 +133,4 @@ public class VarianceFn<T extends Number>
 
     return variance.variance().divide(adjustedCount, MATH_CTX);
   }
-
-  private BigDecimal toBigDecimal(T rawInput) {
-    return new BigDecimal(rawInput.toString());
-  }
 }
diff --git 
a/sdks/java/extensions/sql/src/test/java/org/apache/beam/sdk/extensions/sql/integrationtest/BeamSqlArithmeticOperatorsIntegrationTest.java
 
b/sdks/java/extensions/sql/src/test/java/org/apache/beam/sdk/extensions/sql/integrationtest/BeamSqlArithmeticOperatorsIntegrationTest.java
index e540981..39565b3 100644
--- 
a/sdks/java/extensions/sql/src/test/java/org/apache/beam/sdk/extensions/sql/integrationtest/BeamSqlArithmeticOperatorsIntegrationTest.java
+++ 
b/sdks/java/extensions/sql/src/test/java/org/apache/beam/sdk/extensions/sql/integrationtest/BeamSqlArithmeticOperatorsIntegrationTest.java
@@ -34,6 +34,7 @@ public class BeamSqlArithmeticOperatorsIntegrationTest
   private static final BigDecimal ONE10 = BigDecimal.ONE.divide(
       BigDecimal.ONE, 10, RoundingMode.HALF_EVEN);
   private static final BigDecimal TWO = BigDecimal.valueOf(2.0);
+  private static final BigDecimal TWO0 = BigDecimal.ONE.add(BigDecimal.ONE);
 
   @Test
   public void testPlus() throws Exception {
@@ -45,8 +46,8 @@ public class BeamSqlArithmeticOperatorsIntegrationTest
         .addExpr("c_tinyint + c_tinyint", (byte) 2)
         .addExpr("c_smallint + c_smallint", (short) 2)
         .addExpr("c_bigint + c_bigint", 2L)
-        .addExpr("c_decimal + c_decimal", TWO)
-        .addExpr("c_tinyint + c_decimal", TWO)
+        .addExpr("c_decimal + c_decimal", TWO0)
+        .addExpr("c_tinyint + c_decimal", TWO0)
         .addExpr("c_float + c_decimal", 2.0)
         .addExpr("c_double + c_decimal", 2.0)
         .addExpr("c_float + c_float", 2.0f)
@@ -65,9 +66,7 @@ public class BeamSqlArithmeticOperatorsIntegrationTest
         .addExpr("c_tinyint_max + c_tinyint_max", (byte) -2)
         .addExpr("c_smallint_max + c_smallint_max", (short) -2)
         .addExpr("c_integer_max + c_integer_max", -2)
-        // yeah, I know 384L is strange, but since it is already overflowed
-        // what the actualy result is not so important, it is wrong any way.
-        .addExpr("c_bigint_max + c_bigint_max", 384L)
+        .addExpr("c_bigint_max + c_bigint_max", -2L)
         ;
 
     checker.buildRunAndCheck();
@@ -83,8 +82,8 @@ public class BeamSqlArithmeticOperatorsIntegrationTest
         .addExpr("c_tinyint - c_tinyint", (byte) 0)
         .addExpr("c_smallint - c_smallint", (short) 0)
         .addExpr("c_bigint - c_bigint", 0L)
-        .addExpr("c_decimal - c_decimal", ZERO)
-        .addExpr("c_tinyint - c_decimal", ZERO)
+        .addExpr("c_decimal - c_decimal", BigDecimal.ZERO)
+        .addExpr("c_tinyint - c_decimal", BigDecimal.ZERO)
         .addExpr("c_float - c_decimal", 0.0)
         .addExpr("c_double - c_decimal", 0.0)
         .addExpr("c_float - c_float", 0.0f)
@@ -101,14 +100,14 @@ public class BeamSqlArithmeticOperatorsIntegrationTest
   public void testMultiply() throws Exception {
     ExpressionChecker checker = new ExpressionChecker()
         .addExpr("1 * 1", 1)
-        .addExpr("1.0 * 1", ONE2)
-        .addExpr("1 * 1.0", ONE2)
+        .addExpr("1.0 * 1", ONE)
+        .addExpr("1 * 1.0", ONE)
         .addExpr("1.0 * 1.0", ONE2)
         .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", ONE2)
-        .addExpr("c_tinyint * c_decimal", ONE2)
+        .addExpr("c_decimal * c_decimal", BigDecimal.ONE)
+        .addExpr("c_tinyint * c_decimal", BigDecimal.ONE)
         .addExpr("c_float * c_decimal", 1.0)
         .addExpr("c_double * c_decimal", 1.0)
         .addExpr("c_float * c_float", 1.0f)

-- 
To stop receiving notification emails like this one, please contact
ming...@apache.org.

Reply via email to