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

lidavidm pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow.git


The following commit(s) were added to refs/heads/main by this push:
     new 0e9896dc54 GH-40944: [Java] Implement TypeEqualsVisitor for StringView 
(#41606)
0e9896dc54 is described below

commit 0e9896dc54ca82876171521d206ad0906535572f
Author: Tai Le Manh <[email protected]>
AuthorDate: Mon May 13 06:54:20 2024 +0700

    GH-40944: [Java] Implement TypeEqualsVisitor for StringView (#41606)
    
    
    
    ### Rationale for this change
    Resolves #40944 .
    
    ### What changes are included in this PR?
    
    ### Are these changes tested?
    Yes.
    
    ### Are there any user-facing changes?
    No.
    
    * GitHub Issue: #40944
    
    Authored-by: Tai Le Manh <[email protected]>
    Signed-off-by: David Li <[email protected]>
---
 .../arrow/vector/compare/TypeEqualsVisitor.java    |  2 +-
 .../vector/compare/TestTypeEqualsVisitor.java      | 41 ++++++++++++++++++++++
 2 files changed, 42 insertions(+), 1 deletion(-)

diff --git 
a/java/vector/src/main/java/org/apache/arrow/vector/compare/TypeEqualsVisitor.java
 
b/java/vector/src/main/java/org/apache/arrow/vector/compare/TypeEqualsVisitor.java
index 9bbe5c1b89..aaef161a56 100644
--- 
a/java/vector/src/main/java/org/apache/arrow/vector/compare/TypeEqualsVisitor.java
+++ 
b/java/vector/src/main/java/org/apache/arrow/vector/compare/TypeEqualsVisitor.java
@@ -88,7 +88,7 @@ public class TypeEqualsVisitor implements 
VectorVisitor<Boolean, Void> {
 
   @Override
   public Boolean visit(BaseVariableWidthViewVector left, Void value) {
-    throw new UnsupportedOperationException("View vectors are not supported.");
+    return compareField(left.getField(), right.getField());
   }
 
   @Override
diff --git 
a/java/vector/src/test/java/org/apache/arrow/vector/compare/TestTypeEqualsVisitor.java
 
b/java/vector/src/test/java/org/apache/arrow/vector/compare/TestTypeEqualsVisitor.java
index 62fa0336ea..736b0f1b1a 100644
--- 
a/java/vector/src/test/java/org/apache/arrow/vector/compare/TestTypeEqualsVisitor.java
+++ 
b/java/vector/src/test/java/org/apache/arrow/vector/compare/TestTypeEqualsVisitor.java
@@ -20,6 +20,7 @@ package org.apache.arrow.vector.compare;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
+import java.nio.charset.StandardCharsets;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -30,6 +31,8 @@ import org.apache.arrow.vector.Float4Vector;
 import org.apache.arrow.vector.Float8Vector;
 import org.apache.arrow.vector.IntVector;
 import org.apache.arrow.vector.VarCharVector;
+import org.apache.arrow.vector.ViewVarBinaryVector;
+import org.apache.arrow.vector.ViewVarCharVector;
 import org.apache.arrow.vector.complex.DenseUnionVector;
 import org.apache.arrow.vector.complex.ListVector;
 import org.apache.arrow.vector.complex.StructVector;
@@ -176,4 +179,42 @@ public class TestTypeEqualsVisitor {
       assertFalse(typeVisitor.equals(vector1));
     }
   }
+
+  @Test
+  public void testStringViewTypeEquals() {
+    try (final ViewVarCharVector varchar1 = new ViewVarCharVector("varchar1", 
allocator);
+         final ViewVarCharVector varchar2 = new ViewVarCharVector("varchar2", 
allocator);
+         final ViewVarBinaryVector binary = new ViewVarBinaryVector("binary", 
allocator)) {
+      final int valueCount = 2;
+      final byte[] str0 = "apache".getBytes(StandardCharsets.UTF_8);
+      final byte[] str1 = "arrow".getBytes(StandardCharsets.UTF_8);
+
+      // add elements for varchar1
+      varchar1.allocateNew(48, valueCount);
+      varchar1.set(0, str0);
+      varchar1.set(1, str1);
+      varchar1.setValueCount(valueCount);
+
+      // add elements for varchar2 in a difference order
+      varchar2.allocateNew(48, valueCount);
+      varchar2.set(0, str1);
+      varchar2.set(1, str0);
+      varchar2.setValueCount(valueCount);
+
+      // add elements for binary
+      binary.allocateNew(48, valueCount);
+      binary.set(0, str0);
+      binary.set(1, str1);
+      binary.setValueCount(valueCount);
+
+      // compare ignore check name
+      TypeEqualsVisitor visitor = new TypeEqualsVisitor(varchar1, /* check 
name */ false, /* check meta data */ true);
+      assertTrue(visitor.equals(varchar2));
+      assertFalse(visitor.equals(binary));
+
+      // if we check names, the types should be different
+      visitor = new TypeEqualsVisitor(varchar1, /* check name */ true, /* 
check meta data */ true);
+      assertFalse(visitor.equals(varchar2));
+    }
+  }
 }

Reply via email to