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 <[email protected]>
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
[email protected].