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