Repository: phoenix Updated Branches: refs/heads/calcite b8c8a4f50 -> b612f1696
PHOENIX-2474 Cannot round to a negative precision (to the left of the decimal) (Kevin Liew) Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/b7d45ca6 Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/b7d45ca6 Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/b7d45ca6 Branch: refs/heads/calcite Commit: b7d45ca66729ae57c0896449e36b80f4fdcafb46 Parents: 1ce9845 Author: Samarth <samarth.j...@salesforce.com> Authored: Thu Sep 1 09:49:22 2016 -0700 Committer: Samarth <samarth.j...@salesforce.com> Committed: Thu Sep 1 09:49:22 2016 -0700 ---------------------------------------------------------------------- .../expression/function/RoundDecimalExpression.java | 2 +- .../expression/RoundFloorCeilExpressionsTest.java | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/phoenix/blob/b7d45ca6/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RoundDecimalExpression.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RoundDecimalExpression.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RoundDecimalExpression.java index 65ffacb..055535e 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RoundDecimalExpression.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RoundDecimalExpression.java @@ -100,7 +100,7 @@ public class RoundDecimalExpression extends ScalarFunction { if(scaleValue != null) { if (scaleType.isCoercibleTo(PInteger.INSTANCE, scaleValue)) { int scale = (Integer) PInteger.INSTANCE.toObject(scaleValue, scaleType); - if (scale >=0 && scale <= PDataType.MAX_PRECISION) { + if (scale <= PDataType.MAX_PRECISION) { this.scale = scale; return; } http://git-wip-us.apache.org/repos/asf/phoenix/blob/b7d45ca6/phoenix-core/src/test/java/org/apache/phoenix/expression/RoundFloorCeilExpressionsTest.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/test/java/org/apache/phoenix/expression/RoundFloorCeilExpressionsTest.java b/phoenix-core/src/test/java/org/apache/phoenix/expression/RoundFloorCeilExpressionsTest.java index 5022e71..89058ba 100644 --- a/phoenix-core/src/test/java/org/apache/phoenix/expression/RoundFloorCeilExpressionsTest.java +++ b/phoenix-core/src/test/java/org/apache/phoenix/expression/RoundFloorCeilExpressionsTest.java @@ -79,6 +79,20 @@ public class RoundFloorCeilExpressionsTest { } @Test + public void testRoundNegativePrecisionDecimalExpression() throws Exception { + LiteralExpression decimalLiteral = LiteralExpression.newConstant(444.44, PDecimal.INSTANCE); + Expression roundDecimalExpression = RoundDecimalExpression.create(decimalLiteral, -2); + + ImmutableBytesWritable ptr = new ImmutableBytesWritable(); + roundDecimalExpression.evaluate(null, ptr); + Object result = roundDecimalExpression.getDataType().toObject(ptr); + + assertTrue(result instanceof BigDecimal); + BigDecimal resultDecimal = (BigDecimal)result; + assertEquals(0, BigDecimal.valueOf(400).compareTo(resultDecimal)); + } + + @Test public void testRoundDecimalExpressionNoop() throws Exception { LiteralExpression decimalLiteral = LiteralExpression.newConstant(5, PInteger.INSTANCE); Expression roundDecimalExpression = RoundDecimalExpression.create(decimalLiteral, 3);