This is an automated email from the ASF dual-hosted git repository.

Jackie-Jiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pinot.git


The following commit(s) were added to refs/heads/master by this push:
     new 5b650aed3bc Fix Arrow response encoder failing on non-String OBJECT 
values (#19591)
5b650aed3bc is described below

commit 5b650aed3bc7a316476cf273175e0ea620ea71b3
Author: Xiaotian (Jackie) Jiang <[email protected]>
AuthorDate: Thu Sep 17 17:16:31 2026 -0700

    Fix Arrow response encoder failing on non-String OBJECT values (#19591)
---
 .../common/response/encoder/ArrowResponseEncoder.java    |  3 ++-
 .../response/encoder/ArrowResponseEncoderTest.java       | 16 ++++++++++++++++
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git 
a/pinot-common/src/main/java/org/apache/pinot/common/response/encoder/ArrowResponseEncoder.java
 
b/pinot-common/src/main/java/org/apache/pinot/common/response/encoder/ArrowResponseEncoder.java
index efd9098991e..4fb37bb9776 100644
--- 
a/pinot-common/src/main/java/org/apache/pinot/common/response/encoder/ArrowResponseEncoder.java
+++ 
b/pinot-common/src/main/java/org/apache/pinot/common/response/encoder/ArrowResponseEncoder.java
@@ -238,7 +238,8 @@ public class ArrowResponseEncoder implements 
ResponseEncoder {
             case BYTES:
             case UUID:
             case OBJECT:
-              byte[] bytes = ((String) value).getBytes(StandardCharsets.UTF_8);
+              // The broker renders every other type in this group to a 
String; OBJECT values arrive as-is
+              byte[] bytes = value.toString().getBytes(StandardCharsets.UTF_8);
               ((VarCharVector) vector).setSafe(rowIndex, bytes);
               break;
             case MAP:
diff --git 
a/pinot-common/src/test/java/org/apache/pinot/common/response/encoder/ArrowResponseEncoderTest.java
 
b/pinot-common/src/test/java/org/apache/pinot/common/response/encoder/ArrowResponseEncoderTest.java
index ea141a29398..b7f0ffb9ea9 100644
--- 
a/pinot-common/src/test/java/org/apache/pinot/common/response/encoder/ArrowResponseEncoderTest.java
+++ 
b/pinot-common/src/test/java/org/apache/pinot/common/response/encoder/ArrowResponseEncoderTest.java
@@ -184,6 +184,22 @@ public class ArrowResponseEncoderTest {
     assertNull(decodedTable.getRows().get(1)[1], "Null UUID array should 
round-trip as null");
   }
 
+  /// `OBJECT` values are not rendered by the broker (e.g. a `Long` returned 
by a post-aggregation function), so the
+  /// encoder writes their `toString()` form.
+  @Test
+  public void testEncodeDecodeObjectColumnWithNonStringValue()
+      throws IOException {
+    DataSchema schema = new DataSchema(new String[]{"objectCol"}, new 
ColumnDataType[]{ColumnDataType.OBJECT});
+    List<Object[]> rows = List.<Object[]>of(new Object[]{1L});
+
+    ResultTable resultTable = new ResultTable(schema, rows);
+    ArrowResponseEncoder encoder = new ArrowResponseEncoder();
+    byte[] encodedBytes = encoder.encodeResultTable(resultTable, 0, 
rows.size());
+    ResultTable decodedTable = encoder.decodeResultTable(encodedBytes, 
rows.size(), schema);
+
+    assertEquals(decodedTable.getRows().get(0)[0], "1");
+  }
+
   @Test
   public void testEncodeDecodeAllDataTypes()
       throws IOException {


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to