in odps-sdk/odps-sdk-core/src/main/java/com/aliyun/odps/data/converter/ObjectConverterFactory.java [778:862]
static OdpsObjectConverter getFormatter(OdpsType odpsType, OdpsRecordConverterBuilder.Config config) {
switch (odpsType) {
case TINYINT:
return TinyIntConverter.INSTANCE;
case SMALLINT:
return SmallIntConverter.INSTANCE;
case INT:
return IntConverter.INSTANCE;
case BIGINT:
return BigIntConverter.INSTANCE;
case CHAR:
return config.quoteStrings ? CharConverter.QUOTE_INSTANCE : CharConverter.INSTANCE;
case VARCHAR:
return config.quoteStrings ? VarcharConverter.QUOTE_INSTANCE
: VarcharConverter.INSTANCE;
case STRING:
return config.quoteStrings ? StringConverter.QUOTE_INSTANCE
: StringConverter.INSTANCE;
case FLOAT:
switch (config.floatingNumberOutputFormat) {
case FLOATING_NUMBER_OUTPUT_FORMAT_TO_STRING:
return FloatConverter.TO_STRING;
case FLOATING_NUMBER_OUTPUT_FORMAT_SQL_COMPATIBLE:
return FloatConverter.SQL_COMPATIBLE;
default:
throw new IllegalArgumentException("unsupported float format type");
}
case JSON:
return JsonConverter.INSTANCE;
case BOOLEAN:
return BooleanConverter.INSTANCE;
case DOUBLE:
switch (config.floatingNumberOutputFormat) {
case FLOATING_NUMBER_OUTPUT_FORMAT_TO_STRING:
return DoubleConverter.TO_STRING;
case FLOATING_NUMBER_OUTPUT_FORMAT_SQL_COMPATIBLE:
return DoubleConverter.SQL_COMPATIBLE;
default:
throw new IllegalArgumentException("unsupported double format type");
}
case DECIMAL:
switch (config.decimalOutputFormat) {
case DECIMAL_OUTPUT_FORMAT_NORMAL:
return DecimalConverter.NO_PADDING;
case DECIMAL_OUTPUT_FORMAT_ZERO_PADDING:
return DecimalConverter.PADDING;
default:
throw new IllegalArgumentException("unsupported decimal format type");
}
case DATE:
return new DateConverter(config);
case DATETIME:
return new DatetimeConverter(config);
case TIMESTAMP:
return new TimestampConverter(config);
case TIMESTAMP_NTZ:
return new TimestampNtzConverter(config);
case BINARY:
switch (config.binaryFormat) {
case BINARY_FORMAT_BASE64:
return BinaryConverter.BASE64;
case BINARY_FORMAT_UTF8:
return BinaryConverter.UTF8;
case BINARY_FORMAT_QUOTED_PRINTABLE:
return BinaryConverter.QUOTED_PRINTABLE;
case BINARY_FORMAT_HEX:
return BinaryConverter.HEX;
case BINARY_FORMAT_SQL_FORMAT:
return BinaryConverter.SQL_FORMAT;
}
case ARRAY:
case MAP:
case STRUCT:
switch (config.complexTypeFormat) {
case COMPLEX_TYPE_FORMAT_JSON:
return ComplexObjectConverter.JSON;
case COMPLEX_TYPE_FORMAT_JSON_STR:
return ComplexObjectConverter.JSON_ALL_STR;
case COMPLEX_TYPE_OUTPUT_FORMAT_HUMAN_READABLE:
return ComplexObjectConverter.HUMAN_READABLE;
}
default:
throw new IllegalArgumentException("unsupported data type");
}
}