Github user gvramana commented on a diff in the pull request: https://github.com/apache/carbondata/pull/2417#discussion_r199481192 --- Diff: core/src/main/java/org/apache/carbondata/core/datastore/chunk/store/ColumnPageWrapper.java --- @@ -30,32 +40,72 @@ public ColumnPageWrapper(ColumnPage columnPage) { this.columnPage = columnPage; } + public ColumnPage getColumnPage() { + return columnPage; + } + @Override public int fillRawData(int rowId, int offset, byte[] data, KeyStructureInfo restructuringInfo) { - throw new UnsupportedOperationException("internal error"); + throw new UnsupportedOperationException( + "internal error: should be called for only dictionary columns"); } @Override public int fillSurrogateKey(int rowId, int chunkIndex, int[] outputSurrogateKey, KeyStructureInfo restructuringInfo) { - throw new UnsupportedOperationException("internal error"); + throw new UnsupportedOperationException( + "internal error: should be called for only dictionary columns"); } @Override public int fillVector(ColumnVectorInfo[] vectorInfo, int chunkIndex, KeyStructureInfo restructuringInfo) { - throw new UnsupportedOperationException("internal error"); + // fill the vector with data in column page + ColumnVectorInfo columnVectorInfo = vectorInfo[chunkIndex]; + CarbonColumnVector vector = columnVectorInfo.vector; + fillData(null, columnVectorInfo, vector); + return chunkIndex + 1; } + @Override public int fillVector(int[] filteredRowId, ColumnVectorInfo[] vectorInfo, int chunkIndex, KeyStructureInfo restructuringInfo) { - throw new UnsupportedOperationException("internal error"); + ColumnVectorInfo columnVectorInfo = vectorInfo[chunkIndex]; + CarbonColumnVector vector = columnVectorInfo.vector; + fillData(filteredRowId, columnVectorInfo, vector); + return chunkIndex + 1; } - @Override - public byte[] getChunkData(int rowId) { - return columnPage.getBytes(rowId); + @Override public byte[] getChunkData(int rowId) { + ColumnType columnType = columnPage.getColumnSpec().getColumnType(); + // TODO: No need to convert to Byte array, handle like measure + // But interface currently doesn't support, need to add new interface. + if (columnType == ColumnType.PLAIN_VALUE) { + if (columnPage.getNullBits().get(rowId)) { + // if this row is null, return default null represent in byte array + return CarbonCommonConstants.MEMBER_DEFAULT_VAL_ARRAY; + } + if (columnPage.getDataType() == DataTypes.BYTE) { + byte byteData = columnPage.getByte(rowId); + return ByteUtil.toBytes(byteData); + } else if (columnPage.getDataType() == DataTypes.SHORT) { --- End diff -- Use Switch instead of ifelse
---