PARQUET-1782: Use Switch Statement in AvroRecordConverter (#752)
* PARQUET-1782: Use Switch Statement in AvroRecordConverter
* Changed Datum Class Initialization
diff --git a/parquet-avro/src/main/java/org/apache/parquet/avro/AvroRecordConverter.java b/parquet-avro/src/main/java/org/apache/parquet/avro/AvroRecordConverter.java
index 743d6aa..45504b6 100644
--- a/parquet-avro/src/main/java/org/apache/parquet/avro/AvroRecordConverter.java
+++ b/parquet-avro/src/main/java/org/apache/parquet/avro/AvroRecordConverter.java
@@ -236,6 +236,7 @@
GenericData model, Class<?> knownClass, ParentValueContainer setter) {
LogicalType logicalType = schema.getLogicalType();
Conversion<?> conversion;
+
if (knownClass != null) {
conversion = model.getConversionByClass(knownClass, logicalType);
} else {
@@ -245,58 +246,63 @@
ParentValueContainer parent = ParentValueContainer
.getConversionContainer(setter, conversion, schema);
- if (schema.getType().equals(Schema.Type.BOOLEAN)) {
+ switch (schema.getType()) {
+ case BOOLEAN:
return new AvroConverters.FieldBooleanConverter(parent);
- } else if (schema.getType().equals(Schema.Type.INT)) {
- Class<?> datumClass = getDatumClass(conversion, knownClass, schema, model);
- if (datumClass == null) {
+ case INT:
+ Class<?> intDatumClass = getDatumClass(conversion, knownClass, schema, model);
+ if (intDatumClass == null) {
return new AvroConverters.FieldIntegerConverter(parent);
- } else if (datumClass == byte.class || datumClass == Byte.class) {
+ }
+ if (intDatumClass == byte.class || intDatumClass == Byte.class) {
return new AvroConverters.FieldByteConverter(parent);
- } else if (datumClass == short.class || datumClass == Short.class) {
- return new AvroConverters.FieldShortConverter(parent);
- } else if (datumClass == char.class || datumClass == Character.class) {
+ }
+ if (intDatumClass == char.class || intDatumClass == Character.class) {
return new AvroConverters.FieldCharConverter(parent);
}
+ if (intDatumClass == short.class || intDatumClass == Short.class) {
+ return new AvroConverters.FieldShortConverter(parent);
+ }
return new AvroConverters.FieldIntegerConverter(parent);
- } else if (schema.getType().equals(Schema.Type.LONG)) {
+ case LONG:
return new AvroConverters.FieldLongConverter(parent);
- } else if (schema.getType().equals(Schema.Type.FLOAT)) {
+ case FLOAT:
return new AvroConverters.FieldFloatConverter(parent);
- } else if (schema.getType().equals(Schema.Type.DOUBLE)) {
+ case DOUBLE:
return new AvroConverters.FieldDoubleConverter(parent);
- } else if (schema.getType().equals(Schema.Type.BYTES)) {
- Class<?> datumClass = getDatumClass(conversion, knownClass, schema, model);
- if (datumClass == null) {
+ case BYTES:
+ Class<?> byteDatumClass = getDatumClass(conversion, knownClass, schema, model);
+ if (byteDatumClass == null) {
return new AvroConverters.FieldByteBufferConverter(parent);
- } else if (datumClass.isArray() && datumClass.getComponentType() == byte.class) {
+ }
+ if (byteDatumClass.isArray() && byteDatumClass.getComponentType() == byte.class) {
return new AvroConverters.FieldByteArrayConverter(parent);
}
return new AvroConverters.FieldByteBufferConverter(parent);
- } else if (schema.getType().equals(Schema.Type.STRING)) {
+ case STRING:
return newStringConverter(schema, model, parent);
- } else if (schema.getType().equals(Schema.Type.RECORD)) {
+ case RECORD:
return new AvroRecordConverter(parent, type.asGroupType(), schema, model);
- } else if (schema.getType().equals(Schema.Type.ENUM)) {
+ case ENUM:
return new AvroConverters.FieldEnumConverter(parent, schema, model);
- } else if (schema.getType().equals(Schema.Type.ARRAY)) {
- Class<?> datumClass = getDatumClass(conversion, knownClass, schema, model);
- if (datumClass != null && datumClass.isArray()) {
- return new AvroArrayConverter(
- parent, type.asGroupType(), schema, model, datumClass);
- } else {
- return new AvroCollectionConverter(
- parent, type.asGroupType(), schema, model, datumClass);
+ case ARRAY:
+ Class<?> arrayDatumClass = getDatumClass(conversion, knownClass, schema, model);
+ if (arrayDatumClass != null && arrayDatumClass.isArray()) {
+ return new AvroArrayConverter(parent, type.asGroupType(), schema, model,
+ arrayDatumClass);
}
- } else if (schema.getType().equals(Schema.Type.MAP)) {
+ return new AvroCollectionConverter(parent, type.asGroupType(), schema,
+ model, arrayDatumClass);
+ case MAP:
return new MapConverter(parent, type.asGroupType(), schema, model);
- } else if (schema.getType().equals(Schema.Type.UNION)) {
+ case UNION:
return new AvroUnionConverter(parent, type, schema, model);
- } else if (schema.getType().equals(Schema.Type.FIXED)) {
+ case FIXED:
return new AvroConverters.FieldFixedConverter(parent, schema, model);
+ default:
+ throw new UnsupportedOperationException(String.format(
+ "Cannot convert Avro type: %s to Parquet type: %s", schema, type));
}
- throw new UnsupportedOperationException(String.format(
- "Cannot convert Avro type: %s to Parquet type: %s", schema, type));
}
private static Converter newStringConverter(Schema schema, GenericData model,