You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by li...@apache.org on 2023/05/12 13:36:09 UTC

[arrow] branch main updated: GH-35528:[Java] Fix RangeEqualsVisitor comparing BitVector with different begin index (#35525)

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 <13...@users.noreply.github.com>
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 <we...@bytedance.com>
    Signed-off-by: David Li <li...@gmail.com>
---
 .../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);