GitHub user anubhav100 opened a pull request:
https://github.com/apache/carbondata/pull/1934
[CARBONDATA-2133] Fixed Exception displays after performing select query on
newly added Boolean Type
**Problem** : In Restructure util and
RestructureBasedVectorResultCollector to get the default value of a measure
type the case for boolean data type was missing,and in DataTypeUtil to store
default value in bytes case of boolean data type was missing
**Solution**:Add the Required Cases
**Complete Description**:
**Classes changed**:
1.**RestructureBasedVectorResultCollector**:
**in the below method case for boolean data type was missing**
private void fillDataForNonExistingMeasures() {
for (int i = 0; i <
tableBlockExecutionInfos.getActualQueryMeasures().length; i++) {
if (!measureInfo.getMeasureExists()[i]) {
int queryOrder =
tableBlockExecutionInfos.getActualQueryMeasures()[i].getQueryOrder();
CarbonMeasure measure =
tableBlockExecutionInfos.getActualQueryMeasures()[i].getMeasure();
ColumnVectorInfo columnVectorInfo = allColumnInfo[queryOrder];
CarbonColumnVector vector = columnVectorInfo.vector;
Object defaultValue = measureDefaultValues[i];
if (null == defaultValue) {
vector.putNulls(columnVectorInfo.vectorOffset,
columnVectorInfo.size);
} else {
DataType dataType = measureInfo.getMeasureDataTypes()[i];
if (dataType == DataTypes.SHORT) {
vector.putShorts(columnVectorInfo.vectorOffset,
columnVectorInfo.size,
(short) defaultValue);
} else if (dataType == DataTypes.INT) {
vector
.putInts(columnVectorInfo.vectorOffset,
columnVectorInfo.size, (int) defaultValue);
} else if (dataType == DataTypes.LONG) {
vector.putLongs(columnVectorInfo.vectorOffset,
columnVectorInfo.size,
(long) defaultValue);
} else if (DataTypes.isDecimal(dataType)) {
vector.putDecimals(columnVectorInfo.vectorOffset,
columnVectorInfo.size,
((Decimal) defaultValue).toJavaBigDecimal(),
measure.getPrecision());
} else {
vector.putDoubles(columnVectorInfo.vectorOffset,
columnVectorInfo.size,
(double) defaultValue);
}
}
}
}
}
2.**RestructureUtil**:
**in below methods getMeasureDefaultValue,getMeasureDefaultValueByType the
if statement for boolean data type was missing**
public static Object getMeasureDefaultValue(ColumnSchema columnSchema,
byte[] defaultValue) {
Object measureDefaultValue = null;
if (!isDefaultValueNull(defaultValue)) {
String value;
DataType dataType = columnSchema.getDataType();
if (dataType == DataTypes.SHORT) {
value = new String(defaultValue,
Charset.forName(CarbonCommonConstants.DEFAULT_CHARSET));
measureDefaultValue = Short.valueOf(value);
} else if (dataType == DataTypes.LONG) {
value = new String(defaultValue,
Charset.forName(CarbonCommonConstants.DEFAULT_CHARSET));
measureDefaultValue = Long.parseLong(value);
} else if (dataType == DataTypes.INT) {
value = new String(defaultValue,
Charset.forName(CarbonCommonConstants.DEFAULT_CHARSET));
measureDefaultValue = Integer.parseInt(value);
} else if (DataTypes.isDecimal(dataType)) {
BigDecimal decimal = DataTypeUtil.byteToBigDecimal(defaultValue);
if (columnSchema.getScale() > decimal.scale()) {
decimal = decimal.setScale(columnSchema.getScale(),
RoundingMode.HALF_UP);
}
measureDefaultValue = decimal;
} else {
value = new String(defaultValue,
Charset.forName(CarbonCommonConstants.DEFAULT_CHARSET));
Double parsedValue = Double.valueOf(value);
if (!Double.isInfinite(parsedValue) && !Double.isNaN(parsedValue)) {
measureDefaultValue = parsedValue;
}
}
}
return measureDefaultValue;
}
3.**DatatypeUtil**: To store default value on bytes case of boolean data
type was missing
public static byte[] convertDataToBytesBasedOnDataType(String data,
ColumnSchema columnSchema) {
if (null == data) {
return null;
} else if (CarbonCommonConstants.MEMBER_DEFAULT_VAL.equals(data)) {
LOGGER.error("Default value should not be carbon specific null value
: " + data);
return null;
}
try {
long parsedIntVal = 0;
DataType dataType = columnSchema.getDataType();
if (dataType == DataTypes.INT) {
parsedIntVal = (long)