Skip to content

Commit

Permalink
update 1.10 and 1.11
Browse files Browse the repository at this point in the history
  • Loading branch information
dg-builder committed Nov 3, 2023
1 parent 4e208de commit 093b664
Show file tree
Hide file tree
Showing 4 changed files with 77 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import com.linkedin.avroutil1.compatibility.AvroSchemaUtil;
import com.linkedin.avroutil1.compatibility.FieldBuilder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.avro.JsonProperties;
import org.apache.avro.Schema;
Expand Down Expand Up @@ -169,6 +171,25 @@ public Schema.Field build() {
* @return a representation of the input that avro likes for use as a field default value
*/
private static Object avroFriendlyDefaultValue(Object mightNotBeFriendly) throws Exception {
// handle default values that are lists
if (mightNotBeFriendly instanceof List) {
List<?> list = (List<?>) mightNotBeFriendly;
List<Object> result = new ArrayList<>(list.size());
for (Object element : list) {
result.add(avroFriendlyDefaultValue(element));
}
return result;
}

// handle default values that are maps
if (mightNotBeFriendly instanceof Map) {
Map<String, ?> map = (Map<String, ?>) mightNotBeFriendly;
Map<Object, Object> result = new HashMap<>(map.size());
for (Map.Entry<?, ?> entry : map.entrySet()) {
result.put(entry.getKey(), avroFriendlyDefaultValue(entry.getValue()));
}
return result;
}

//generic enums we turn to strings
if (mightNotBeFriendly instanceof GenericData.EnumSymbol) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import com.linkedin.avroutil1.compatibility.AvroSchemaUtil;
import com.linkedin.avroutil1.compatibility.FieldBuilder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.avro.JsonProperties;
import org.apache.avro.Schema;
Expand Down Expand Up @@ -168,6 +170,25 @@ public FieldBuilder removeProp(String propName) {
* @return a representation of the input that avro likes for use as a field default value
*/
private static Object avroFriendlyDefaultValue(Object mightNotBeFriendly) throws Exception {
// handle default values that are lists
if (mightNotBeFriendly instanceof List) {
List<?> list = (List<?>) mightNotBeFriendly;
List<Object> result = new ArrayList<>(list.size());
for (Object element : list) {
result.add(avroFriendlyDefaultValue(element));
}
return result;
}

// handle default values that are maps
if (mightNotBeFriendly instanceof Map) {
Map<String, ?> map = (Map<String, ?>) mightNotBeFriendly;
Map<Object, Object> result = new HashMap<>(map.size());
for (Map.Entry<?, ?> entry : map.entrySet()) {
result.put(entry.getKey(), avroFriendlyDefaultValue(entry.getValue()));
}
return result;
}

//generic enums we turn to strings
if (mightNotBeFriendly instanceof GenericData.EnumSymbol) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import com.linkedin.avroutil1.compatibility.AvroCompatibilityHelper;
import com.linkedin.avroutil1.compatibility.FieldBuilder;
import com.linkedin.avroutil1.testcommon.TestUtil;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.apache.avro.AvroRuntimeException;
Expand Down Expand Up @@ -159,6 +160,17 @@ public void testNullDefaultForBoolField() throws Exception {
}
}

@Test
public void testArrayOfEnumDefaultValue() throws IOException {
Schema schema = Schema.parse(TestUtil.load("FieldWithArrayOfEnumDefaultValue.avsc"));
Schema.Field field = schema.getField("arrayOfEnum");
Object defaultValue = AvroCompatibilityHelper.getGenericDefaultValue(field);
FieldBuilder builder = AvroCompatibilityHelper.newField(field);
builder.setDefault(defaultValue);
Schema.Field resField = builder.build();
Assert.assertNotNull(resField.defaultVal());
}

@Test
public void testAddPropsFields() {
// default (no order specified).
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.linkedin.avroutil1.compatibility.avro111;

import com.linkedin.avroutil1.compatibility.AvroCompatibilityHelper;
import com.linkedin.avroutil1.compatibility.FieldBuilder;
import com.linkedin.avroutil1.testcommon.TestUtil;
import java.io.IOException;
import org.apache.avro.Schema;
import org.testng.Assert;
import org.testng.annotations.Test;


public class Avro111FieldBuilderTest {
@Test
public void testArrayOfEnumDefaultValue() throws IOException {
Schema schema = Schema.parse(TestUtil.load("FieldWithArrayOfEnumDefaultValue.avsc"));
Schema.Field field = schema.getField("arrayOfEnum");
Object defaultValue = AvroCompatibilityHelper.getGenericDefaultValue(field);
FieldBuilder builder = AvroCompatibilityHelper.newField(field);
builder.setDefault(defaultValue);
Schema.Field resField = builder.build();
Assert.assertNotNull(resField.defaultVal());
}
}

0 comments on commit 093b664

Please sign in to comment.