@@ -182,17 +182,28 @@ test('ES|QL helper', t => {
182
182
t . end ( )
183
183
} )
184
184
185
- test ( 'toArrowReader' , t => {
186
- t . test ( 'Parses a binary response into an Arrow stream reader' , async t => {
187
- const binaryContent = '/////zABAAAQAAAAAAAKAA4ABgANAAgACgAAAAAABAAQAAAAAAEKAAwAAAAIAAQACgAAAAgAAAAIAAAAAAAAAAIAAAB8AAAABAAAAJ7///8UAAAARAAAAEQAAAAAAAoBRAAAAAEAAAAEAAAAjP///wgAAAAQAAAABAAAAGRhdGUAAAAADAAAAGVsYXN0aWM6dHlwZQAAAAAAAAAAgv///wAAAQAEAAAAZGF0ZQAAEgAYABQAEwASAAwAAAAIAAQAEgAAABQAAABMAAAAVAAAAAAAAwFUAAAAAQAAAAwAAAAIAAwACAAEAAgAAAAIAAAAEAAAAAYAAABkb3VibGUAAAwAAABlbGFzdGljOnR5cGUAAAAAAAAAAAAABgAIAAYABgAAAAAAAgAGAAAAYW1vdW50AAAAAAAA/////7gAAAAUAAAAAAAAAAwAFgAOABUAEAAEAAwAAABgAAAAAAAAAAAABAAQAAAAAAMKABgADAAIAAQACgAAABQAAABYAAAABQAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAQAAAAAAAAAIAAAAAAAAACgAAAAAAAAAMAAAAAAAAAABAAAAAAAAADgAAAAAAAAAKAAAAAAAAAAAAAAAAgAAAAUAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAHwAAAAAAAAAAAACgmZkTQAAAAGBmZiBAAAAAAAAAL0AAAADAzMwjQAAAAMDMzCtAHwAAAAAAAADV6yywkgEAANWPBquSAQAA1TPgpZIBAADV17mgkgEAANV7k5uSAQAA/////wAAAAA='
185
+ test ( 'toArrowReader' , async t => {
186
+ const testRecords = [
187
+ { amount : 4.900000095367432 , } ,
188
+ { amount : 8.199999809265137 , } ,
189
+ { amount : 15.5 , } ,
190
+ { amount : 9.899999618530273 , } ,
191
+ { amount : 13.899999618530273 , } ,
192
+ ]
193
+
194
+ // build reusable Arrow table
195
+ const table = arrow . tableFromJSON ( testRecords )
196
+ const rawData = await arrow . RecordBatchStreamWriter . writeAll ( table ) . toUint8Array ( )
188
197
198
+ t . test ( 'Parses a binary response into an Arrow stream reader' , async t => {
189
199
const MockConnection = connection . buildMockConnection ( {
190
200
onRequest ( _params ) {
191
201
return {
192
- body : Buffer . from ( binaryContent , 'base64' ) ,
202
+ body : Buffer . from ( rawData ) ,
193
203
statusCode : 200 ,
194
204
headers : {
195
- 'content-type' : 'application/vnd.elasticsearch+arrow+stream'
205
+ 'content-type' : 'application/vnd.elasticsearch+arrow+stream' ,
206
+ 'transfer-encoding' : 'chunked'
196
207
}
197
208
}
198
209
}
@@ -206,30 +217,8 @@ test('ES|QL helper', t => {
206
217
const result = await client . helpers . esql ( { query : 'FROM sample_data' } ) . toArrowReader ( )
207
218
t . ok ( result . isStream ( ) )
208
219
209
- const testRecords = [
210
- {
211
- amount : 4.900000095367432 ,
212
- date : 1729532586965 ,
213
- } ,
214
- {
215
- amount : 8.199999809265137 ,
216
- date : 1729446186965 ,
217
- } ,
218
- {
219
- amount : 15.5 ,
220
- date : 1729359786965 ,
221
- } ,
222
- {
223
- amount : 9.899999618530273 ,
224
- date : 1729273386965 ,
225
- } ,
226
- {
227
- amount : 13.899999618530273 ,
228
- date : 1729186986965 ,
229
- } ,
230
- ]
231
220
let count = 0
232
- for ( const recordBatch of result ) {
221
+ for await ( const recordBatch of result ) {
233
222
for ( const record of recordBatch ) {
234
223
t . same ( record . toJSON ( ) , testRecords [ count ] )
235
224
count ++
@@ -240,17 +229,16 @@ test('ES|QL helper', t => {
240
229
} )
241
230
242
231
t . test ( 'ESQL helper uses correct x-elastic-client-meta helper value' , async t => {
243
- const binaryContent = '/////zABAAAQAAAAAAAKAA4ABgANAAgACgAAAAAABAAQAAAAAAEKAAwAAAAIAAQACgAAAAgAAAAIAAAAAAAAAAIAAAB8AAAABAAAAJ7///8UAAAARAAAAEQAAAAAAAoBRAAAAAEAAAAEAAAAjP///wgAAAAQAAAABAAAAGRhdGUAAAAADAAAAGVsYXN0aWM6dHlwZQAAAAAAAAAAgv///wAAAQAEAAAAZGF0ZQAAEgAYABQAEwASAAwAAAAIAAQAEgAAABQAAABMAAAAVAAAAAAAAwFUAAAAAQAAAAwAAAAIAAwACAAEAAgAAAAIAAAAEAAAAAYAAABkb3VibGUAAAwAAABlbGFzdGljOnR5cGUAAAAAAAAAAAAABgAIAAYABgAAAAAAAgAGAAAAYW1vdW50AAAAAAAA/////7gAAAAUAAAAAAAAAAwAFgAOABUAEAAEAAwAAABgAAAAAAAAAAAABAAQAAAAAAMKABgADAAIAAQACgAAABQAAABYAAAABQAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAQAAAAAAAAAIAAAAAAAAACgAAAAAAAAAMAAAAAAAAAABAAAAAAAAADgAAAAAAAAAKAAAAAAAAAAAAAAAAgAAAAUAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAHwAAAAAAAAAAAACgmZkTQAAAAGBmZiBAAAAAAAAAL0AAAADAzMwjQAAAAMDMzCtAHwAAAAAAAADV6yywkgEAANWPBquSAQAA1TPgpZIBAADV17mgkgEAANV7k5uSAQAA/////wAAAAA='
244
-
245
232
const MockConnection = connection . buildMockConnection ( {
246
233
onRequest ( params ) {
247
234
const header = params . headers ?. [ 'x-elastic-client-meta' ] ?? ''
248
235
t . ok ( header . includes ( 'h=qa' ) , `Client meta header does not include ESQL helper value: ${ header } ` )
249
236
return {
250
- body : Buffer . from ( binaryContent , 'base64' ) ,
237
+ body : Buffer . from ( rawData ) ,
251
238
statusCode : 200 ,
252
239
headers : {
253
- 'content-type' : 'application/vnd.elasticsearch+arrow+stream'
240
+ 'content-type' : 'application/vnd.elasticsearch+arrow+stream' ,
241
+ 'transfer-encoding' : 'chunked'
254
242
}
255
243
}
256
244
}
@@ -289,10 +277,12 @@ test('ES|QL helper', t => {
289
277
new arrow . RecordBatch ( schema , batch3 . data ) ,
290
278
] )
291
279
280
+ const rawData = await arrow . RecordBatchStreamWriter . writeAll ( table ) . toUint8Array ( )
281
+
292
282
const MockConnection = connection . buildMockConnection ( {
293
283
onRequest ( _params ) {
294
284
return {
295
- body : Buffer . from ( arrow . tableToIPC ( table , "stream" ) ) ,
285
+ body : Buffer . from ( rawData ) ,
296
286
statusCode : 200 ,
297
287
headers : {
298
288
'content-type' : 'application/vnd.elasticsearch+arrow+stream'
@@ -310,7 +300,7 @@ test('ES|QL helper', t => {
310
300
t . ok ( result . isStream ( ) )
311
301
312
302
let counter = 0
313
- for ( const batch of result ) {
303
+ for await ( const batch of result ) {
314
304
for ( const row of batch ) {
315
305
counter ++
316
306
const { id, val } = row . toJSON ( )
0 commit comments