private static Converter newConverter()

in parquet-avro/src/main/java/org/apache/parquet/avro/AvroIndexedRecordConverter.java [142:185]


  private static Converter newConverter(Schema schema, Type type,
      GenericData model, ParentValueContainer setter) {

    LogicalType logicalType = schema.getLogicalType();
    // the expected type is always null because it is determined by the parent
    // datum class, which never helps for generic. when logical types are added
    // to specific, this should pass the expected type here.
    Conversion<?> conversion = model.getConversionFor(logicalType);
    ParentValueContainer parent = ParentValueContainer
        .getConversionContainer(setter, conversion, schema);

    switch (schema.getType()) {
    case ARRAY:
      return new AvroArrayConverter(parent, type.asGroupType(), schema, model);
    case BOOLEAN:
      return new AvroConverters.FieldBooleanConverter(parent);
    case BYTES:
      return new AvroConverters.FieldByteBufferConverter(parent);
    case DOUBLE:
      return new AvroConverters.FieldDoubleConverter(parent);
    case ENUM:
      return new FieldEnumConverter(parent, schema, model);
    case FIXED:
      return new FieldFixedConverter(parent, schema, model);
    case FLOAT:
      return new AvroConverters.FieldFloatConverter(parent);
    case INT:
      return new AvroConverters.FieldIntegerConverter(parent);
    case LONG:
      return new AvroConverters.FieldLongConverter(parent);
    case MAP:
      return new MapConverter(parent, type.asGroupType(), schema, model);
    case RECORD:
      return new AvroIndexedRecordConverter(parent, type.asGroupType(), schema, model);
    case STRING:
      return new AvroConverters.FieldStringConverter(parent);
    case UNION:
      return new AvroUnionConverter(parent, type, schema, model);
    case NULL: // fall through
    default:
      throw new UnsupportedOperationException(String.format("Cannot convert Avro type: %s" +
          " (Parquet type: %s) ", schema, type));
    }
  }