You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@avro.apache.org by op...@apache.org on 2025/06/13 08:10:58 UTC

(avro) 08/20: AVRO-4139 [java] equality check for maps in arrays (#3378)

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

opwvhk pushed a commit to branch branch-1.12
in repository https://gitbox.apache.org/repos/asf/avro.git

commit a806a236c7224f755291413ed25f6b9bb92ddd71
Author: Steven Aerts <st...@gmail.com>
AuthorDate: Thu May 29 15:09:41 2025 +0200

    AVRO-4139 [java] equality check for maps in arrays (#3378)
    
    With the introduction of the `AbstractArray` in avro 1.12, it was not
    possible anymore to compare arrays which contained objects which
    contained a Map, as the fact that we compared for equality was not
    propagated anymore.
    
    This commit re-introduces this propagation.
    
    (cherry picked from commit a651bb2f5d8ad87e17fc66344a617d822b3611f3)
---
 .../src/main/java/org/apache/avro/generic/GenericData.java    |  2 +-
 .../test/java/org/apache/avro/generic/TestGenericData.java    | 11 +++++++++++
 2 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java b/lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java
index 0a37811315..30cd133586 100644
--- a/lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java
+++ b/lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java
@@ -355,7 +355,7 @@ public class GenericData {
       if (!(o instanceof Collection)) {
         return false;
       }
-      return GenericData.get().compare(this, o, this.getSchema()) == 0;
+      return GenericData.get().compare(this, o, this.getSchema(), true) == 0;
     }
 
     @Override
diff --git a/lang/java/avro/src/test/java/org/apache/avro/generic/TestGenericData.java b/lang/java/avro/src/test/java/org/apache/avro/generic/TestGenericData.java
index 20c8217956..b00668e832 100644
--- a/lang/java/avro/src/test/java/org/apache/avro/generic/TestGenericData.java
+++ b/lang/java/avro/src/test/java/org/apache/avro/generic/TestGenericData.java
@@ -307,6 +307,17 @@ public class TestGenericData {
     assertEquals(r1, r0);
   }
 
+  // AVRO-4139
+  @Test
+  public void testEqualsMapInArray() {
+    Schema schema = Schema.createArray(Schema.createMap(Schema.create(Schema.Type.STRING)));
+    GenericData.Array<Map<String, String>> a1 = new GenericData.Array<>(10, schema);
+    GenericData.Array<Map<String, String>> a2 = new GenericData.Array<>(10, schema);
+    a1.add(Map.of("a", "b"));
+    a2.add(Map.of("a", "b"));
+    assertEquals(a1, a2);
+  }
+
   private Schema recordSchema() {
     List<Field> fields = new ArrayList<>();
     fields.add(new Field("anArray", Schema.createArray(Schema.create(Type.STRING)), null, null));