Skip to content

Commit 1e457cf

Browse files
tlm365kou
authored andcommitted
apacheGH-40944: [Java] Implement TypeEqualsVisitor for StringView (apache#41606)
### Rationale for this change Resolves apache#40944 . ### What changes are included in this PR? ### Are these changes tested? Yes. ### Are there any user-facing changes? No. * GitHub Issue: apache#40944 Authored-by: Tai Le Manh <[email protected]> Signed-off-by: David Li <[email protected]>
1 parent c78a96c commit 1e457cf

File tree

2 files changed

+42
-1
lines changed

2 files changed

+42
-1
lines changed

vector/src/main/java/org/apache/arrow/vector/compare/TypeEqualsVisitor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ public Boolean visit(BaseLargeVariableWidthVector left, Void value) {
8888

8989
@Override
9090
public Boolean visit(BaseVariableWidthViewVector left, Void value) {
91-
throw new UnsupportedOperationException("View vectors are not supported.");
91+
return compareField(left.getField(), right.getField());
9292
}
9393

9494
@Override

vector/src/test/java/org/apache/arrow/vector/compare/TestTypeEqualsVisitor.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import static org.junit.Assert.assertFalse;
2121
import static org.junit.Assert.assertTrue;
2222

23+
import java.nio.charset.StandardCharsets;
2324
import java.util.HashMap;
2425
import java.util.Map;
2526

@@ -30,6 +31,8 @@
3031
import org.apache.arrow.vector.Float8Vector;
3132
import org.apache.arrow.vector.IntVector;
3233
import org.apache.arrow.vector.VarCharVector;
34+
import org.apache.arrow.vector.ViewVarBinaryVector;
35+
import org.apache.arrow.vector.ViewVarCharVector;
3336
import org.apache.arrow.vector.complex.DenseUnionVector;
3437
import org.apache.arrow.vector.complex.ListVector;
3538
import org.apache.arrow.vector.complex.StructVector;
@@ -176,4 +179,42 @@ public void testDenseUnionTypeEquals() {
176179
assertFalse(typeVisitor.equals(vector1));
177180
}
178181
}
182+
183+
@Test
184+
public void testStringViewTypeEquals() {
185+
try (final ViewVarCharVector varchar1 = new ViewVarCharVector("varchar1", allocator);
186+
final ViewVarCharVector varchar2 = new ViewVarCharVector("varchar2", allocator);
187+
final ViewVarBinaryVector binary = new ViewVarBinaryVector("binary", allocator)) {
188+
final int valueCount = 2;
189+
final byte[] str0 = "apache".getBytes(StandardCharsets.UTF_8);
190+
final byte[] str1 = "arrow".getBytes(StandardCharsets.UTF_8);
191+
192+
// add elements for varchar1
193+
varchar1.allocateNew(48, valueCount);
194+
varchar1.set(0, str0);
195+
varchar1.set(1, str1);
196+
varchar1.setValueCount(valueCount);
197+
198+
// add elements for varchar2 in a difference order
199+
varchar2.allocateNew(48, valueCount);
200+
varchar2.set(0, str1);
201+
varchar2.set(1, str0);
202+
varchar2.setValueCount(valueCount);
203+
204+
// add elements for binary
205+
binary.allocateNew(48, valueCount);
206+
binary.set(0, str0);
207+
binary.set(1, str1);
208+
binary.setValueCount(valueCount);
209+
210+
// compare ignore check name
211+
TypeEqualsVisitor visitor = new TypeEqualsVisitor(varchar1, /* check name */ false, /* check meta data */ true);
212+
assertTrue(visitor.equals(varchar2));
213+
assertFalse(visitor.equals(binary));
214+
215+
// if we check names, the types should be different
216+
visitor = new TypeEqualsVisitor(varchar1, /* check name */ true, /* check meta data */ true);
217+
assertFalse(visitor.equals(varchar2));
218+
}
219+
}
179220
}

0 commit comments

Comments
 (0)