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));
+ }
+ }
}