[
https://issues.apache.org/jira/browse/AVRO-2943?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17225703#comment-17225703
]
Frank Grimes commented on AVRO-2943:
------------------------------------
Yes, the problem arises because the AVDL/AVSC schema just specifies a type as
`string`. However, depending on how code is generated it'll either be a
java.lang.String or an org.apache.avro.util.Utf8.
We'd like comparisons to be agnostic to the `stringType` used during
SpecificRecord code generation (e.g. through the Avro maven plugin)
This is already handled when comparing record string fields but isn't handled
for either Maps or Arrays (collections).
Could probably also consider doing the same for Avro `ARRAY` types as well...
I'll try to find time to submit a PR for this. If it looks good and gets
accepted I can make another PR for ARRAY types.
> Map comparison between Utf8 and String keys fails
> -------------------------------------------------
>
> Key: AVRO-2943
> URL: https://issues.apache.org/jira/browse/AVRO-2943
> Project: Apache Avro
> Issue Type: Bug
> Components: java
> Affects Versions: 1.10.0
> Environment: Mac OS Catalina 10.15.6
>
> openjdk version "1.8.0_265"
> OpenJDK Runtime Environment Corretto-8.265.01.1 (build 1.8.0_265-b01)
> OpenJDK 64-Bit Server VM Corretto-8.265.01.1 (build 25.265-b01, mixed mode)
> Reporter: Frank Grimes
> Priority: Major
> Attachments: AVRO-2943-frankgrimes97.patch
>
>
> The following test I locally added to org.apache.avro.generic.TestGenericData
> on master demonstrates the problem:
> {code:java}
> @Test
> public void testMapKeyEquals() {
> Schema mapSchema = new Schema.Parser().parse("{\"type\": \"map\",
> \"values\": \"string\"}");
> Field myMapField = new Field("my_map", Schema.createMap(mapSchema), null,
> null);
> Schema schema = Schema.createRecord("my_record", "doc", "mytest", false);
> schema.setFields(Arrays.asList(myMapField));
> GenericRecord r0 = new GenericData.Record(schema);
> GenericRecord r1 = new GenericData.Record(schema);
> HashMap<CharSequence, String> pair1 = new HashMap<>();
> pair1.put("keyOne", "valueOne");
> r0.put("my_map", pair1);
> HashMap<CharSequence, String> pair2 = new HashMap<>();
> pair2.put(new Utf8("keyOne"), "valueOne");
> r1.put("my_map", pair2);
> assertEquals(r0, r1);
> assertEquals(r1, r0);
> }
> {code}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)