aboutsummaryrefslogtreecommitdiff
path: root/exec/vector/src/main/codegen/templates/VariableLengthVectors.java
diff options
context:
space:
mode:
Diffstat (limited to 'exec/vector/src/main/codegen/templates/VariableLengthVectors.java')
-rw-r--r--exec/vector/src/main/codegen/templates/VariableLengthVectors.java22
1 files changed, 21 insertions, 1 deletions
diff --git a/exec/vector/src/main/codegen/templates/VariableLengthVectors.java b/exec/vector/src/main/codegen/templates/VariableLengthVectors.java
index 8ab4c3a48..6a67772ce 100644
--- a/exec/vector/src/main/codegen/templates/VariableLengthVectors.java
+++ b/exec/vector/src/main/codegen/templates/VariableLengthVectors.java
@@ -464,6 +464,10 @@ public final class ${minor.class}Vector extends BaseDataValueVector implements V
holder.start = oAccessor.get(index);
holder.end = oAccessor.get(index + 1);
holder.buffer = data;
+ <#if minor.class.contains("Decimal")>
+ holder.scale = field.getScale();
+ holder.precision = field.getPrecision();
+ </#if>
}
public void get(int index, Nullable${minor.class}Holder holder){
@@ -471,6 +475,10 @@ public final class ${minor.class}Vector extends BaseDataValueVector implements V
holder.start = oAccessor.get(index);
holder.end = oAccessor.get(index + 1);
holder.buffer = data;
+ <#if minor.class.contains("Decimal")>
+ holder.scale = field.getScale();
+ holder.precision = field.getPrecision();
+ </#if>
}
<#switch minor.class>
@@ -478,7 +486,7 @@ public final class ${minor.class}Vector extends BaseDataValueVector implements V
@Override
public ${friendlyType} getObject(int index) {
byte[] b = get(index);
- BigInteger bi = b.length == 0 ? new BigInteger("0") : new BigInteger(b);
+ BigInteger bi = b.length == 0 ? BigInteger.ZERO : new BigInteger(b);
BigDecimal bd = new BigDecimal(bi, getField().getScale());
return bd;
}
@@ -672,6 +680,18 @@ public final class ${minor.class}Vector extends BaseDataValueVector implements V
offsetVector.getMutator().setSafe(index + 1, outputStart + len);
}
+ <#if minor.class == "VarDecimal">
+ public void set(int index, BigDecimal value) {
+ byte[] bytes = value.unscaledValue().toByteArray();
+ set(index, bytes, 0, bytes.length);
+ }
+
+ public void setSafe(int index, BigDecimal value) {
+ byte[] bytes = value.unscaledValue().toByteArray();
+ setSafe(index, bytes, 0, bytes.length);
+ }
+ </#if>
+
public void setSafe(int index, ${minor.class}Holder holder) {
final int start = holder.start;
final int end = holder.end;