@@ -260,6 +260,41 @@ public void testSingleBlock() throws IOException {
260260 compareEsqlAndArrow (testCase );
261261 }
262262
263+ /**
264+ * Test that multivalued arrays are rejected
265+ */
266+ public void testMultivaluedField () throws IOException {
267+ IntBlock .Builder builder = BLOCK_FACTORY .newIntBlockBuilder (0 );
268+ builder .appendInt (42 );
269+ builder .appendInt (43 );
270+ builder .beginPositionEntry ();
271+ builder .appendInt (44 );
272+ builder .appendInt (45 );
273+ builder .endPositionEntry ();
274+ builder .appendInt (46 );
275+ IntBlock block = builder .build ();
276+
277+ // Consistency check
278+ assertTrue (block .mayHaveMultivaluedFields ());
279+ assertEquals (0 , block .getFirstValueIndex (0 ));
280+ assertEquals (1 , block .getValueCount (0 ));
281+ assertEquals (1 , block .getValueCount (1 ));
282+
283+ assertEquals (2 , block .getValueCount (2 ));
284+ assertEquals (2 , block .getFirstValueIndex (2 ));
285+ assertEquals (45 , block .getInt (block .getFirstValueIndex (2 ) + 1 ));
286+
287+ assertEquals (4 , block .getFirstValueIndex (3 ));
288+
289+ var column = TestColumn .create ("some-field" , "integer" );
290+ TestCase testCase = new TestCase (List .of (column ), List .of (new TestPage (List .of (new TestBlock (column , block , Density .Dense )))));
291+
292+ IllegalArgumentException exc = assertThrows (IllegalArgumentException .class , () -> compareEsqlAndArrow (testCase ));
293+
294+ assertEquals ("ES|QL response field [some-field] is multi-valued. This isn't supported yet by the Arrow format" , exc .getMessage ());
295+
296+ }
297+
263298 /**
264299 * Test a random set of types/columns/pages/densities
265300 */
0 commit comments