This is an automated email from the ASF dual-hosted git repository.

anton pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/beam.git


The following commit(s) were added to refs/heads/master by this push:
     new 172b563  [BEAM-7808] Add method to convert avro field to beam field
     new 866b8e7  Merge pull request #9142 from bmv126/Avro_field_to_beam_field
172b563 is described below

commit 172b563fdd36019d3284139417808681314ac364
Author: B M VISHWAS <b_m.vish...@nokia.com>
AuthorDate: Wed Jul 24 08:53:21 2019 -0500

    [BEAM-7808] Add method to convert avro field to beam field
---
 .../apache/beam/sdk/schemas/utils/AvroUtils.java   | 24 ++++++++++++----
 .../beam/sdk/schemas/utils/AvroUtilsTest.java      | 32 ++++++++++++++++++++++
 2 files changed, 50 insertions(+), 6 deletions(-)

diff --git 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/utils/AvroUtils.java 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/utils/AvroUtils.java
index 81b834b..0933b31 100644
--- 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/utils/AvroUtils.java
+++ 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/utils/AvroUtils.java
@@ -163,6 +163,22 @@ public class AvroUtils {
     }
   }
 
+  /** Get Beam Field from avro Field. */
+  public static Schema.Field toBeamField(org.apache.avro.Schema.Field field) {
+    TypeWithNullability nullableType = new TypeWithNullability(field.schema());
+    FieldType beamFieldType = toFieldType(nullableType);
+    return Field.of(field.name(), beamFieldType);
+  }
+
+  /** Get Avro Field from Beam Field. */
+  public static org.apache.avro.Schema.Field toAvroField(Schema.Field field) {
+    org.apache.avro.Schema fieldSchema = getFieldSchema(field.getType());
+    org.apache.avro.Schema.Field avroField =
+        new org.apache.avro.Schema.Field(
+            field.getName(), fieldSchema, field.getDescription(), (Object) 
null);
+    return avroField;
+  }
+
   private AvroUtils() {}
 
   /**
@@ -174,8 +190,7 @@ public class AvroUtils {
     Schema.Builder builder = Schema.builder();
 
     for (org.apache.avro.Schema.Field field : schema.getFields()) {
-      TypeWithNullability nullableType = new 
TypeWithNullability(field.schema());
-      Field beamField = Field.of(field.name(), toFieldType(nullableType));
+      Field beamField = toBeamField(field);
       if (field.doc() != null) {
         beamField = beamField.withDescription(field.doc());
       }
@@ -189,10 +204,7 @@ public class AvroUtils {
   public static org.apache.avro.Schema toAvroSchema(Schema beamSchema) {
     List<org.apache.avro.Schema.Field> fields = Lists.newArrayList();
     for (Schema.Field field : beamSchema.getFields()) {
-      org.apache.avro.Schema fieldSchema = getFieldSchema(field.getType());
-      org.apache.avro.Schema.Field recordField =
-          new org.apache.avro.Schema.Field(
-              field.getName(), fieldSchema, field.getDescription(), (Object) 
null);
+      org.apache.avro.Schema.Field recordField = toAvroField(field);
       fields.add(recordField);
     }
     org.apache.avro.Schema avroSchema = 
org.apache.avro.Schema.createRecord(fields);
diff --git 
a/sdks/java/core/src/test/java/org/apache/beam/sdk/schemas/utils/AvroUtilsTest.java
 
b/sdks/java/core/src/test/java/org/apache/beam/sdk/schemas/utils/AvroUtilsTest.java
index 94ab0d7..e43985c 100644
--- 
a/sdks/java/core/src/test/java/org/apache/beam/sdk/schemas/utils/AvroUtilsTest.java
+++ 
b/sdks/java/core/src/test/java/org/apache/beam/sdk/schemas/utils/AvroUtilsTest.java
@@ -140,6 +140,38 @@ public class AvroUtilsTest {
         typeWithNullability.type);
   }
 
+  @Test
+  public void testNullableArrayFieldToBeamArrayField() {
+    org.apache.avro.Schema.Field avroField =
+        new org.apache.avro.Schema.Field(
+            "arrayField",
+            ReflectData.makeNullable(
+                
org.apache.avro.Schema.createArray((org.apache.avro.Schema.create(Type.INT)))),
+            "",
+            null);
+
+    Field expectedBeamField = Field.nullable("arrayField", 
FieldType.array(FieldType.INT32));
+
+    Field beamField = AvroUtils.toBeamField(avroField);
+    assertEquals(expectedBeamField, beamField);
+  }
+
+  @Test
+  public void testNullableBeamArrayFieldToAvroField() {
+    Field beamField = Field.nullable("arrayField", 
FieldType.array(FieldType.INT32));
+
+    org.apache.avro.Schema.Field expectedAvroField =
+        new org.apache.avro.Schema.Field(
+            "arrayField",
+            ReflectData.makeNullable(
+                
org.apache.avro.Schema.createArray((org.apache.avro.Schema.create(Type.INT)))),
+            "",
+            null);
+
+    org.apache.avro.Schema.Field avroField = AvroUtils.toAvroField(beamField);
+    assertEquals(expectedAvroField, avroField);
+  }
+
   private org.apache.avro.Schema getAvroSubSchema() {
     List<org.apache.avro.Schema.Field> fields = Lists.newArrayList();
     fields.add(

Reply via email to