You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@avro.apache.org by "Frank Grimes (Jira)" <ji...@apache.org> on 2023/03/09 19:04:00 UTC
[jira] [Comment Edited] (AVRO-2943) Map comparison between Utf8 and String keys fails
[ https://issues.apache.org/jira/browse/AVRO-2943?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17698568#comment-17698568 ]
Frank Grimes edited comment on AVRO-2943 at 3/9/23 7:03 PM:
------------------------------------------------------------
I quickly tried this locally and it failed:
{code:java}
@Test
public void testArrayValuesEquals() {
Schema arraySchema = new Schema.Parser().parse("\{\"type\": \"array\", \"items\": \"string\"}");
Field myArrayField = new Field("my_array", Schema.createArray(arraySchema), null, null);
Schema schema = Schema.createRecord("my_record", "doc", "mytest", false);
schema.setFields(Arrays.asList(myArrayField));
GenericRecord r0 = new GenericData.Record(schema);
GenericRecord r1 = new GenericData.Record(schema);
List<CharSequence> array1 = Arrays.asList("valueOne");
r0.put("my_array", array1);
List<CharSequence> array2 = Arrays.asList(new Utf8("valueOne"));
r1.put("my_array", array2);
assertEquals(r0, r1);
assertEquals(r1, r0);
}
{code}
{code:java}
Running org.apache.avro.generic.TestGenericDataTests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.254 s <<< FAILURE! - in org.apache.avro.generic.TestGenericDataorg.apache.avro.generic.TestGenericData.testArrayValuesEquals Time elapsed: 0.231 s <<< ERROR!java.lang.ClassCastException: class java.lang.String cannot be cast to class java.util.Collection (java.lang.String and java.util.Collection are in module java.base of loader 'bootstrap') at org.apache.avro.generic.GenericData.compare(GenericData.java:1251) at org.apache.avro.generic.GenericData.compare(GenericData.java:1257) at org.apache.avro.generic.GenericData.compare(GenericData.java:1243) at org.apache.avro.generic.GenericData$Record.equals(GenericData.java:290)
{code}
Wait... I think I see a problem in my test setup. Will re-confirm!
was (Author: frankgrimes97):
I quickly tried this locally and it failed:
{code:java}
@Test
public void testArrayValuesEquals() {
Schema arraySchema = new Schema.Parser().parse("\{\"type\": \"array\", \"items\": \"string\"}");
Field myArrayField = new Field("my_array", Schema.createArray(arraySchema), null, null);
Schema schema = Schema.createRecord("my_record", "doc", "mytest", false);
schema.setFields(Arrays.asList(myArrayField));
GenericRecord r0 = new GenericData.Record(schema);
GenericRecord r1 = new GenericData.Record(schema);
List<CharSequence> array1 = Arrays.asList("valueOne");
r0.put("my_array", array1);
List<CharSequence> array2 = Arrays.asList(new Utf8("valueOne"));
r1.put("my_array", array2);
assertEquals(r0, r1);
assertEquals(r1, r0);
}
{code}
{code:java}
Running org.apache.avro.generic.TestGenericDataTests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.254 s <<< FAILURE! - in org.apache.avro.generic.TestGenericDataorg.apache.avro.generic.TestGenericData.testArrayValuesEquals Time elapsed: 0.231 s <<< ERROR!java.lang.ClassCastException: class java.lang.String cannot be cast to class java.util.Collection (java.lang.String and java.util.Collection are in module java.base of loader 'bootstrap') at org.apache.avro.generic.GenericData.compare(GenericData.java:1251) at org.apache.avro.generic.GenericData.compare(GenericData.java:1257) at org.apache.avro.generic.GenericData.compare(GenericData.java:1243) at org.apache.avro.generic.GenericData$Record.equals(GenericData.java:290)
{code}
> 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
> Labels: pull-request-available
> Attachments: AVRO-2943-frankgrimes97.patch
>
> Time Spent: 10m
> Remaining Estimate: 0h
>
> 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.20.10#820010)