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.