Skip to content

Commit 093b664

Browse files
committed
update 1.10 and 1.11
1 parent 4e208de commit 093b664

File tree

4 files changed

+77
-0
lines changed

4 files changed

+77
-0
lines changed

helper/impls/helper-impl-110/src/main/java/com/linkedin/avroutil1/compatibility/avro110/FieldBuilder110.java

+21
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@
1010
import com.fasterxml.jackson.databind.ObjectMapper;
1111
import com.linkedin.avroutil1.compatibility.AvroSchemaUtil;
1212
import com.linkedin.avroutil1.compatibility.FieldBuilder;
13+
import java.util.ArrayList;
1314
import java.util.HashMap;
15+
import java.util.List;
1416
import java.util.Map;
1517
import org.apache.avro.JsonProperties;
1618
import org.apache.avro.Schema;
@@ -169,6 +171,25 @@ public Schema.Field build() {
169171
* @return a representation of the input that avro likes for use as a field default value
170172
*/
171173
private static Object avroFriendlyDefaultValue(Object mightNotBeFriendly) throws Exception {
174+
// handle default values that are lists
175+
if (mightNotBeFriendly instanceof List) {
176+
List<?> list = (List<?>) mightNotBeFriendly;
177+
List<Object> result = new ArrayList<>(list.size());
178+
for (Object element : list) {
179+
result.add(avroFriendlyDefaultValue(element));
180+
}
181+
return result;
182+
}
183+
184+
// handle default values that are maps
185+
if (mightNotBeFriendly instanceof Map) {
186+
Map<String, ?> map = (Map<String, ?>) mightNotBeFriendly;
187+
Map<Object, Object> result = new HashMap<>(map.size());
188+
for (Map.Entry<?, ?> entry : map.entrySet()) {
189+
result.put(entry.getKey(), avroFriendlyDefaultValue(entry.getValue()));
190+
}
191+
return result;
192+
}
172193

173194
//generic enums we turn to strings
174195
if (mightNotBeFriendly instanceof GenericData.EnumSymbol) {

helper/impls/helper-impl-111/src/main/java/com/linkedin/avroutil1/compatibility/avro111/FieldBuilder111.java

+21
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@
1010
import com.fasterxml.jackson.databind.ObjectMapper;
1111
import com.linkedin.avroutil1.compatibility.AvroSchemaUtil;
1212
import com.linkedin.avroutil1.compatibility.FieldBuilder;
13+
import java.util.ArrayList;
1314
import java.util.HashMap;
15+
import java.util.List;
1416
import java.util.Map;
1517
import org.apache.avro.JsonProperties;
1618
import org.apache.avro.Schema;
@@ -168,6 +170,25 @@ public FieldBuilder removeProp(String propName) {
168170
* @return a representation of the input that avro likes for use as a field default value
169171
*/
170172
private static Object avroFriendlyDefaultValue(Object mightNotBeFriendly) throws Exception {
173+
// handle default values that are lists
174+
if (mightNotBeFriendly instanceof List) {
175+
List<?> list = (List<?>) mightNotBeFriendly;
176+
List<Object> result = new ArrayList<>(list.size());
177+
for (Object element : list) {
178+
result.add(avroFriendlyDefaultValue(element));
179+
}
180+
return result;
181+
}
182+
183+
// handle default values that are maps
184+
if (mightNotBeFriendly instanceof Map) {
185+
Map<String, ?> map = (Map<String, ?>) mightNotBeFriendly;
186+
Map<Object, Object> result = new HashMap<>(map.size());
187+
for (Map.Entry<?, ?> entry : map.entrySet()) {
188+
result.put(entry.getKey(), avroFriendlyDefaultValue(entry.getValue()));
189+
}
190+
return result;
191+
}
171192

172193
//generic enums we turn to strings
173194
if (mightNotBeFriendly instanceof GenericData.EnumSymbol) {

helper/tests/helper-tests-110/src/test/java/com/linkedin/avroutil1/compatibility/avro110/Avro110FieldBuilderTest.java

+12
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.linkedin.avroutil1.compatibility.AvroCompatibilityHelper;
1111
import com.linkedin.avroutil1.compatibility.FieldBuilder;
1212
import com.linkedin.avroutil1.testcommon.TestUtil;
13+
import java.io.IOException;
1314
import java.util.HashMap;
1415
import java.util.Map;
1516
import org.apache.avro.AvroRuntimeException;
@@ -159,6 +160,17 @@ public void testNullDefaultForBoolField() throws Exception {
159160
}
160161
}
161162

163+
@Test
164+
public void testArrayOfEnumDefaultValue() throws IOException {
165+
Schema schema = Schema.parse(TestUtil.load("FieldWithArrayOfEnumDefaultValue.avsc"));
166+
Schema.Field field = schema.getField("arrayOfEnum");
167+
Object defaultValue = AvroCompatibilityHelper.getGenericDefaultValue(field);
168+
FieldBuilder builder = AvroCompatibilityHelper.newField(field);
169+
builder.setDefault(defaultValue);
170+
Schema.Field resField = builder.build();
171+
Assert.assertNotNull(resField.defaultVal());
172+
}
173+
162174
@Test
163175
public void testAddPropsFields() {
164176
// default (no order specified).
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.linkedin.avroutil1.compatibility.avro111;
2+
3+
import com.linkedin.avroutil1.compatibility.AvroCompatibilityHelper;
4+
import com.linkedin.avroutil1.compatibility.FieldBuilder;
5+
import com.linkedin.avroutil1.testcommon.TestUtil;
6+
import java.io.IOException;
7+
import org.apache.avro.Schema;
8+
import org.testng.Assert;
9+
import org.testng.annotations.Test;
10+
11+
12+
public class Avro111FieldBuilderTest {
13+
@Test
14+
public void testArrayOfEnumDefaultValue() throws IOException {
15+
Schema schema = Schema.parse(TestUtil.load("FieldWithArrayOfEnumDefaultValue.avsc"));
16+
Schema.Field field = schema.getField("arrayOfEnum");
17+
Object defaultValue = AvroCompatibilityHelper.getGenericDefaultValue(field);
18+
FieldBuilder builder = AvroCompatibilityHelper.newField(field);
19+
builder.setDefault(defaultValue);
20+
Schema.Field resField = builder.build();
21+
Assert.assertNotNull(resField.defaultVal());
22+
}
23+
}

0 commit comments

Comments
 (0)