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

Reply via email to