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-java.git


The following commit(s) were added to refs/heads/main by this push:
     new acbed51f GH-469: Unify `ValueVector.getObject` and 
`VariableWidthFieldVector.get` behavior about null value (#486)
acbed51f is described below

commit acbed51f051450cc7607a59fb324be1ecff078b8
Author: An Qi <[email protected]>
AuthorDate: Tue Jan 14 13:41:43 2025 +0800

    GH-469: Unify `ValueVector.getObject` and `VariableWidthFieldVector.get` 
behavior about null value (#486)
    
    Fixes #469.
---
 .../java/org/apache/arrow/vector/FixedSizeBinaryVector.java |  5 ++++-
 .../java/org/apache/arrow/vector/LargeVarBinaryVector.java  | 13 +++++++++++--
 .../java/org/apache/arrow/vector/LargeVarCharVector.java    |  4 ++--
 .../src/main/java/org/apache/arrow/vector/ValueVector.java  |  2 +-
 .../main/java/org/apache/arrow/vector/VarBinaryVector.java  | 10 +++++++++-
 .../main/java/org/apache/arrow/vector/VarCharVector.java    |  2 +-
 .../java/org/apache/arrow/vector/ViewVarBinaryVector.java   |  5 ++++-
 .../java/org/apache/arrow/vector/ViewVarCharVector.java     |  2 +-
 8 files changed, 33 insertions(+), 10 deletions(-)

diff --git 
a/vector/src/main/java/org/apache/arrow/vector/FixedSizeBinaryVector.java 
b/vector/src/main/java/org/apache/arrow/vector/FixedSizeBinaryVector.java
index 4add7293..2005036c 100644
--- a/vector/src/main/java/org/apache/arrow/vector/FixedSizeBinaryVector.java
+++ b/vector/src/main/java/org/apache/arrow/vector/FixedSizeBinaryVector.java
@@ -149,7 +149,10 @@ public class FixedSizeBinaryVector extends 
BaseFixedWidthVector
    */
   @Override
   public byte[] getObject(int index) {
-    return get(index);
+    if (isSet(index) == 0) {
+      return null;
+    }
+    return get(valueBuffer, index, byteWidth);
   }
 
   public int getByteWidth() {
diff --git 
a/vector/src/main/java/org/apache/arrow/vector/LargeVarBinaryVector.java 
b/vector/src/main/java/org/apache/arrow/vector/LargeVarBinaryVector.java
index f38627b9..fe798494 100644
--- a/vector/src/main/java/org/apache/arrow/vector/LargeVarBinaryVector.java
+++ b/vector/src/main/java/org/apache/arrow/vector/LargeVarBinaryVector.java
@@ -16,6 +16,8 @@
  */
 package org.apache.arrow.vector;
 
+import static org.apache.arrow.vector.NullCheckingForGet.NULL_CHECKING_ENABLED;
+
 import org.apache.arrow.memory.BufferAllocator;
 import org.apache.arrow.memory.ReusableBuffer;
 import org.apache.arrow.vector.complex.impl.LargeVarBinaryReaderImpl;
@@ -95,7 +97,7 @@ public final class LargeVarBinaryVector extends 
BaseLargeVariableWidthVector
    */
   public byte[] get(int index) {
     assert index >= 0;
-    if (isSet(index) == 0) {
+    if (NULL_CHECKING_ENABLED && isSet(index) == 0) {
       return null;
     }
     final long startOffset = getStartOffset(index);
@@ -127,7 +129,14 @@ public final class LargeVarBinaryVector extends 
BaseLargeVariableWidthVector
    */
   @Override
   public byte[] getObject(int index) {
-    return get(index);
+    if (isSet(index) == 0) {
+      return null;
+    }
+    final long startOffset = getStartOffset(index);
+    final long dataLength = getEndOffset(index) - startOffset;
+    final byte[] result = new byte[(int) dataLength];
+    valueBuffer.getBytes(startOffset, result, 0, (int) dataLength);
+    return result;
   }
 
   /**
diff --git 
a/vector/src/main/java/org/apache/arrow/vector/LargeVarCharVector.java 
b/vector/src/main/java/org/apache/arrow/vector/LargeVarCharVector.java
index 07a9a172..b7a765f3 100644
--- a/vector/src/main/java/org/apache/arrow/vector/LargeVarCharVector.java
+++ b/vector/src/main/java/org/apache/arrow/vector/LargeVarCharVector.java
@@ -101,7 +101,7 @@ public final class LargeVarCharVector extends 
BaseLargeVariableWidthVector
   @Override
   public byte[] get(int index) {
     assert index >= 0;
-    if (isSet(index) == 0) {
+    if (NULL_CHECKING_ENABLED && isSet(index) == 0) {
       return null;
     }
     final long startOffset = getStartOffset(index);
@@ -120,7 +120,7 @@ public final class LargeVarCharVector extends 
BaseLargeVariableWidthVector
   @Override
   public Text getObject(int index) {
     assert index >= 0;
-    if (NULL_CHECKING_ENABLED && isSet(index) == 0) {
+    if (isSet(index) == 0) {
       return null;
     }
 
diff --git a/vector/src/main/java/org/apache/arrow/vector/ValueVector.java 
b/vector/src/main/java/org/apache/arrow/vector/ValueVector.java
index 0a45409e..3a505825 100644
--- a/vector/src/main/java/org/apache/arrow/vector/ValueVector.java
+++ b/vector/src/main/java/org/apache/arrow/vector/ValueVector.java
@@ -264,7 +264,7 @@ public interface ValueVector extends Closeable, 
Iterable<ValueVector> {
    * Get friendly type object from the vector.
    *
    * @param index index of object to get
-   * @return friendly type object
+   * @return friendly type object, null if value is unset
    */
   Object getObject(int index);
 
diff --git a/vector/src/main/java/org/apache/arrow/vector/VarBinaryVector.java 
b/vector/src/main/java/org/apache/arrow/vector/VarBinaryVector.java
index 7196e9c9..ad76504f 100644
--- a/vector/src/main/java/org/apache/arrow/vector/VarBinaryVector.java
+++ b/vector/src/main/java/org/apache/arrow/vector/VarBinaryVector.java
@@ -128,7 +128,15 @@ public final class VarBinaryVector extends 
BaseVariableWidthVector
    */
   @Override
   public byte[] getObject(int index) {
-    return get(index);
+    if (isSet(index) == 0) {
+      return null;
+    }
+
+    final int startOffset = getStartOffset(index);
+    final int dataLength = getEndOffset(index) - startOffset;
+    final byte[] result = new byte[dataLength];
+    valueBuffer.getBytes(startOffset, result, 0, dataLength);
+    return result;
   }
 
   /**
diff --git a/vector/src/main/java/org/apache/arrow/vector/VarCharVector.java 
b/vector/src/main/java/org/apache/arrow/vector/VarCharVector.java
index c81e3455..5ddc8b84 100644
--- a/vector/src/main/java/org/apache/arrow/vector/VarCharVector.java
+++ b/vector/src/main/java/org/apache/arrow/vector/VarCharVector.java
@@ -117,7 +117,7 @@ public final class VarCharVector extends 
BaseVariableWidthVector
   @Override
   public Text getObject(int index) {
     assert index >= 0;
-    if (NULL_CHECKING_ENABLED && isSet(index) == 0) {
+    if (isSet(index) == 0) {
       return null;
     }
 
diff --git 
a/vector/src/main/java/org/apache/arrow/vector/ViewVarBinaryVector.java 
b/vector/src/main/java/org/apache/arrow/vector/ViewVarBinaryVector.java
index 80d6952e..c41854bb 100644
--- a/vector/src/main/java/org/apache/arrow/vector/ViewVarBinaryVector.java
+++ b/vector/src/main/java/org/apache/arrow/vector/ViewVarBinaryVector.java
@@ -122,7 +122,10 @@ public final class ViewVarBinaryVector extends 
BaseVariableWidthViewVector
    */
   @Override
   public byte[] getObject(int index) {
-    return get(index);
+    if (isSet(index) == 0) {
+      return null;
+    }
+    return getData(index);
   }
 
   /**
diff --git 
a/vector/src/main/java/org/apache/arrow/vector/ViewVarCharVector.java 
b/vector/src/main/java/org/apache/arrow/vector/ViewVarCharVector.java
index dc474b68..9ce7f85e 100644
--- a/vector/src/main/java/org/apache/arrow/vector/ViewVarCharVector.java
+++ b/vector/src/main/java/org/apache/arrow/vector/ViewVarCharVector.java
@@ -115,7 +115,7 @@ public final class ViewVarCharVector extends 
BaseVariableWidthViewVector
   @Override
   public Text getObject(int index) {
     assert index >= 0;
-    if (NULL_CHECKING_ENABLED && isSet(index) == 0) {
+    if (isSet(index) == 0) {
       return null;
     }
 

Reply via email to