Github user jackylk commented on a diff in the pull request:

    https://github.com/apache/carbondata/pull/2819#discussion_r227618801
  
    --- Diff: 
core/src/main/java/org/apache/carbondata/core/datastore/page/encoding/adaptive/AdaptiveIntegralCodec.java
 ---
    @@ -248,6 +269,143 @@ public double decodeDouble(float value) {
         public double decodeDouble(double value) {
           throw new RuntimeException("internal error: " + debugInfo());
         }
    +
    +    @Override
    +    public void decodeAndFillVector(ColumnPage columnPage, 
ColumnVectorInfo vectorInfo) {
    +      CarbonColumnVector vector = vectorInfo.vector;
    +      BitSet nullBits = columnPage.getNullBits();
    +      DataType vectorDataType = vector.getType();
    +      DataType pageDataType = columnPage.getDataType();
    +      int pageSize = columnPage.getPageSize();
    +      BitSet deletedRows = vectorInfo.deletedRows;
    +      fillVector(columnPage, vector, vectorDataType, pageDataType, 
pageSize, vectorInfo);
    +      if (deletedRows == null || deletedRows.isEmpty()) {
    +        for (int i = nullBits.nextSetBit(0); i >= 0; i = 
nullBits.nextSetBit(i + 1)) {
    +          vector.putNull(i);
    +        }
    +      }
    +    }
    +
    +    private void fillVector(ColumnPage columnPage, CarbonColumnVector 
vector,
    +        DataType vectorDataType, DataType pageDataType, int pageSize, 
ColumnVectorInfo vectorInfo) {
    +      if (pageDataType == DataTypes.BOOLEAN || pageDataType == 
DataTypes.BYTE) {
    +        byte[] byteData = columnPage.getBytePage();
    +        if (vectorDataType == DataTypes.SHORT) {
    +          for (int i = 0; i < pageSize; i++) {
    +            vector.putShort(i, (short) byteData[i]);
    +          }
    +        } else if (vectorDataType == DataTypes.INT) {
    +          for (int i = 0; i < pageSize; i++) {
    +            vector.putInt(i, (int) byteData[i]);
    +          }
    +        } else if (vectorDataType == DataTypes.LONG) {
    +          for (int i = 0; i < pageSize; i++) {
    +            vector.putLong(i, byteData[i]);
    +          }
    +        } else if (vectorDataType == DataTypes.TIMESTAMP) {
    +          for (int i = 0; i < pageSize; i++) {
    +            vector.putLong(i, byteData[i] * 1000);
    +          }
    +        } else if (vectorDataType == DataTypes.BOOLEAN) {
    +          vector.putBytes(0, pageSize, byteData, 0);
    +
    --- End diff --
    
    remove empty line


---

Reply via email to