@@ -172,17 +172,28 @@ test('ES|QL helper', t => {
172
172
t . end ( )
173
173
} )
174
174
175
- test ( 'toArrowReader' , t => {
176
- t . test ( 'Parses a binary response into an Arrow stream reader' , async t => {
177
- const binaryContent = '/////zABAAAQAAAAAAAKAA4ABgANAAgACgAAAAAABAAQAAAAAAEKAAwAAAAIAAQACgAAAAgAAAAIAAAAAAAAAAIAAAB8AAAABAAAAJ7///8UAAAARAAAAEQAAAAAAAoBRAAAAAEAAAAEAAAAjP///wgAAAAQAAAABAAAAGRhdGUAAAAADAAAAGVsYXN0aWM6dHlwZQAAAAAAAAAAgv///wAAAQAEAAAAZGF0ZQAAEgAYABQAEwASAAwAAAAIAAQAEgAAABQAAABMAAAAVAAAAAAAAwFUAAAAAQAAAAwAAAAIAAwACAAEAAgAAAAIAAAAEAAAAAYAAABkb3VibGUAAAwAAABlbGFzdGljOnR5cGUAAAAAAAAAAAAABgAIAAYABgAAAAAAAgAGAAAAYW1vdW50AAAAAAAA/////7gAAAAUAAAAAAAAAAwAFgAOABUAEAAEAAwAAABgAAAAAAAAAAAABAAQAAAAAAMKABgADAAIAAQACgAAABQAAABYAAAABQAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAQAAAAAAAAAIAAAAAAAAACgAAAAAAAAAMAAAAAAAAAABAAAAAAAAADgAAAAAAAAAKAAAAAAAAAAAAAAAAgAAAAUAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAHwAAAAAAAAAAAACgmZkTQAAAAGBmZiBAAAAAAAAAL0AAAADAzMwjQAAAAMDMzCtAHwAAAAAAAADV6yywkgEAANWPBquSAQAA1TPgpZIBAADV17mgkgEAANV7k5uSAQAA/////wAAAAA='
175
+ test ( 'toArrowReader' , async t => {
176
+ const testRecords = [
177
+ { amount : 4.900000095367432 , } ,
178
+ { amount : 8.199999809265137 , } ,
179
+ { amount : 15.5 , } ,
180
+ { amount : 9.899999618530273 , } ,
181
+ { amount : 13.899999618530273 , } ,
182
+ ]
183
+
184
+ // build reusable Arrow table
185
+ const table = arrow . tableFromJSON ( testRecords )
186
+ const rawData = await arrow . RecordBatchStreamWriter . writeAll ( table ) . toUint8Array ( )
178
187
188
+ t . test ( 'Parses a binary response into an Arrow stream reader' , async t => {
179
189
const MockConnection = connection . buildMockConnection ( {
180
190
onRequest ( _params ) {
181
191
return {
182
- body : Buffer . from ( binaryContent , 'base64' ) ,
192
+ body : Buffer . from ( rawData ) ,
183
193
statusCode : 200 ,
184
194
headers : {
185
- 'content-type' : 'application/vnd.elasticsearch+arrow+stream'
195
+ 'content-type' : 'application/vnd.elasticsearch+arrow+stream' ,
196
+ 'transfer-encoding' : 'chunked'
186
197
}
187
198
}
188
199
}
@@ -196,26 +207,28 @@ test('ES|QL helper', t => {
196
207
const result = await client . helpers . esql ( { query : 'FROM sample_data' } ) . toArrowReader ( )
197
208
t . ok ( result . isStream ( ) )
198
209
199
- const recordBatch = result . next ( ) . value
200
- t . same ( recordBatch . get ( 0 ) ?. toJSON ( ) , {
201
- amount : 4.900000095367432 ,
202
- date : 1729532586965 ,
203
- } )
210
+ let count = 0
211
+ for await ( const recordBatch of result ) {
212
+ for ( const record of recordBatch ) {
213
+ t . same ( record . toJSON ( ) , testRecords [ count ] )
214
+ count ++
215
+ }
216
+ }
217
+
204
218
t . end ( )
205
219
} )
206
220
207
221
t . test ( 'ESQL helper uses correct x-elastic-client-meta helper value' , async t => {
208
- const binaryContent = '/////zABAAAQAAAAAAAKAA4ABgANAAgACgAAAAAABAAQAAAAAAEKAAwAAAAIAAQACgAAAAgAAAAIAAAAAAAAAAIAAAB8AAAABAAAAJ7///8UAAAARAAAAEQAAAAAAAoBRAAAAAEAAAAEAAAAjP///wgAAAAQAAAABAAAAGRhdGUAAAAADAAAAGVsYXN0aWM6dHlwZQAAAAAAAAAAgv///wAAAQAEAAAAZGF0ZQAAEgAYABQAEwASAAwAAAAIAAQAEgAAABQAAABMAAAAVAAAAAAAAwFUAAAAAQAAAAwAAAAIAAwACAAEAAgAAAAIAAAAEAAAAAYAAABkb3VibGUAAAwAAABlbGFzdGljOnR5cGUAAAAAAAAAAAAABgAIAAYABgAAAAAAAgAGAAAAYW1vdW50AAAAAAAA/////7gAAAAUAAAAAAAAAAwAFgAOABUAEAAEAAwAAABgAAAAAAAAAAAABAAQAAAAAAMKABgADAAIAAQACgAAABQAAABYAAAABQAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAQAAAAAAAAAIAAAAAAAAACgAAAAAAAAAMAAAAAAAAAABAAAAAAAAADgAAAAAAAAAKAAAAAAAAAAAAAAAAgAAAAUAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAHwAAAAAAAAAAAACgmZkTQAAAAGBmZiBAAAAAAAAAL0AAAADAzMwjQAAAAMDMzCtAHwAAAAAAAADV6yywkgEAANWPBquSAQAA1TPgpZIBAADV17mgkgEAANV7k5uSAQAA/////wAAAAA='
209
-
210
222
const MockConnection = connection . buildMockConnection ( {
211
223
onRequest ( params ) {
212
224
const header = params . headers ?. [ 'x-elastic-client-meta' ] ?? ''
213
225
t . ok ( header . includes ( 'h=qa' ) , `Client meta header does not include ESQL helper value: ${ header } ` )
214
226
return {
215
- body : Buffer . from ( binaryContent , 'base64' ) ,
227
+ body : Buffer . from ( rawData ) ,
216
228
statusCode : 200 ,
217
229
headers : {
218
- 'content-type' : 'application/vnd.elasticsearch+arrow+stream'
230
+ 'content-type' : 'application/vnd.elasticsearch+arrow+stream' ,
231
+ 'transfer-encoding' : 'chunked'
219
232
}
220
233
}
221
234
}
@@ -254,10 +267,12 @@ test('ES|QL helper', t => {
254
267
new arrow . RecordBatch ( schema , batch3 . data ) ,
255
268
] )
256
269
270
+ const rawData = await arrow . RecordBatchStreamWriter . writeAll ( table ) . toUint8Array ( )
271
+
257
272
const MockConnection = connection . buildMockConnection ( {
258
273
onRequest ( _params ) {
259
274
return {
260
- body : Buffer . from ( arrow . tableToIPC ( table , "stream" ) ) ,
275
+ body : Buffer . from ( rawData ) ,
261
276
statusCode : 200 ,
262
277
headers : {
263
278
'content-type' : 'application/vnd.elasticsearch+arrow+stream'
@@ -275,7 +290,7 @@ test('ES|QL helper', t => {
275
290
t . ok ( result . isStream ( ) )
276
291
277
292
let counter = 0
278
- for ( const batch of result ) {
293
+ for await ( const batch of result ) {
279
294
for ( const row of batch ) {
280
295
counter ++
281
296
const { id, val } = row . toJSON ( )
0 commit comments