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 1624d5aaf4 GH-35528:[Java] Fix RangeEqualsVisitor comparing BitVector
with different begin index (#35525)
1624d5aaf4 is described below
commit 1624d5aaf4f524487079066dc730176d82b986f5
Author: wenxlan <[email protected]>
AuthorDate: Fri May 12 21:35:58 2023 +0800
GH-35528:[Java] Fix RangeEqualsVisitor comparing BitVector with different
begin index (#35525)
### Rationale for this change
bugfix: RangeEqualsVisitor compare BitVector false when compared vectors
have different begin index.
In origin code, when compared vectors have different begin index, it will
compare vectors value with same index, which is error logic. this pr is to fix
it.
### What changes are included in this PR?
only changes RangeEqualsVisitor.compareBaseFixedWidthVectors method, and
add test
### Are these changes tested?
yes.
### Are there any user-facing changes?
no.
* Closes: #35528
Authored-by: wenxianglan.233 <[email protected]>
Signed-off-by: David Li <[email protected]>
---
.../arrow/vector/compare/RangeEqualsVisitor.java | 2 +-
.../vector/compare/TestRangeEqualsVisitor.java | 23 ++++++++++++++++++++++
2 files changed, 24 insertions(+), 1 deletion(-)
diff --git
a/java/vector/src/main/java/org/apache/arrow/vector/compare/RangeEqualsVisitor.java
b/java/vector/src/main/java/org/apache/arrow/vector/compare/RangeEqualsVisitor.java
index c16ca323b4..698ddac466 100644
---
a/java/vector/src/main/java/org/apache/arrow/vector/compare/RangeEqualsVisitor.java
+++
b/java/vector/src/main/java/org/apache/arrow/vector/compare/RangeEqualsVisitor.java
@@ -366,7 +366,7 @@ public class RangeEqualsVisitor implements
VectorVisitor<Boolean, Range> {
return false;
}
} else {
- boolean ret = ((BitVector) leftVector).get(leftIndex) ==
((BitVector) rightVector).get(leftIndex);
+ boolean ret = ((BitVector) leftVector).get(leftIndex) ==
((BitVector) rightVector).get(rightIndex);
if (!ret) {
return false;
}
diff --git
a/java/vector/src/test/java/org/apache/arrow/vector/compare/TestRangeEqualsVisitor.java
b/java/vector/src/test/java/org/apache/arrow/vector/compare/TestRangeEqualsVisitor.java
index 4495881ad7..ab8c6c6348 100644
---
a/java/vector/src/test/java/org/apache/arrow/vector/compare/TestRangeEqualsVisitor.java
+++
b/java/vector/src/test/java/org/apache/arrow/vector/compare/TestRangeEqualsVisitor.java
@@ -27,6 +27,7 @@ import java.util.Arrays;
import org.apache.arrow.memory.BufferAllocator;
import org.apache.arrow.memory.RootAllocator;
import org.apache.arrow.vector.BigIntVector;
+import org.apache.arrow.vector.BitVector;
import org.apache.arrow.vector.Float4Vector;
import org.apache.arrow.vector.Float8Vector;
import org.apache.arrow.vector.IntVector;
@@ -181,6 +182,28 @@ public class TestRangeEqualsVisitor {
}
}
+ @Test
+ public void testBitVectorRangeEquals() {
+ try (final BitVector vector1 = new BitVector("v1", allocator);
+ final BitVector vector2 = new BitVector("v2", allocator);) {
+
+ boolean[] v1 = new boolean[]{true, false, true, true, true};
+ boolean[] v2 = new boolean[]{false, true, true, true, false};
+ vector1.setValueCount(5);
+ for (int i = 0; i < 5; i ++) {
+ vector1.set(i, v1[i] ? 1 : 0);
+ }
+ vector2.setValueCount(5);
+ for (int i = 0; i < 5; i ++) {
+ vector2.set(i, v2[i] ? 1 : 0);
+ }
+
+ RangeEqualsVisitor visitor = new RangeEqualsVisitor(vector1, vector2);
+ assertTrue(visitor.compareBaseFixedWidthVectors(new Range(1, 0, 4)));
+ assertFalse(visitor.compareBaseFixedWidthVectors(new Range(0, 0, 5)));
+ }
+ }
+
@Test
public void testFixedSizeListVectorRangeEquals() {
try (final FixedSizeListVector vector1 = FixedSizeListVector.empty("list",
2, allocator);