@@ -158,17 +158,28 @@ test('ES|QL helper', t => {
158
158
t . end ( )
159
159
} )
160
160
161
- test ( 'toArrowReader' , t => {
162
- t . test ( 'Parses a binary response into an Arrow stream reader' , async t => {
163
- const binaryContent = '/////zABAAAQAAAAAAAKAA4ABgANAAgACgAAAAAABAAQAAAAAAEKAAwAAAAIAAQACgAAAAgAAAAIAAAAAAAAAAIAAAB8AAAABAAAAJ7///8UAAAARAAAAEQAAAAAAAoBRAAAAAEAAAAEAAAAjP///wgAAAAQAAAABAAAAGRhdGUAAAAADAAAAGVsYXN0aWM6dHlwZQAAAAAAAAAAgv///wAAAQAEAAAAZGF0ZQAAEgAYABQAEwASAAwAAAAIAAQAEgAAABQAAABMAAAAVAAAAAAAAwFUAAAAAQAAAAwAAAAIAAwACAAEAAgAAAAIAAAAEAAAAAYAAABkb3VibGUAAAwAAABlbGFzdGljOnR5cGUAAAAAAAAAAAAABgAIAAYABgAAAAAAAgAGAAAAYW1vdW50AAAAAAAA/////7gAAAAUAAAAAAAAAAwAFgAOABUAEAAEAAwAAABgAAAAAAAAAAAABAAQAAAAAAMKABgADAAIAAQACgAAABQAAABYAAAABQAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAQAAAAAAAAAIAAAAAAAAACgAAAAAAAAAMAAAAAAAAAABAAAAAAAAADgAAAAAAAAAKAAAAAAAAAAAAAAAAgAAAAUAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAHwAAAAAAAAAAAACgmZkTQAAAAGBmZiBAAAAAAAAAL0AAAADAzMwjQAAAAMDMzCtAHwAAAAAAAADV6yywkgEAANWPBquSAQAA1TPgpZIBAADV17mgkgEAANV7k5uSAQAA/////wAAAAA='
161
+ test ( 'toArrowReader' , async t => {
162
+ const testRecords = [
163
+ { amount : 4.900000095367432 , } ,
164
+ { amount : 8.199999809265137 , } ,
165
+ { amount : 15.5 , } ,
166
+ { amount : 9.899999618530273 , } ,
167
+ { amount : 13.899999618530273 , } ,
168
+ ]
169
+
170
+ // build reusable Arrow table
171
+ const table = arrow . tableFromJSON ( testRecords )
172
+ const rawData = await arrow . RecordBatchStreamWriter . writeAll ( table ) . toUint8Array ( )
164
173
174
+ t . test ( 'Parses a binary response into an Arrow stream reader' , async t => {
165
175
const MockConnection = connection . buildMockConnection ( {
166
176
onRequest ( _params ) {
167
177
return {
168
- body : Buffer . from ( binaryContent , 'base64' ) ,
178
+ body : Buffer . from ( rawData ) ,
169
179
statusCode : 200 ,
170
180
headers : {
171
- 'content-type' : 'application/vnd.elasticsearch+arrow+stream'
181
+ 'content-type' : 'application/vnd.elasticsearch+arrow+stream' ,
182
+ 'transfer-encoding' : 'chunked'
172
183
}
173
184
}
174
185
}
@@ -182,26 +193,28 @@ test('ES|QL helper', t => {
182
193
const result = await client . helpers . esql ( { query : 'FROM sample_data' } ) . toArrowReader ( )
183
194
t . ok ( result . isStream ( ) )
184
195
185
- const recordBatch = result . next ( ) . value
186
- t . same ( recordBatch . get ( 0 ) ?. toJSON ( ) , {
187
- amount : 4.900000095367432 ,
188
- date : 1729532586965 ,
189
- } )
196
+ let count = 0
197
+ for await ( const recordBatch of result ) {
198
+ for ( const record of recordBatch ) {
199
+ t . same ( record . toJSON ( ) , testRecords [ count ] )
200
+ count ++
201
+ }
202
+ }
203
+
190
204
t . end ( )
191
205
} )
192
206
193
207
t . test ( 'ESQL helper uses correct x-elastic-client-meta helper value' , async t => {
194
- const binaryContent = '/////zABAAAQAAAAAAAKAA4ABgANAAgACgAAAAAABAAQAAAAAAEKAAwAAAAIAAQACgAAAAgAAAAIAAAAAAAAAAIAAAB8AAAABAAAAJ7///8UAAAARAAAAEQAAAAAAAoBRAAAAAEAAAAEAAAAjP///wgAAAAQAAAABAAAAGRhdGUAAAAADAAAAGVsYXN0aWM6dHlwZQAAAAAAAAAAgv///wAAAQAEAAAAZGF0ZQAAEgAYABQAEwASAAwAAAAIAAQAEgAAABQAAABMAAAAVAAAAAAAAwFUAAAAAQAAAAwAAAAIAAwACAAEAAgAAAAIAAAAEAAAAAYAAABkb3VibGUAAAwAAABlbGFzdGljOnR5cGUAAAAAAAAAAAAABgAIAAYABgAAAAAAAgAGAAAAYW1vdW50AAAAAAAA/////7gAAAAUAAAAAAAAAAwAFgAOABUAEAAEAAwAAABgAAAAAAAAAAAABAAQAAAAAAMKABgADAAIAAQACgAAABQAAABYAAAABQAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAQAAAAAAAAAIAAAAAAAAACgAAAAAAAAAMAAAAAAAAAABAAAAAAAAADgAAAAAAAAAKAAAAAAAAAAAAAAAAgAAAAUAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAHwAAAAAAAAAAAACgmZkTQAAAAGBmZiBAAAAAAAAAL0AAAADAzMwjQAAAAMDMzCtAHwAAAAAAAADV6yywkgEAANWPBquSAQAA1TPgpZIBAADV17mgkgEAANV7k5uSAQAA/////wAAAAA='
195
-
196
208
const MockConnection = connection . buildMockConnection ( {
197
209
onRequest ( params ) {
198
210
const header = params . headers ?. [ 'x-elastic-client-meta' ] ?? ''
199
211
t . ok ( header . includes ( 'h=qa' ) , `Client meta header does not include ESQL helper value: ${ header } ` )
200
212
return {
201
- body : Buffer . from ( binaryContent , 'base64' ) ,
213
+ body : Buffer . from ( rawData ) ,
202
214
statusCode : 200 ,
203
215
headers : {
204
- 'content-type' : 'application/vnd.elasticsearch+arrow+stream'
216
+ 'content-type' : 'application/vnd.elasticsearch+arrow+stream' ,
217
+ 'transfer-encoding' : 'chunked'
205
218
}
206
219
}
207
220
}
@@ -240,10 +253,12 @@ test('ES|QL helper', t => {
240
253
new arrow . RecordBatch ( schema , batch3 . data ) ,
241
254
] )
242
255
256
+ const rawData = await arrow . RecordBatchStreamWriter . writeAll ( table ) . toUint8Array ( )
257
+
243
258
const MockConnection = connection . buildMockConnection ( {
244
259
onRequest ( _params ) {
245
260
return {
246
- body : Buffer . from ( arrow . tableToIPC ( table , "stream" ) ) ,
261
+ body : Buffer . from ( rawData ) ,
247
262
statusCode : 200 ,
248
263
headers : {
249
264
'content-type' : 'application/vnd.elasticsearch+arrow+stream'
@@ -261,7 +276,7 @@ test('ES|QL helper', t => {
261
276
t . ok ( result . isStream ( ) )
262
277
263
278
let counter = 0
264
- for ( const batch of result ) {
279
+ for await ( const batch of result ) {
265
280
for ( const row of batch ) {
266
281
counter ++
267
282
const { id, val } = row . toJSON ( )
0 commit comments