DRILL-730: Initialize the buffer while creating sparse representation from BigDecimal
Project: http://git-wip-us.apache.org/repos/asf/incubator-drill/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-drill/commit/ae738751 Tree: http://git-wip-us.apache.org/repos/asf/incubator-drill/tree/ae738751 Diff: http://git-wip-us.apache.org/repos/asf/incubator-drill/diff/ae738751 Branch: refs/heads/master Commit: ae7387519cac382f2e1789c00b7f843ca0b28a5b Parents: e1cf5c2 Author: Mehant Baid <[email protected]> Authored: Sun Jul 6 19:02:56 2014 -0700 Committer: Jacques Nadeau <[email protected]> Committed: Mon Jul 7 14:50:32 2014 -0700 ---------------------------------------------------------------------- .../apache/drill/common/util/DecimalUtility.java | 5 +++++ .../templates/Decimal/CastFloatDecimal.java | 10 +--------- .../Decimal/DecimalAggrTypeFunctions1.java | 3 --- .../Decimal/DecimalAggrTypeFunctions2.java | 3 --- .../templates/Decimal/DecimalFunctions.java | 18 ------------------ 5 files changed, 6 insertions(+), 33 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/ae738751/common/src/main/java/org/apache/drill/common/util/DecimalUtility.java ---------------------------------------------------------------------- diff --git a/common/src/main/java/org/apache/drill/common/util/DecimalUtility.java b/common/src/main/java/org/apache/drill/common/util/DecimalUtility.java index 465cf82..8311d82 100644 --- a/common/src/main/java/org/apache/drill/common/util/DecimalUtility.java +++ b/common/src/main/java/org/apache/drill/common/util/DecimalUtility.java @@ -268,6 +268,11 @@ public class DecimalUtility { */ public static void getSparseFromBigDecimal(BigDecimal input, ByteBuf data, int startIndex, int scale, int precision, int nDecimalDigits) { + // Initialize the buffer + for (int i = 0; i < nDecimalDigits; i++) { + data.setInt(startIndex + (i * integerSize), 0); + } + boolean sign = false; if (input.signum() == -1) { http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/ae738751/exec/java-exec/src/main/codegen/templates/Decimal/CastFloatDecimal.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/codegen/templates/Decimal/CastFloatDecimal.java b/exec/java-exec/src/main/codegen/templates/Decimal/CastFloatDecimal.java index 903634b..f4a5c77 100644 --- a/exec/java-exec/src/main/codegen/templates/Decimal/CastFloatDecimal.java +++ b/exec/java-exec/src/main/codegen/templates/Decimal/CastFloatDecimal.java @@ -70,15 +70,7 @@ public class Cast${type.from}${type.to} implements DrillSimpleFunc { out.start = 0; out.buffer = buffer; - // Initialize the buffer - for (int i = 0; i < ${type.arraySize}; i++) { - out.setInteger(i, 0); - } - - if (in.value < 0) { - out.setSign(true); - } - // Assign the integer part of the decimal to the output holder + // Assign the integer part of the decimal to the output holder org.apache.drill.common.util.DecimalUtility.getSparseFromBigDecimal(new java.math.BigDecimal(String.valueOf(in.value)), out.buffer, out.start, out.scale, out.precision, out.nDecimalDigits); <#elseif type.to.endsWith("Decimal9")> http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/ae738751/exec/java-exec/src/main/codegen/templates/Decimal/DecimalAggrTypeFunctions1.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/codegen/templates/Decimal/DecimalAggrTypeFunctions1.java b/exec/java-exec/src/main/codegen/templates/Decimal/DecimalAggrTypeFunctions1.java index f284a19..8588f76 100644 --- a/exec/java-exec/src/main/codegen/templates/Decimal/DecimalAggrTypeFunctions1.java +++ b/exec/java-exec/src/main/codegen/templates/Decimal/DecimalAggrTypeFunctions1.java @@ -184,9 +184,6 @@ public static class ${type.inputType}${aggrtype.className} implements DrillAggFu out.start = 0; out.scale = outputScale; out.precision = 38; - for (int i = 0; i < out.nDecimalDigits; i++) { - out.setInteger(i, 0); - } value = value.setScale(out.scale, java.math.BigDecimal.ROUND_HALF_UP); org.apache.drill.common.util.DecimalUtility.getSparseFromBigDecimal(value, out.buffer, out.start, out.scale, out.precision, out.nDecimalDigits); <#else> http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/ae738751/exec/java-exec/src/main/codegen/templates/Decimal/DecimalAggrTypeFunctions2.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/codegen/templates/Decimal/DecimalAggrTypeFunctions2.java b/exec/java-exec/src/main/codegen/templates/Decimal/DecimalAggrTypeFunctions2.java index 60d708a..f036655 100644 --- a/exec/java-exec/src/main/codegen/templates/Decimal/DecimalAggrTypeFunctions2.java +++ b/exec/java-exec/src/main/codegen/templates/Decimal/DecimalAggrTypeFunctions2.java @@ -100,9 +100,6 @@ public static class ${type.inputType}${aggrtype.className} implements DrillAggFu out.start = 0; out.scale = outputScale; out.precision = 38; - for (int i = 0; i < out.nDecimalDigits; i++) { - out.setInteger(i, 0); - } java.math.BigDecimal average = value.divide(java.math.BigDecimal.valueOf(count.value, 0), out.scale, java.math.BigDecimal.ROUND_HALF_UP); org.apache.drill.common.util.DecimalUtility.getSparseFromBigDecimal(average, out.buffer, out.start, out.scale, out.precision, out.nDecimalDigits); } http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/ae738751/exec/java-exec/src/main/codegen/templates/Decimal/DecimalFunctions.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/codegen/templates/Decimal/DecimalFunctions.java b/exec/java-exec/src/main/codegen/templates/Decimal/DecimalFunctions.java index b5a69f1..2118cab 100644 --- a/exec/java-exec/src/main/codegen/templates/Decimal/DecimalFunctions.java +++ b/exec/java-exec/src/main/codegen/templates/Decimal/DecimalFunctions.java @@ -287,10 +287,6 @@ public class ${type.name}Functions { result.buffer = buffer; result.start = 0; - // Re initialize the buffer everytime - for (int i = 0; i < ${type.storage}; i++) { - result.setInteger(i, 0); - } java.math.BigDecimal leftInput = org.apache.drill.common.util.DecimalUtility.getBigDecimalFromSparse(left.buffer, left.start, left.nDecimalDigits, left.scale); java.math.BigDecimal rightInput = org.apache.drill.common.util.DecimalUtility.getBigDecimalFromSparse(right.buffer, right.start, right.nDecimalDigits, right.scale); java.math.BigDecimal addResult = leftInput.subtract(rightInput); @@ -330,10 +326,6 @@ public class ${type.name}Functions { result.buffer = buffer; result.start = 0; - // Re initialize the buffer everytime - for (int i = 0; i < ${type.storage}; i++) { - result.setInteger(i, 0); - } java.math.BigDecimal leftInput = org.apache.drill.common.util.DecimalUtility.getBigDecimalFromSparse(left.buffer, left.start, left.nDecimalDigits, left.scale); java.math.BigDecimal rightInput = org.apache.drill.common.util.DecimalUtility.getBigDecimalFromSparse(right.buffer, right.start, right.nDecimalDigits, right.scale); java.math.BigDecimal addResult = leftInput.add(rightInput); @@ -547,11 +539,6 @@ public class ${type.name}Functions { java.math.BigDecimal output = numerator.divide(denominator, (int) result.scale, java.math.BigDecimal.ROUND_DOWN); - // Initialize the result buffer - for (int i = 0; i < ${type.storage}; i++) { - result.setInteger(i, 0); - } - org.apache.drill.common.util.DecimalUtility.getSparseFromBigDecimal(output, result.buffer, result.start, result.scale, result.precision, result.nDecimalDigits); } } @@ -591,11 +578,6 @@ public class ${type.name}Functions { java.math.BigDecimal output = numerator.remainder(denominator); output.setScale(result.scale, java.math.BigDecimal.ROUND_DOWN); - // Initialize the result buffer - for (int i = 0; i < ${type.storage}; i++) { - result.setInteger(i, 0); - } - org.apache.drill.common.util.DecimalUtility.getSparseFromBigDecimal(output, result.buffer, result.start, result.scale, result.precision, result.nDecimalDigits); } }
