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
---