Github user manishgupta88 commented on a diff in the pull request:
https://github.com/apache/carbondata/pull/2730#discussion_r224776123
--- Diff:
core/src/main/java/org/apache/carbondata/core/metadata/datatype/DecimalConverterFactory.java
---
@@ -95,6 +100,51 @@ public int getSizeInBytes() {
return BigDecimal.valueOf((Long) valueToBeConverted, scale);
}
+ @Override public void fillVector(Object valuesToBeConverted, int size,
ColumnVectorInfo info,
+ BitSet nullBitset) {
+ // TODO we need to find way to directly set to vector with out
conversion. This way is very
+ // inefficient.
+ CarbonColumnVector vector = info.vector;
+ int precision = info.measure.getMeasure().getPrecision();
+ if (valuesToBeConverted instanceof byte[]) {
+ byte[] data = (byte[]) valuesToBeConverted;
+ for (int i = 0; i < size; i++) {
+ if (nullBitset.get(i)) {
+ vector.putNull(i);
+ } else {
+ vector.putDecimal(i, BigDecimal.valueOf(data[i], scale),
precision);
+ }
+ }
+ } else if (valuesToBeConverted instanceof short[]) {
+ short[] data = (short[]) valuesToBeConverted;
+ for (int i = 0; i < size; i++) {
+ if (nullBitset.get(i)) {
+ vector.putNull(i);
+ } else {
+ vector.putDecimal(i, BigDecimal.valueOf(data[i], scale),
precision);
+ }
+ }
+ } else if (valuesToBeConverted instanceof int[]) {
+ int[] data = (int[]) valuesToBeConverted;
+ for (int i = 0; i < size; i++) {
+ if (nullBitset.get(i)) {
+ vector.putNull(i);
+ } else {
+ vector.putDecimal(i, BigDecimal.valueOf(data[i], scale),
precision);
+ }
+ }
+ } else if (valuesToBeConverted instanceof long[]) {
+ long[] data = (long[]) valuesToBeConverted;
+ for (int i = 0; i < size; i++) {
+ if (nullBitset.get(i)) {
+ vector.putNull(i);
+ } else {
+ vector.putDecimal(i, BigDecimal.valueOf(data[i], scale),
precision);
+ }
+ }
--- End diff --
Alter scenario where precision and scale can be changed is not handled
here...please check for that case and handle...you can take reference from the
`DecimalMeasureVectorFiller`
---