public void writeByteArray()

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);
    }
  }