This is an automated email from the ASF dual-hosted git repository.
lzljs3620320 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/paimon.git
The following commit(s) were added to refs/heads/master by this push:
new 021bbc153b [arrow] Fix java.lang.IllegalArgumentException in
ArrowFormatCWriter. (#6459)
021bbc153b is described below
commit 021bbc153beb662d6f071bfc6b42641b26d25ba3
Author: ji chen <[email protected]>
AuthorDate: Sun Oct 26 14:02:49 2025 +0800
[arrow] Fix java.lang.IllegalArgumentException in ArrowFormatCWriter.
(#6459)
---
.../main/java/org/apache/paimon/arrow/ArrowUtils.java | 6 ++++--
.../paimon/arrow/vector/ArrowFormatCWriter.java | 3 ++-
.../paimon/arrow/vector/ArrowFormatWriterTest.java | 19 +++++++++++++++++++
3 files changed, 25 insertions(+), 3 deletions(-)
diff --git a/paimon-arrow/src/main/java/org/apache/paimon/arrow/ArrowUtils.java
b/paimon-arrow/src/main/java/org/apache/paimon/arrow/ArrowUtils.java
index 7e487e54fb..cf80b9d21f 100644
--- a/paimon-arrow/src/main/java/org/apache/paimon/arrow/ArrowUtils.java
+++ b/paimon-arrow/src/main/java/org/apache/paimon/arrow/ArrowUtils.java
@@ -208,8 +208,10 @@ public class ArrowUtils {
}
public static ArrowCStruct serializeToCStruct(
- VectorSchemaRoot vsr, ArrowArray array, ArrowSchema schema) {
- BufferAllocator bufferAllocator = vsr.getVector(0).getAllocator();
+ VectorSchemaRoot vsr,
+ ArrowArray array,
+ ArrowSchema schema,
+ BufferAllocator bufferAllocator) {
Data.exportVectorSchemaRoot(bufferAllocator, vsr, null, array, schema);
return ArrowCStruct.of(array, schema);
}
diff --git
a/paimon-arrow/src/main/java/org/apache/paimon/arrow/vector/ArrowFormatCWriter.java
b/paimon-arrow/src/main/java/org/apache/paimon/arrow/vector/ArrowFormatCWriter.java
index afa58250c3..09fe6e712b 100644
---
a/paimon-arrow/src/main/java/org/apache/paimon/arrow/vector/ArrowFormatCWriter.java
+++
b/paimon-arrow/src/main/java/org/apache/paimon/arrow/vector/ArrowFormatCWriter.java
@@ -69,7 +69,8 @@ public class ArrowFormatCWriter implements AutoCloseable {
public ArrowCStruct toCStruct() {
VectorSchemaRoot vectorSchemaRoot = realWriter.getVectorSchemaRoot();
- return ArrowUtils.serializeToCStruct(vectorSchemaRoot, array, schema);
+ return ArrowUtils.serializeToCStruct(
+ vectorSchemaRoot, array, schema, realWriter.getAllocator());
}
public void flush() {
diff --git
a/paimon-arrow/src/test/java/org/apache/paimon/arrow/vector/ArrowFormatWriterTest.java
b/paimon-arrow/src/test/java/org/apache/paimon/arrow/vector/ArrowFormatWriterTest.java
index d7ee8ca1a5..76df181683 100644
---
a/paimon-arrow/src/test/java/org/apache/paimon/arrow/vector/ArrowFormatWriterTest.java
+++
b/paimon-arrow/src/test/java/org/apache/paimon/arrow/vector/ArrowFormatWriterTest.java
@@ -276,6 +276,25 @@ public class ArrowFormatWriterTest {
}
}
+ @Test
+ public void testArrowFormatCWriterWithEmptySchema() {
+ RowType emptyschema = new RowType(new ArrayList<>());
+
+ try (RootAllocator rootAllocator = new RootAllocator();
+ BufferAllocator allocator =
+ rootAllocator.newChildAllocator("paimonWriter", 0,
Long.MAX_VALUE);
+ ArrowFormatCWriter writer =
+ new ArrowFormatCWriter(emptyschema, 4096, true,
allocator)) {
+ for (int i = 0; i < 100; i++) {
+ writer.write(GenericRow.of());
+ }
+ writer.flush();
+ ArrowCStruct cStruct = writer.toCStruct();
+ Assertions.assertThat(cStruct).isNotNull();
+ writer.release();
+ }
+ }
+
private void writeAndCheck(ArrowFormatCWriter writer) {
List<InternalRow> list = new ArrayList<>();
List<InternalRow.FieldGetter> fieldGetters = new ArrayList<>();