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]