Github user gvramana commented on a diff in the pull request:
https://github.com/apache/carbondata/pull/2417#discussion_r199481217
--- Diff:
core/src/main/java/org/apache/carbondata/core/datastore/chunk/store/ColumnPageWrapper.java
---
@@ -77,14 +127,70 @@ public boolean isExplicitSorted() {
return false;
}
- @Override
- public int compareTo(int rowId, byte[] compareValue) {
- throw new UnsupportedOperationException("internal error");
+ @Override public int compareTo(int rowId, byte[] compareValue) {
+ throw new UnsupportedOperationException(
+ "internal error: should be called for only dictionary columns");
}
@Override
public void freeMemory() {
}
+ private void fillData(int[] rowMapping, ColumnVectorInfo
columnVectorInfo,
+ CarbonColumnVector vector) {
+ int offsetRowId = columnVectorInfo.offset;
+ int vectorOffset = columnVectorInfo.vectorOffset;
+ int maxRowId = offsetRowId + columnVectorInfo.size;
+ BitSet nullBitSet = columnPage.getNullBits();
+ TableSpec.ColumnSpec columnSpec = columnPage.getColumnSpec();
+ if (columnSpec.getColumnType() == PLAIN_VALUE) {
+ for (int rowId = offsetRowId; rowId < maxRowId; rowId++) {
+ int currentRowId = (rowMapping == null) ? rowId :
rowMapping[rowId];
+ if (nullBitSet.get(currentRowId)) {
+ // to handle the null values
+ vector.putNull(vectorOffset++);
+ } else {
+ if (columnSpec.getSchemaDataType() == DataTypes.STRING) {
+ byte[] data = columnPage.getBytes(currentRowId);
+ if (ByteUtil.UnsafeComparer.INSTANCE
+ .equals(CarbonCommonConstants.MEMBER_DEFAULT_VAL_ARRAY,
data)) {
+ vector.putNull(vectorOffset++);
+ } else {
+ vector.putBytes(vectorOffset++, 0, data.length, data);
+ }
+ } else if (columnSpec.getSchemaDataType() == DataTypes.BOOLEAN) {
+ boolean data = columnPage.getBoolean(currentRowId);
+ vector.putBoolean(vectorOffset++, data);
+ } else if (columnSpec.getSchemaDataType() == DataTypes.SHORT) {
+ short data = columnPage.getShort(currentRowId);
+ vector.putShort(vectorOffset++, data);
--- End diff --
Use Switch instead of ifelse
---