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`


---

Reply via email to