in hadoop/src/main/java/org/apache/carbondata/hadoop/stream/StreamRecordReader.java [355:537]
protected void readRowFromStream() {
input.nextRow();
short nullLen = input.readShort();
BitSet nullBitSet = allNonNull;
if (nullLen > 0) {
nullBitSet = BitSet.valueOf(input.readBytes(nullLen));
}
int colCount = 0;
// primitive type dimension
for (; colCount < isNoDictColumn.length; colCount++) {
if (nullBitSet.get(colCount)) {
if (isFilterRequired[colCount]) {
filterValues[filterMap[colCount]] = CarbonCommonConstants.MEMBER_DEFAULT_VAL_ARRAY;
}
if (isProjectionRequired[colCount]) {
outputValues[projectionMap[colCount]] = null;
}
} else {
if (isNoDictColumn[colCount]) {
int v;
if (dimensionsIsVarcharTypeMap[colCount]) {
v = input.readInt();
} else {
v = input.readShort();
}
if (isRequired[colCount]) {
byte[] b = input.readBytes(v);
if (isFilterRequired[colCount]) {
filterValues[filterMap[colCount]] = b;
}
if (isProjectionRequired[colCount]) {
outputValues[projectionMap[colCount]] = DataTypeUtil
.getDataBasedOnDataTypeForNoDictionaryColumn(b,
storageColumns[colCount].getDataType());
}
} else {
input.skipBytes(v);
}
} else if (null != directDictionaryGenerators[colCount]) {
if (isRequired[colCount]) {
if (isFilterRequired[colCount]) {
filterValues[filterMap[colCount]] = input.copy(4);
}
if (isProjectionRequired[colCount]) {
outputValues[projectionMap[colCount]] =
directDictionaryGenerators[colCount].getValueFromSurrogate(input.readInt());
} else {
input.skipBytes(4);
}
} else {
input.skipBytes(4);
}
} else {
if (isRequired[colCount]) {
if (isFilterRequired[colCount]) {
filterValues[filterMap[colCount]] = input.copy(4);
}
if (isProjectionRequired[colCount]) {
outputValues[projectionMap[colCount]] = input.readInt();
} else {
input.skipBytes(4);
}
} else {
input.skipBytes(4);
}
}
}
}
// complex type dimension
for (; colCount < dimensionCount; colCount++) {
if (nullBitSet.get(colCount)) {
if (isFilterRequired[colCount]) {
filterValues[filterMap[colCount]] = null;
}
if (isProjectionRequired[colCount]) {
outputValues[projectionMap[colCount]] = null;
}
} else {
short v = input.readShort();
if (isRequired[colCount]) {
byte[] b = input.readBytes(v);
if (isFilterRequired[colCount]) {
filterValues[filterMap[colCount]] = b;
}
if (isProjectionRequired[colCount]) {
outputValues[projectionMap[colCount]] =
queryTypes[colCount].getDataBasedOnDataType(ByteBuffer.wrap(b));
}
} else {
input.skipBytes(v);
}
}
}
// measure
DataType dataType;
for (int msrCount = 0; msrCount < measureCount; msrCount++, colCount++) {
if (nullBitSet.get(colCount)) {
if (isFilterRequired[colCount]) {
filterValues[filterMap[colCount]] = null;
}
if (isProjectionRequired[colCount]) {
outputValues[projectionMap[colCount]] = null;
}
} else {
dataType = measureDataTypes[msrCount];
if (dataType == DataTypes.BOOLEAN) {
if (isRequired[colCount]) {
boolean v = input.readBoolean();
if (isFilterRequired[colCount]) {
filterValues[filterMap[colCount]] = v;
}
if (isProjectionRequired[colCount]) {
outputValues[projectionMap[colCount]] = v;
}
} else {
input.skipBytes(1);
}
} else if (dataType == DataTypes.SHORT) {
if (isRequired[colCount]) {
short v = input.readShort();
if (isFilterRequired[colCount]) {
filterValues[filterMap[colCount]] = v;
}
if (isProjectionRequired[colCount]) {
outputValues[projectionMap[colCount]] = v;
}
} else {
input.skipBytes(2);
}
} else if (dataType == DataTypes.INT) {
if (isRequired[colCount]) {
int v = input.readInt();
if (isFilterRequired[colCount]) {
filterValues[filterMap[colCount]] = v;
}
if (isProjectionRequired[colCount]) {
outputValues[projectionMap[colCount]] = v;
}
} else {
input.skipBytes(4);
}
} else if (dataType == DataTypes.LONG) {
if (isRequired[colCount]) {
long v = input.readLong();
if (isFilterRequired[colCount]) {
filterValues[filterMap[colCount]] = v;
}
if (isProjectionRequired[colCount]) {
outputValues[projectionMap[colCount]] = v;
}
} else {
input.skipBytes(8);
}
} else if (dataType == DataTypes.DOUBLE) {
if (isRequired[colCount]) {
double v = input.readDouble();
if (isFilterRequired[colCount]) {
filterValues[filterMap[colCount]] = v;
}
if (isProjectionRequired[colCount]) {
outputValues[projectionMap[colCount]] = v;
}
} else {
input.skipBytes(8);
}
} else if (DataTypes.isDecimal(dataType)) {
int len = input.readShort();
if (isRequired[colCount]) {
BigDecimal v = DataTypeUtil.byteToBigDecimal(input.readBytes(len));
if (isFilterRequired[colCount]) {
filterValues[filterMap[colCount]] = v;
}
if (isProjectionRequired[colCount]) {
outputValues[projectionMap[colCount]] =
DataTypeUtil.getDataTypeConverter().convertFromBigDecimalToDecimal(v);
}
} else {
input.skipBytes(len);
}
}
}
}
}