diff options
author | shuifeng lu <lushuifeng@gmail.com> | 2018-09-26 11:22:20 +0800 |
---|---|---|
committer | Ben-Zvi <bben-zvi@mapr.com> | 2018-10-26 20:09:12 -0700 |
commit | 18e09a1b1c801f2691a05ae7db543bf71874cfea (patch) | |
tree | d46867d40be8f526981dcde351bcec51f68c0f70 /exec/vector | |
parent | f39c7724cbbbe04a53ce98b74dfada46b37ecb0d (diff) |
DRILL-6763: Codegen optimization of SQL functions with constant values(#1481)
closes #1481
Diffstat (limited to 'exec/vector')
-rw-r--r-- | exec/vector/src/main/java/org/apache/drill/exec/vector/ValueHolderHelper.java | 36 |
1 files changed, 23 insertions, 13 deletions
diff --git a/exec/vector/src/main/java/org/apache/drill/exec/vector/ValueHolderHelper.java b/exec/vector/src/main/java/org/apache/drill/exec/vector/ValueHolderHelper.java index 52afbe0cb..7087687c1 100644 --- a/exec/vector/src/main/java/org/apache/drill/exec/vector/ValueHolderHelper.java +++ b/exec/vector/src/main/java/org/apache/drill/exec/vector/ValueHolderHelper.java @@ -169,10 +169,13 @@ public class ValueHolderHelper { } public static Decimal28SparseHolder getDecimal28Holder(DrillBuf buf, String decimal) { + BigDecimal bigDecimal = new BigDecimal(decimal); - Decimal28SparseHolder dch = new Decimal28SparseHolder(); + return getDecimal28Holder(buf, bigDecimal); + } - BigDecimal bigDecimal = new BigDecimal(decimal); + public static Decimal28SparseHolder getDecimal28Holder(DrillBuf buf, BigDecimal bigDecimal) { + Decimal28SparseHolder dch = new Decimal28SparseHolder(); dch.scale = bigDecimal.scale(); dch.precision = bigDecimal.precision(); @@ -180,33 +183,40 @@ public class ValueHolderHelper { dch.start = 0; dch.buffer = buf.reallocIfNeeded(5 * DecimalUtility.INTEGER_SIZE); DecimalUtility - .getSparseFromBigDecimal(bigDecimal, dch.buffer, dch.start, dch.scale, Decimal28SparseHolder.nDecimalDigits); + .getSparseFromBigDecimal(bigDecimal, dch.buffer, dch.start, dch.scale, Decimal28SparseHolder.nDecimalDigits); return dch; } public static Decimal38SparseHolder getDecimal38Holder(DrillBuf buf, String decimal) { + BigDecimal bigDecimal = new BigDecimal(decimal); - Decimal38SparseHolder dch = new Decimal38SparseHolder(); + return getDecimal38Holder(buf, bigDecimal); + } - BigDecimal bigDecimal = new BigDecimal(decimal); + public static Decimal38SparseHolder getDecimal38Holder(DrillBuf buf, BigDecimal bigDecimal) { + Decimal38SparseHolder dch = new Decimal38SparseHolder(); - dch.scale = bigDecimal.scale(); - dch.precision = bigDecimal.precision(); - Decimal38SparseHolder.setSign(bigDecimal.signum() == -1, dch.start, dch.buffer); - dch.start = 0; + dch.scale = bigDecimal.scale(); + dch.precision = bigDecimal.precision(); + Decimal38SparseHolder.setSign(bigDecimal.signum() == -1, dch.start, dch.buffer); + dch.start = 0; dch.buffer = buf.reallocIfNeeded(Decimal38SparseHolder.maxPrecision * DecimalUtility.INTEGER_SIZE); DecimalUtility - .getSparseFromBigDecimal(bigDecimal, dch.buffer, dch.start, dch.scale, Decimal38SparseHolder.nDecimalDigits); + .getSparseFromBigDecimal(bigDecimal, dch.buffer, dch.start, dch.scale, Decimal38SparseHolder.nDecimalDigits); - return dch; + return dch; } public static VarDecimalHolder getVarDecimalHolder(DrillBuf buf, String decimal) { - VarDecimalHolder dch = new VarDecimalHolder(); - BigDecimal bigDecimal = new BigDecimal(decimal); + return getVarDecimalHolder(buf, bigDecimal); + } + + public static VarDecimalHolder getVarDecimalHolder(DrillBuf buf, BigDecimal bigDecimal) { + VarDecimalHolder dch = new VarDecimalHolder(); + byte[] bytes = bigDecimal.unscaledValue().toByteArray(); int length = bytes.length; |