in processing/src/main/java/org/apache/carbondata/processing/datatypes/PrimitiveDataType.java [239:339]
public void writeByteArray(Object input, DataOutputStream dataOutputStream,
BadRecordLogHolder logHolder, Boolean isWithoutConverter, boolean isEmptyBadRecord)
throws IOException {
String parsedValue = null;
// write null value
if (null == input || ((this.carbonDimension.getDataType() == DataTypes.STRING
|| this.carbonDimension.getDataType() == DataTypes.VARCHAR) && input.equals(nullFormat))) {
updateNullValue(dataOutputStream, logHolder);
return;
}
if (input.equals("")) {
CarbonBadRecordUtil.updateEmptyValue(dataOutputStream, isEmptyBadRecord, logHolder,
carbonDimension.getColName(), this.carbonDimension.getDataType());
return;
}
// write null value after converter
if (!isWithoutConverter) {
parsedValue = DataTypeUtil.parseValue(input.toString(), carbonDimension);
if (null == parsedValue || ((this.carbonDimension.getDataType() == DataTypes.STRING
|| this.carbonDimension.getDataType() == DataTypes.VARCHAR) && parsedValue
.equals(nullFormat))) {
updateNullValue(dataOutputStream, logHolder);
return;
}
}
// Transform into ByteArray for No Dictionary.
try {
if (!this.carbonDimension.getUseActualData()) {
byte[] value;
if (isDirectDictionary) {
value = writeDirectDictionary(input, parsedValue, isWithoutConverter);
} else {
// If the input is a long value then this means that logical type was provided by
// the user using AvroCarbonWriter. In this case directly generate Bytes from value.
if (this.carbonDimension.getDataType().equals(DataTypes.DATE)
|| this.carbonDimension.getDataType().equals(DataTypes.TIMESTAMP)
&& input instanceof Long) {
if (dictionaryGenerator != null) {
value = ByteUtil.toXorBytes(((DirectDictionary) dictionaryGenerator)
.generateKey((long) input));
} else {
if (isWithoutConverter) {
value = ByteUtil.toXorBytes((Long)input);
} else {
value = ByteUtil.toXorBytes(Long.parseLong(parsedValue));
}
}
} else if (this.carbonDimension.getDataType().equals(DataTypes.BINARY)) {
// write binary data type
if (binaryDecoder == null) {
value = DataTypeUtil.getBytesDataDataTypeForNoDictionaryColumn(input,
this.carbonDimension.getDataType());
} else {
if (isWithoutConverter) {
value = binaryDecoder.decode((String)input);
} else {
value = binaryDecoder.decode(parsedValue);
}
}
} else {
// write other data types
if (isWithoutConverter) {
value = DataTypeUtil.getBytesDataDataTypeForNoDictionaryColumn(input,
this.carbonDimension.getDataType());
} else {
value = DataTypeUtil.getBytesBasedOnDataTypeForNoDictionaryColumn(parsedValue,
this.carbonDimension.getDataType(), getDateOrTimeFormat());
}
}
if (this.carbonDimension.getDataType() == DataTypes.STRING
&& value.length > CarbonCommonConstants.MAX_CHARS_PER_COLUMN_DEFAULT) {
logHolder.setReason(String.format(CarbonCommonConstants.STRING_LENGTH_EXCEEDED_MESSAGE,
this.carbonDimension.getColName()));
updateNullValue(dataOutputStream, logHolder);
return;
}
}
updateValueToByteStream(dataOutputStream, value);
} else {
byte[] value;
if (dictionaryGenerator instanceof DirectDictionary
&& input instanceof Long) {
value = ByteUtil.toXorBytes(
((DirectDictionary) dictionaryGenerator).generateKey((long) input));
} else {
if (isWithoutConverter) {
value = DataTypeUtil.getBytesDataDataTypeForNoDictionaryColumn(input,
this.carbonDimension.getDataType());
} else {
value = DataTypeUtil.getBytesBasedOnDataTypeForNoDictionaryColumn(parsedValue,
this.carbonDimension.getDataType(), getDateOrTimeFormat());
}
}
checkAndWriteByteArray(input, dataOutputStream, logHolder, isWithoutConverter, parsedValue,
value);
}
} catch (NumberFormatException e) {
// Update logHolder for bad record and put null in dataOutputStream.
updateNullValue(dataOutputStream, logHolder);
}
}