aboutsummaryrefslogtreecommitdiff
path: root/exec/vector
diff options
context:
space:
mode:
authorshuifeng lu <lushuifeng@gmail.com>2018-09-26 11:22:20 +0800
committerBen-Zvi <bben-zvi@mapr.com>2018-10-26 20:09:12 -0700
commit18e09a1b1c801f2691a05ae7db543bf71874cfea (patch)
treed46867d40be8f526981dcde351bcec51f68c0f70 /exec/vector
parentf39c7724cbbbe04a53ce98b74dfada46b37ecb0d (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.java36
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;