Github user jackylk commented on a diff in the pull request:
https://github.com/apache/carbondata/pull/2863#discussion_r233340004
--- Diff:
core/src/main/java/org/apache/carbondata/core/datastore/page/encoding/compress/DirectCompressCodec.java
---
@@ -224,130 +238,134 @@ public void decodeAndFillVector(ColumnPage
columnPage, ColumnVectorInfo vectorIn
}
}
- private void fillVector(ColumnPage columnPage, CarbonColumnVector
vector,
- DataType vectorDataType, DataType pageDataType, int pageSize,
ColumnVectorInfo vectorInfo) {
+ private void fillVector(byte[] pageData, CarbonColumnVector vector,
DataType vectorDataType,
+ DataType pageDataType, int pageSize, ColumnVectorInfo vectorInfo,
BitSet nullBits) {
+ int rowId = 0;
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]);
+ vector.putShort(i, (short) pageData[i]);
}
} else if (vectorDataType == DataTypes.INT) {
for (int i = 0; i < pageSize; i++) {
- vector.putInt(i, (int) byteData[i]);
+ vector.putInt(i, (int) pageData[i]);
}
} else if (vectorDataType == DataTypes.LONG) {
for (int i = 0; i < pageSize; i++) {
- vector.putLong(i, byteData[i]);
+ vector.putLong(i, pageData[i]);
}
} else if (vectorDataType == DataTypes.TIMESTAMP) {
for (int i = 0; i < pageSize; i++) {
- vector.putLong(i, (long) byteData[i] * 1000);
+ vector.putLong(i, (long) pageData[i] * 1000);
}
} else if (vectorDataType == DataTypes.BOOLEAN || vectorDataType
== DataTypes.BYTE) {
- vector.putBytes(0, pageSize, byteData, 0);
+ vector.putBytes(0, pageSize, pageData, 0);
} else if (DataTypes.isDecimal(vectorDataType)) {
DecimalConverterFactory.DecimalConverter decimalConverter =
vectorInfo.decimalConverter;
- decimalConverter.fillVector(byteData, pageSize, vectorInfo,
columnPage.getNullBits());
+ decimalConverter.fillVector(pageData, pageSize, vectorInfo,
nullBits, pageDataType);
} else {
for (int i = 0; i < pageSize; i++) {
- vector.putDouble(i, byteData[i]);
+ vector.putDouble(i, pageData[i]);
}
}
} else if (pageDataType == DataTypes.SHORT) {
- short[] shortData = columnPage.getShortPage();
+ int size = pageSize * DataTypes.SHORT.getSizeInBytes();
if (vectorDataType == DataTypes.SHORT) {
- vector.putShorts(0, pageSize, shortData, 0);
+ for (int i = 0; i < size; i += DataTypes.SHORT.getSizeInBytes())
{
+ vector.putShort(rowId++,
(ByteUtil.toShortLittleEndian(pageData, i)));
+ }
} else if (vectorDataType == DataTypes.INT) {
- for (int i = 0; i < pageSize; i++) {
- vector.putInt(i, (int) shortData[i]);
+ for (int i = 0; i < size; i += DataTypes.SHORT.getSizeInBytes())
{
+ vector.putInt(rowId++, ByteUtil.toShortLittleEndian(pageData,
i));
}
} else if (vectorDataType == DataTypes.LONG) {
- for (int i = 0; i < pageSize; i++) {
- vector.putLong(i, shortData[i]);
+ for (int i = 0; i < size; i += DataTypes.SHORT.getSizeInBytes())
{
+ vector.putLong(rowId++, ByteUtil.toShortLittleEndian(pageData,
i));
}
} else if (vectorDataType == DataTypes.TIMESTAMP) {
- for (int i = 0; i < pageSize; i++) {
- vector.putLong(i, (long) shortData[i] * 1000);
+ for (int i = 0; i < size; i += DataTypes.SHORT.getSizeInBytes())
{
+ vector.putLong(rowId++, (long)
ByteUtil.toShortLittleEndian(pageData, i) * 1000);
}
} else if (DataTypes.isDecimal(vectorDataType)) {
DecimalConverterFactory.DecimalConverter decimalConverter =
vectorInfo.decimalConverter;
- decimalConverter.fillVector(shortData, pageSize, vectorInfo,
columnPage.getNullBits());
+ decimalConverter.fillVector(pageData, pageSize, vectorInfo,
nullBits, pageDataType);
} else {
- for (int i = 0; i < pageSize; i++) {
- vector.putDouble(i, shortData[i]);
+ for (int i = 0; i < size; i += DataTypes.SHORT.getSizeInBytes())
{
+ vector.putDouble(rowId++,
ByteUtil.toShortLittleEndian(pageData, i));
}
}
} else if (pageDataType == DataTypes.SHORT_INT) {
- byte[] shortIntPage = columnPage.getShortIntPage();
if (vectorDataType == DataTypes.INT) {
for (int i = 0; i < pageSize; i++) {
- int shortInt = ByteUtil.valueOf3Bytes(shortIntPage, i * 3);
+ int shortInt = ByteUtil.valueOf3Bytes(pageData, i * 3);
vector.putInt(i, shortInt);
}
} else if (vectorDataType == DataTypes.LONG) {
for (int i = 0; i < pageSize; i++) {
- int shortInt = ByteUtil.valueOf3Bytes(shortIntPage, i * 3);
+ int shortInt = ByteUtil.valueOf3Bytes(pageData, i * 3);
vector.putLong(i, shortInt);
}
} else if (vectorDataType == DataTypes.TIMESTAMP) {
for (int i = 0; i < pageSize; i++) {
- int shortInt = ByteUtil.valueOf3Bytes(shortIntPage, i * 3);
+ int shortInt = ByteUtil.valueOf3Bytes(pageData, i * 3);
vector.putLong(i, (long) shortInt * 1000);
}
} else if (DataTypes.isDecimal(vectorDataType)) {
DecimalConverterFactory.DecimalConverter decimalConverter =
vectorInfo.decimalConverter;
- int[] shortIntData = ByteUtil.toIntArrayFrom3Bytes(shortIntPage,
pageSize);
- decimalConverter.fillVector(shortIntData, pageSize, vectorInfo,
columnPage.getNullBits());
+ decimalConverter.fillVector(pageData, pageSize, vectorInfo,
nullBits, pageDataType);
} else {
for (int i = 0; i < pageSize; i++) {
- int shortInt = ByteUtil.valueOf3Bytes(shortIntPage, i * 3);
+ int shortInt = ByteUtil.valueOf3Bytes(pageData, i * 3);
vector.putDouble(i, shortInt);
}
}
} else if (pageDataType == DataTypes.INT) {
- int[] intData = columnPage.getIntPage();
+ int size = pageSize * DataTypes.INT.getSizeInBytes();
if (vectorDataType == DataTypes.INT) {
- vector.putInts(0, pageSize, intData, 0);
+ for (int i = 0; i < size; i += DataTypes.INT.getSizeInBytes()) {
+ vector.putInt(rowId++, ByteUtil.toIntLittleEndian(pageData,
i));
+ }
} else if (vectorDataType == DataTypes.LONG) {
- for (int i = 0; i < pageSize; i++) {
- vector.putLong(i, intData[i]);
+ for (int i = 0; i < size; i += DataTypes.INT.getSizeInBytes()) {
--- End diff --
same as above comment
---