red-arrow-format 23.0.0 → 24.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +7 -2
- data/NOTICE.txt +1 -1
- data/Rakefile +23 -1
- data/lib/arrow-format/array.rb +486 -117
- data/lib/arrow-format/bitmap.rb +25 -6
- data/lib/arrow-format/buffer-alignable.rb +35 -0
- data/lib/arrow-format/dictionary.rb +29 -0
- data/lib/arrow-format/error.rb +1 -1
- data/lib/arrow-format/field.rb +24 -3
- data/lib/arrow-format/file-reader.rb +47 -25
- data/lib/arrow-format/file-writer.rb +56 -0
- data/lib/arrow-format/flatbuffers.rb +67 -0
- data/lib/arrow-format/org/apache/arrow/flatbuf/binary.rb +5 -1
- data/lib/arrow-format/org/apache/arrow/flatbuf/binary_view.rb +5 -1
- data/lib/arrow-format/org/apache/arrow/flatbuf/block.rb +10 -2
- data/lib/arrow-format/org/apache/arrow/flatbuf/body_compression.rb +8 -1
- data/lib/arrow-format/org/apache/arrow/flatbuf/body_compression_method.rb +3 -1
- data/lib/arrow-format/org/apache/arrow/flatbuf/bool.rb +5 -1
- data/lib/arrow-format/org/apache/arrow/flatbuf/buffer.rb +8 -1
- data/lib/arrow-format/org/apache/arrow/flatbuf/compression_type.rb +1 -1
- data/lib/arrow-format/org/apache/arrow/flatbuf/date.rb +7 -1
- data/lib/arrow-format/org/apache/arrow/flatbuf/date_unit.rb +1 -1
- data/lib/arrow-format/org/apache/arrow/flatbuf/decimal.rb +9 -1
- data/lib/arrow-format/org/apache/arrow/flatbuf/dictionary_batch.rb +9 -1
- data/lib/arrow-format/org/apache/arrow/flatbuf/dictionary_encoding.rb +11 -2
- data/lib/arrow-format/org/apache/arrow/flatbuf/dictionary_kind.rb +1 -1
- data/lib/arrow-format/org/apache/arrow/flatbuf/duration.rb +7 -1
- data/lib/arrow-format/org/apache/arrow/flatbuf/endianness.rb +1 -1
- data/lib/arrow-format/org/apache/arrow/flatbuf/feature.rb +1 -1
- data/lib/arrow-format/org/apache/arrow/flatbuf/field.rb +13 -1
- data/lib/arrow-format/org/apache/arrow/flatbuf/field_node.rb +8 -1
- data/lib/arrow-format/org/apache/arrow/flatbuf/fixed_size_binary.rb +7 -1
- data/lib/arrow-format/org/apache/arrow/flatbuf/fixed_size_list.rb +7 -1
- data/lib/arrow-format/org/apache/arrow/flatbuf/floating_point.rb +7 -1
- data/lib/arrow-format/org/apache/arrow/flatbuf/footer.rb +22 -2
- data/lib/arrow-format/org/apache/arrow/flatbuf/int.rb +8 -1
- data/lib/arrow-format/org/apache/arrow/flatbuf/interval.rb +7 -1
- data/lib/arrow-format/org/apache/arrow/flatbuf/interval_unit.rb +1 -1
- data/lib/arrow-format/org/apache/arrow/flatbuf/key_value.rb +8 -1
- data/lib/arrow-format/org/apache/arrow/flatbuf/large_binary.rb +5 -1
- data/lib/arrow-format/org/apache/arrow/flatbuf/large_list.rb +5 -1
- data/lib/arrow-format/org/apache/arrow/flatbuf/large_list_view.rb +5 -1
- data/lib/arrow-format/org/apache/arrow/flatbuf/large_utf8.rb +5 -1
- data/lib/arrow-format/org/apache/arrow/flatbuf/list.rb +5 -1
- data/lib/arrow-format/org/apache/arrow/flatbuf/list_view.rb +5 -1
- data/lib/arrow-format/org/apache/arrow/flatbuf/map.rb +8 -2
- data/lib/arrow-format/org/apache/arrow/flatbuf/message.rb +22 -2
- data/lib/arrow-format/org/apache/arrow/flatbuf/message_header.rb +1 -1
- data/lib/arrow-format/org/apache/arrow/flatbuf/metadata_version.rb +1 -1
- data/lib/arrow-format/org/apache/arrow/flatbuf/null.rb +5 -1
- data/lib/arrow-format/org/apache/arrow/flatbuf/precision.rb +1 -1
- data/lib/arrow-format/org/apache/arrow/flatbuf/record_batch.rb +12 -2
- data/lib/arrow-format/org/apache/arrow/flatbuf/run_end_encoded.rb +5 -1
- data/lib/arrow-format/org/apache/arrow/flatbuf/schema.rb +10 -1
- data/lib/arrow-format/org/apache/arrow/flatbuf/sparse_matrix_compressed_axis.rb +1 -1
- data/lib/arrow-format/org/apache/arrow/flatbuf/sparse_matrix_index_csx.rb +12 -2
- data/lib/arrow-format/org/apache/arrow/flatbuf/sparse_tensor.rb +13 -1
- data/lib/arrow-format/org/apache/arrow/flatbuf/sparse_tensor_index.rb +1 -1
- data/lib/arrow-format/org/apache/arrow/flatbuf/sparse_tensor_index_coo.rb +13 -4
- data/lib/arrow-format/org/apache/arrow/flatbuf/sparse_tensor_index_csf.rb +14 -4
- data/lib/arrow-format/org/apache/arrow/flatbuf/struct_.rb +5 -1
- data/lib/arrow-format/org/apache/arrow/flatbuf/tensor.rb +11 -1
- data/lib/arrow-format/org/apache/arrow/flatbuf/tensor_dim.rb +8 -1
- data/lib/arrow-format/org/apache/arrow/flatbuf/time.rb +8 -1
- data/lib/arrow-format/org/apache/arrow/flatbuf/time_unit.rb +1 -1
- data/lib/arrow-format/org/apache/arrow/flatbuf/timestamp.rb +8 -1
- data/lib/arrow-format/org/apache/arrow/flatbuf/type.rb +1 -1
- data/lib/arrow-format/org/apache/arrow/flatbuf/union.rb +8 -1
- data/lib/arrow-format/org/apache/arrow/flatbuf/union_mode.rb +1 -1
- data/lib/arrow-format/org/apache/arrow/flatbuf/utf8.rb +5 -1
- data/lib/arrow-format/org/apache/arrow/flatbuf/utf8view.rb +5 -1
- data/lib/arrow-format/readable.rb +151 -96
- data/lib/arrow-format/record-batch.rb +70 -1
- data/lib/arrow-format/schema.rb +14 -1
- data/lib/arrow-format/streaming-pull-reader.rb +49 -23
- data/lib/arrow-format/streaming-reader.rb +51 -14
- data/lib/arrow-format/streaming-writer.rb +156 -0
- data/lib/arrow-format/type.rb +397 -34
- data/lib/arrow-format/version.rb +1 -1
- data/lib/arrow-format.rb +2 -0
- data/red-arrow-format.gemspec +2 -1
- metadata +9 -4
data/lib/arrow-format/type.rb
CHANGED
|
@@ -16,6 +16,9 @@
|
|
|
16
16
|
|
|
17
17
|
module ArrowFormat
|
|
18
18
|
class Type
|
|
19
|
+
def to_s
|
|
20
|
+
name
|
|
21
|
+
end
|
|
19
22
|
end
|
|
20
23
|
|
|
21
24
|
class NullType < Type
|
|
@@ -30,11 +33,18 @@ module ArrowFormat
|
|
|
30
33
|
end
|
|
31
34
|
|
|
32
35
|
def build_array(size)
|
|
33
|
-
NullArray.new(
|
|
36
|
+
NullArray.new(size)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def to_flatbuffers
|
|
40
|
+
FB::Null::Data.new
|
|
34
41
|
end
|
|
35
42
|
end
|
|
36
43
|
|
|
37
|
-
class
|
|
44
|
+
class PrimitiveType < Type
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
class BooleanType < PrimitiveType
|
|
38
48
|
class << self
|
|
39
49
|
def singleton
|
|
40
50
|
@singleton ||= new
|
|
@@ -46,21 +56,35 @@ module ArrowFormat
|
|
|
46
56
|
end
|
|
47
57
|
|
|
48
58
|
def build_array(size, validity_buffer, values_buffer)
|
|
49
|
-
BooleanArray.new(
|
|
59
|
+
BooleanArray.new(size, validity_buffer, values_buffer)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def to_flatbuffers
|
|
63
|
+
FB::Bool::Data.new
|
|
50
64
|
end
|
|
51
65
|
end
|
|
52
66
|
|
|
53
|
-
class NumberType <
|
|
67
|
+
class NumberType < PrimitiveType
|
|
54
68
|
end
|
|
55
69
|
|
|
56
70
|
class IntType < NumberType
|
|
57
71
|
attr_reader :bit_width
|
|
58
|
-
attr_reader :signed
|
|
59
72
|
def initialize(bit_width, signed)
|
|
60
73
|
super()
|
|
61
74
|
@bit_width = bit_width
|
|
62
75
|
@signed = signed
|
|
63
76
|
end
|
|
77
|
+
|
|
78
|
+
def signed?
|
|
79
|
+
@signed
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def to_flatbuffers
|
|
83
|
+
fb_type = FB::Int::Data.new
|
|
84
|
+
fb_type.bit_width = @bit_width
|
|
85
|
+
fb_type.signed = @signed
|
|
86
|
+
fb_type
|
|
87
|
+
end
|
|
64
88
|
end
|
|
65
89
|
|
|
66
90
|
class Int8Type < IntType
|
|
@@ -83,7 +107,7 @@ module ArrowFormat
|
|
|
83
107
|
end
|
|
84
108
|
|
|
85
109
|
def build_array(size, validity_buffer, values_buffer)
|
|
86
|
-
Int8Array.new(
|
|
110
|
+
Int8Array.new(size, validity_buffer, values_buffer)
|
|
87
111
|
end
|
|
88
112
|
end
|
|
89
113
|
|
|
@@ -107,7 +131,7 @@ module ArrowFormat
|
|
|
107
131
|
end
|
|
108
132
|
|
|
109
133
|
def build_array(size, validity_buffer, values_buffer)
|
|
110
|
-
UInt8Array.new(
|
|
134
|
+
UInt8Array.new(size, validity_buffer, values_buffer)
|
|
111
135
|
end
|
|
112
136
|
end
|
|
113
137
|
|
|
@@ -131,7 +155,7 @@ module ArrowFormat
|
|
|
131
155
|
end
|
|
132
156
|
|
|
133
157
|
def build_array(size, validity_buffer, values_buffer)
|
|
134
|
-
Int16Array.new(
|
|
158
|
+
Int16Array.new(size, validity_buffer, values_buffer)
|
|
135
159
|
end
|
|
136
160
|
end
|
|
137
161
|
|
|
@@ -155,7 +179,7 @@ module ArrowFormat
|
|
|
155
179
|
end
|
|
156
180
|
|
|
157
181
|
def build_array(size, validity_buffer, values_buffer)
|
|
158
|
-
UInt16Array.new(
|
|
182
|
+
UInt16Array.new(size, validity_buffer, values_buffer)
|
|
159
183
|
end
|
|
160
184
|
end
|
|
161
185
|
|
|
@@ -179,7 +203,7 @@ module ArrowFormat
|
|
|
179
203
|
end
|
|
180
204
|
|
|
181
205
|
def build_array(size, validity_buffer, values_buffer)
|
|
182
|
-
Int32Array.new(
|
|
206
|
+
Int32Array.new(size, validity_buffer, values_buffer)
|
|
183
207
|
end
|
|
184
208
|
end
|
|
185
209
|
|
|
@@ -203,7 +227,7 @@ module ArrowFormat
|
|
|
203
227
|
end
|
|
204
228
|
|
|
205
229
|
def build_array(size, validity_buffer, values_buffer)
|
|
206
|
-
UInt32Array.new(
|
|
230
|
+
UInt32Array.new(size, validity_buffer, values_buffer)
|
|
207
231
|
end
|
|
208
232
|
end
|
|
209
233
|
|
|
@@ -227,7 +251,7 @@ module ArrowFormat
|
|
|
227
251
|
end
|
|
228
252
|
|
|
229
253
|
def build_array(size, validity_buffer, values_buffer)
|
|
230
|
-
Int64Array.new(
|
|
254
|
+
Int64Array.new(size, validity_buffer, values_buffer)
|
|
231
255
|
end
|
|
232
256
|
end
|
|
233
257
|
|
|
@@ -251,7 +275,7 @@ module ArrowFormat
|
|
|
251
275
|
end
|
|
252
276
|
|
|
253
277
|
def build_array(size, validity_buffer, values_buffer)
|
|
254
|
-
UInt64Array.new(
|
|
278
|
+
UInt64Array.new(size, validity_buffer, values_buffer)
|
|
255
279
|
end
|
|
256
280
|
end
|
|
257
281
|
|
|
@@ -261,6 +285,12 @@ module ArrowFormat
|
|
|
261
285
|
super()
|
|
262
286
|
@precision = precision
|
|
263
287
|
end
|
|
288
|
+
|
|
289
|
+
def to_flatbuffers
|
|
290
|
+
fb_type = FB::FloatingPoint::Data.new
|
|
291
|
+
fb_type.precision = FB::Precision.try_convert(@precision.to_s.upcase)
|
|
292
|
+
fb_type
|
|
293
|
+
end
|
|
264
294
|
end
|
|
265
295
|
|
|
266
296
|
class Float32Type < FloatingPointType
|
|
@@ -278,8 +308,12 @@ module ArrowFormat
|
|
|
278
308
|
"Float32"
|
|
279
309
|
end
|
|
280
310
|
|
|
311
|
+
def buffer_type
|
|
312
|
+
:f32
|
|
313
|
+
end
|
|
314
|
+
|
|
281
315
|
def build_array(size, validity_buffer, values_buffer)
|
|
282
|
-
Float32Array.new(
|
|
316
|
+
Float32Array.new(size, validity_buffer, values_buffer)
|
|
283
317
|
end
|
|
284
318
|
end
|
|
285
319
|
|
|
@@ -298,15 +332,30 @@ module ArrowFormat
|
|
|
298
332
|
"Float64"
|
|
299
333
|
end
|
|
300
334
|
|
|
335
|
+
def buffer_type
|
|
336
|
+
:f64
|
|
337
|
+
end
|
|
338
|
+
|
|
301
339
|
def build_array(size, validity_buffer, values_buffer)
|
|
302
|
-
Float64Array.new(
|
|
340
|
+
Float64Array.new(size, validity_buffer, values_buffer)
|
|
303
341
|
end
|
|
304
342
|
end
|
|
305
343
|
|
|
306
|
-
class TemporalType <
|
|
344
|
+
class TemporalType < PrimitiveType
|
|
307
345
|
end
|
|
308
346
|
|
|
309
347
|
class DateType < TemporalType
|
|
348
|
+
attr_reader :unit
|
|
349
|
+
def initialize(unit)
|
|
350
|
+
super()
|
|
351
|
+
@unit = unit
|
|
352
|
+
end
|
|
353
|
+
|
|
354
|
+
def to_flatbuffers
|
|
355
|
+
fb_type = FB::Date::Data.new
|
|
356
|
+
fb_type.unit = FB::DateUnit.try_convert(@unit.to_s.upcase)
|
|
357
|
+
fb_type
|
|
358
|
+
end
|
|
310
359
|
end
|
|
311
360
|
|
|
312
361
|
class Date32Type < DateType
|
|
@@ -316,12 +365,20 @@ module ArrowFormat
|
|
|
316
365
|
end
|
|
317
366
|
end
|
|
318
367
|
|
|
368
|
+
def initialize
|
|
369
|
+
super(:day)
|
|
370
|
+
end
|
|
371
|
+
|
|
319
372
|
def name
|
|
320
373
|
"Date32"
|
|
321
374
|
end
|
|
322
375
|
|
|
376
|
+
def buffer_type
|
|
377
|
+
:s32
|
|
378
|
+
end
|
|
379
|
+
|
|
323
380
|
def build_array(size, validity_buffer, values_buffer)
|
|
324
|
-
Date32Array.new(
|
|
381
|
+
Date32Array.new(size, validity_buffer, values_buffer)
|
|
325
382
|
end
|
|
326
383
|
end
|
|
327
384
|
|
|
@@ -332,38 +389,75 @@ module ArrowFormat
|
|
|
332
389
|
end
|
|
333
390
|
end
|
|
334
391
|
|
|
392
|
+
def initialize
|
|
393
|
+
super(:millisecond)
|
|
394
|
+
end
|
|
395
|
+
|
|
335
396
|
def name
|
|
336
397
|
"Date64"
|
|
337
398
|
end
|
|
338
399
|
|
|
400
|
+
def buffer_type
|
|
401
|
+
:s64
|
|
402
|
+
end
|
|
403
|
+
|
|
339
404
|
def build_array(size, validity_buffer, values_buffer)
|
|
340
|
-
Date64Array.new(
|
|
405
|
+
Date64Array.new(size, validity_buffer, values_buffer)
|
|
341
406
|
end
|
|
342
407
|
end
|
|
343
408
|
|
|
344
409
|
class TimeType < TemporalType
|
|
410
|
+
attr_reader :bit_width
|
|
345
411
|
attr_reader :unit
|
|
346
|
-
def initialize(unit)
|
|
412
|
+
def initialize(bit_width, unit)
|
|
347
413
|
super()
|
|
414
|
+
@bit_width = bit_width
|
|
348
415
|
@unit = unit
|
|
349
416
|
end
|
|
417
|
+
|
|
418
|
+
def to_s
|
|
419
|
+
"#{super}(#{unit})"
|
|
420
|
+
end
|
|
421
|
+
|
|
422
|
+
def to_flatbuffers
|
|
423
|
+
fb_type = FB::Time::Data.new
|
|
424
|
+
fb_type.bit_width = @bit_width
|
|
425
|
+
fb_type.unit = FB::TimeUnit.try_convert(@unit.to_s.upcase)
|
|
426
|
+
fb_type
|
|
427
|
+
end
|
|
350
428
|
end
|
|
351
429
|
|
|
352
430
|
class Time32Type < TimeType
|
|
431
|
+
def initialize(unit)
|
|
432
|
+
super(32, unit)
|
|
433
|
+
end
|
|
434
|
+
|
|
353
435
|
def name
|
|
354
436
|
"Time32"
|
|
355
437
|
end
|
|
356
438
|
|
|
439
|
+
def buffer_type
|
|
440
|
+
:s32
|
|
441
|
+
end
|
|
442
|
+
|
|
357
443
|
def build_array(size, validity_buffer, values_buffer)
|
|
358
444
|
Time32Array.new(self, size, validity_buffer, values_buffer)
|
|
359
445
|
end
|
|
360
446
|
end
|
|
361
447
|
|
|
362
448
|
class Time64Type < TimeType
|
|
449
|
+
def initialize(unit)
|
|
450
|
+
super(64, unit)
|
|
451
|
+
end
|
|
452
|
+
|
|
363
453
|
def name
|
|
364
454
|
"Time64"
|
|
365
455
|
end
|
|
366
456
|
|
|
457
|
+
def buffer_type
|
|
458
|
+
:s64
|
|
459
|
+
end
|
|
460
|
+
|
|
367
461
|
def build_array(size, validity_buffer, values_buffer)
|
|
368
462
|
Time64Array.new(self, size, validity_buffer, values_buffer)
|
|
369
463
|
end
|
|
@@ -371,50 +465,108 @@ module ArrowFormat
|
|
|
371
465
|
|
|
372
466
|
class TimestampType < TemporalType
|
|
373
467
|
attr_reader :unit
|
|
374
|
-
attr_reader :
|
|
375
|
-
def initialize(unit,
|
|
468
|
+
attr_reader :time_zone
|
|
469
|
+
def initialize(unit, time_zone)
|
|
376
470
|
super()
|
|
377
471
|
@unit = unit
|
|
378
|
-
@
|
|
472
|
+
@time_zone = time_zone
|
|
379
473
|
end
|
|
380
474
|
|
|
381
475
|
def name
|
|
382
476
|
"Timestamp"
|
|
383
477
|
end
|
|
384
478
|
|
|
479
|
+
def buffer_type
|
|
480
|
+
:s64
|
|
481
|
+
end
|
|
482
|
+
|
|
385
483
|
def build_array(size, validity_buffer, values_buffer)
|
|
386
484
|
TimestampArray.new(self, size, validity_buffer, values_buffer)
|
|
387
485
|
end
|
|
486
|
+
|
|
487
|
+
def to_s
|
|
488
|
+
options = [@unit]
|
|
489
|
+
options << @time_zone if @time_zone
|
|
490
|
+
"#{super}(#{options.join(", ")})"
|
|
491
|
+
end
|
|
492
|
+
|
|
493
|
+
def to_flatbuffers
|
|
494
|
+
fb_type = FB::Timestamp::Data.new
|
|
495
|
+
fb_type.unit = FB::TimeUnit.try_convert(@unit.to_s.upcase)
|
|
496
|
+
fb_type.timezone = @time_zone
|
|
497
|
+
fb_type
|
|
498
|
+
end
|
|
388
499
|
end
|
|
389
500
|
|
|
390
501
|
class IntervalType < TemporalType
|
|
502
|
+
class << self
|
|
503
|
+
def singleton
|
|
504
|
+
@singleton ||= new
|
|
505
|
+
end
|
|
506
|
+
end
|
|
507
|
+
|
|
508
|
+
attr_reader :unit
|
|
509
|
+
def initialize(unit)
|
|
510
|
+
super()
|
|
511
|
+
@unit = unit
|
|
512
|
+
end
|
|
513
|
+
|
|
514
|
+
def to_flatbuffers
|
|
515
|
+
fb_type = FB::Interval::Data.new
|
|
516
|
+
fb_type.unit = FB::IntervalUnit.try_convert(@unit.to_s.upcase)
|
|
517
|
+
fb_type
|
|
518
|
+
end
|
|
391
519
|
end
|
|
392
520
|
|
|
393
521
|
class YearMonthIntervalType < IntervalType
|
|
522
|
+
def initialize
|
|
523
|
+
super(:year_month)
|
|
524
|
+
end
|
|
525
|
+
|
|
394
526
|
def name
|
|
395
527
|
"YearMonthInterval"
|
|
396
528
|
end
|
|
397
529
|
|
|
530
|
+
def buffer_type
|
|
531
|
+
:s32
|
|
532
|
+
end
|
|
533
|
+
|
|
398
534
|
def build_array(size, validity_buffer, values_buffer)
|
|
399
535
|
YearMonthIntervalArray.new(self, size, validity_buffer, values_buffer)
|
|
400
536
|
end
|
|
401
537
|
end
|
|
402
538
|
|
|
403
539
|
class DayTimeIntervalType < IntervalType
|
|
540
|
+
def initialize
|
|
541
|
+
super(:day_time)
|
|
542
|
+
end
|
|
543
|
+
|
|
404
544
|
def name
|
|
405
545
|
"DayTimeInterval"
|
|
406
546
|
end
|
|
407
547
|
|
|
548
|
+
def buffer_type
|
|
549
|
+
:s32
|
|
550
|
+
end
|
|
551
|
+
|
|
408
552
|
def build_array(size, validity_buffer, values_buffer)
|
|
409
553
|
DayTimeIntervalArray.new(self, size, validity_buffer, values_buffer)
|
|
410
554
|
end
|
|
411
555
|
end
|
|
412
556
|
|
|
413
557
|
class MonthDayNanoIntervalType < IntervalType
|
|
558
|
+
def initialize
|
|
559
|
+
super(:month_day_nano)
|
|
560
|
+
end
|
|
561
|
+
|
|
414
562
|
def name
|
|
415
563
|
"MonthDayNanoInterval"
|
|
416
564
|
end
|
|
417
565
|
|
|
566
|
+
def buffer_types
|
|
567
|
+
@buffer_types ||= [:s32, :s32, :s64]
|
|
568
|
+
end
|
|
569
|
+
|
|
418
570
|
def build_array(size, validity_buffer, values_buffer)
|
|
419
571
|
MonthDayNanoIntervalArray.new(self,
|
|
420
572
|
size,
|
|
@@ -434,9 +586,23 @@ module ArrowFormat
|
|
|
434
586
|
"Duration"
|
|
435
587
|
end
|
|
436
588
|
|
|
589
|
+
def buffer_type
|
|
590
|
+
:s64
|
|
591
|
+
end
|
|
592
|
+
|
|
437
593
|
def build_array(size, validity_buffer, values_buffer)
|
|
438
594
|
DurationArray.new(self, size, validity_buffer, values_buffer)
|
|
439
595
|
end
|
|
596
|
+
|
|
597
|
+
def to_s
|
|
598
|
+
"#{super}(#{@unit})"
|
|
599
|
+
end
|
|
600
|
+
|
|
601
|
+
def to_flatbuffers
|
|
602
|
+
fb_type = FB::Duration::Data.new
|
|
603
|
+
fb_type.unit = FB::TimeUnit.try_convert(@unit.to_s.upcase)
|
|
604
|
+
fb_type
|
|
605
|
+
end
|
|
440
606
|
end
|
|
441
607
|
|
|
442
608
|
class VariableSizeBinaryType < Type
|
|
@@ -453,8 +619,23 @@ module ArrowFormat
|
|
|
453
619
|
"Binary"
|
|
454
620
|
end
|
|
455
621
|
|
|
622
|
+
def offset_buffer_type
|
|
623
|
+
:s32 # TODO: big endian support
|
|
624
|
+
end
|
|
625
|
+
|
|
626
|
+
def encoding
|
|
627
|
+
Encoding::ASCII_8BIT
|
|
628
|
+
end
|
|
629
|
+
|
|
456
630
|
def build_array(size, validity_buffer, offsets_buffer, values_buffer)
|
|
457
|
-
BinaryArray.new(
|
|
631
|
+
BinaryArray.new(size,
|
|
632
|
+
validity_buffer,
|
|
633
|
+
offsets_buffer,
|
|
634
|
+
values_buffer)
|
|
635
|
+
end
|
|
636
|
+
|
|
637
|
+
def to_flatbuffers
|
|
638
|
+
FB::Binary::Data.new
|
|
458
639
|
end
|
|
459
640
|
end
|
|
460
641
|
|
|
@@ -469,13 +650,24 @@ module ArrowFormat
|
|
|
469
650
|
"LargeBinary"
|
|
470
651
|
end
|
|
471
652
|
|
|
653
|
+
def offset_buffer_type
|
|
654
|
+
:s64 # TODO: big endian support
|
|
655
|
+
end
|
|
656
|
+
|
|
657
|
+
def encoding
|
|
658
|
+
Encoding::ASCII_8BIT
|
|
659
|
+
end
|
|
660
|
+
|
|
472
661
|
def build_array(size, validity_buffer, offsets_buffer, values_buffer)
|
|
473
|
-
LargeBinaryArray.new(
|
|
474
|
-
size,
|
|
662
|
+
LargeBinaryArray.new(size,
|
|
475
663
|
validity_buffer,
|
|
476
664
|
offsets_buffer,
|
|
477
665
|
values_buffer)
|
|
478
666
|
end
|
|
667
|
+
|
|
668
|
+
def to_flatbuffers
|
|
669
|
+
FB::LargeBinary::Data.new
|
|
670
|
+
end
|
|
479
671
|
end
|
|
480
672
|
|
|
481
673
|
class UTF8Type < VariableSizeBinaryType
|
|
@@ -489,8 +681,20 @@ module ArrowFormat
|
|
|
489
681
|
"UTF8"
|
|
490
682
|
end
|
|
491
683
|
|
|
684
|
+
def offset_buffer_type
|
|
685
|
+
:s32 # TODO: big endian support
|
|
686
|
+
end
|
|
687
|
+
|
|
688
|
+
def encoding
|
|
689
|
+
Encoding::UTF_8
|
|
690
|
+
end
|
|
691
|
+
|
|
492
692
|
def build_array(size, validity_buffer, offsets_buffer, values_buffer)
|
|
493
|
-
UTF8Array.new(
|
|
693
|
+
UTF8Array.new(size, validity_buffer, offsets_buffer, values_buffer)
|
|
694
|
+
end
|
|
695
|
+
|
|
696
|
+
def to_flatbuffers
|
|
697
|
+
FB::Utf8::Data.new
|
|
494
698
|
end
|
|
495
699
|
end
|
|
496
700
|
|
|
@@ -505,13 +709,24 @@ module ArrowFormat
|
|
|
505
709
|
"LargeUTF8"
|
|
506
710
|
end
|
|
507
711
|
|
|
712
|
+
def offset_buffer_type
|
|
713
|
+
:s64 # TODO: big endian support
|
|
714
|
+
end
|
|
715
|
+
|
|
716
|
+
def encoding
|
|
717
|
+
Encoding::UTF_8
|
|
718
|
+
end
|
|
719
|
+
|
|
508
720
|
def build_array(size, validity_buffer, offsets_buffer, values_buffer)
|
|
509
|
-
LargeUTF8Array.new(
|
|
510
|
-
size,
|
|
721
|
+
LargeUTF8Array.new(size,
|
|
511
722
|
validity_buffer,
|
|
512
723
|
offsets_buffer,
|
|
513
724
|
values_buffer)
|
|
514
725
|
end
|
|
726
|
+
|
|
727
|
+
def to_flatbuffers
|
|
728
|
+
FB::LargeUtf8::Data.new
|
|
729
|
+
end
|
|
515
730
|
end
|
|
516
731
|
|
|
517
732
|
class FixedSizeBinaryType < Type
|
|
@@ -528,6 +743,16 @@ module ArrowFormat
|
|
|
528
743
|
def build_array(size, validity_buffer, values_buffer)
|
|
529
744
|
FixedSizeBinaryArray.new(self, size, validity_buffer, values_buffer)
|
|
530
745
|
end
|
|
746
|
+
|
|
747
|
+
def to_s
|
|
748
|
+
"#{super}(#{@byte_width})"
|
|
749
|
+
end
|
|
750
|
+
|
|
751
|
+
def to_flatbuffers
|
|
752
|
+
fb_type = FB::FixedSizeBinary::Data.new
|
|
753
|
+
fb_type.byte_width = @byte_width
|
|
754
|
+
fb_type
|
|
755
|
+
end
|
|
531
756
|
end
|
|
532
757
|
|
|
533
758
|
class DecimalType < FixedSizeBinaryType
|
|
@@ -538,6 +763,18 @@ module ArrowFormat
|
|
|
538
763
|
@precision = precision
|
|
539
764
|
@scale = scale
|
|
540
765
|
end
|
|
766
|
+
|
|
767
|
+
def to_s
|
|
768
|
+
"#{name}(#{@precision}, #{@scale})"
|
|
769
|
+
end
|
|
770
|
+
|
|
771
|
+
def to_flatbuffers
|
|
772
|
+
fb_type = FB::Decimal::Data.new
|
|
773
|
+
fb_type.bit_width = @byte_width * 8
|
|
774
|
+
fb_type.precision = @precision
|
|
775
|
+
fb_type.scale = @scale
|
|
776
|
+
fb_type
|
|
777
|
+
end
|
|
541
778
|
end
|
|
542
779
|
|
|
543
780
|
class Decimal128Type < DecimalType
|
|
@@ -575,6 +812,9 @@ module ArrowFormat
|
|
|
575
812
|
@child = child
|
|
576
813
|
end
|
|
577
814
|
|
|
815
|
+
def to_s
|
|
816
|
+
"#{super}<#{child.name}: #{child.type}>"
|
|
817
|
+
end
|
|
578
818
|
end
|
|
579
819
|
|
|
580
820
|
class ListType < VariableSizeListType
|
|
@@ -582,9 +822,17 @@ module ArrowFormat
|
|
|
582
822
|
"List"
|
|
583
823
|
end
|
|
584
824
|
|
|
825
|
+
def offset_buffer_type
|
|
826
|
+
:s32 # TODO: big endian support
|
|
827
|
+
end
|
|
828
|
+
|
|
585
829
|
def build_array(size, validity_buffer, offsets_buffer, child)
|
|
586
830
|
ListArray.new(self, size, validity_buffer, offsets_buffer, child)
|
|
587
831
|
end
|
|
832
|
+
|
|
833
|
+
def to_flatbuffers
|
|
834
|
+
FB::List::Data.new
|
|
835
|
+
end
|
|
588
836
|
end
|
|
589
837
|
|
|
590
838
|
class LargeListType < VariableSizeListType
|
|
@@ -592,9 +840,45 @@ module ArrowFormat
|
|
|
592
840
|
"LargeList"
|
|
593
841
|
end
|
|
594
842
|
|
|
843
|
+
def offset_buffer_type
|
|
844
|
+
:s64 # TODO: big endian support
|
|
845
|
+
end
|
|
846
|
+
|
|
595
847
|
def build_array(size, validity_buffer, offsets_buffer, child)
|
|
596
848
|
LargeListArray.new(self, size, validity_buffer, offsets_buffer, child)
|
|
597
849
|
end
|
|
850
|
+
|
|
851
|
+
def to_flatbuffers
|
|
852
|
+
FB::LargeList::Data.new
|
|
853
|
+
end
|
|
854
|
+
end
|
|
855
|
+
|
|
856
|
+
class FixedSizeListType < Type
|
|
857
|
+
attr_reader :child
|
|
858
|
+
attr_reader :size
|
|
859
|
+
def initialize(child, size)
|
|
860
|
+
super()
|
|
861
|
+
@child = child
|
|
862
|
+
@size = size
|
|
863
|
+
end
|
|
864
|
+
|
|
865
|
+
def name
|
|
866
|
+
"FixedSizeList"
|
|
867
|
+
end
|
|
868
|
+
|
|
869
|
+
def to_s
|
|
870
|
+
"#{super}<#{child.name}: #{child.type}>(#{@size})"
|
|
871
|
+
end
|
|
872
|
+
|
|
873
|
+
def build_array(size, validity_buffer, child)
|
|
874
|
+
FixedSizeListArray.new(self, size, validity_buffer, child)
|
|
875
|
+
end
|
|
876
|
+
|
|
877
|
+
def to_flatbuffers
|
|
878
|
+
fb_type = FB::FixedSizeList::Data.new
|
|
879
|
+
fb_type.list_size = @size
|
|
880
|
+
fb_type
|
|
881
|
+
end
|
|
598
882
|
end
|
|
599
883
|
|
|
600
884
|
class StructType < Type
|
|
@@ -611,10 +895,21 @@ module ArrowFormat
|
|
|
611
895
|
def build_array(size, validity_buffer, children)
|
|
612
896
|
StructArray.new(self, size, validity_buffer, children)
|
|
613
897
|
end
|
|
898
|
+
|
|
899
|
+
def to_s
|
|
900
|
+
fields = children.collect do |child|
|
|
901
|
+
"#{child.name}: #{child.type}"
|
|
902
|
+
end
|
|
903
|
+
"#{super}<#{fields.join(", ")}>"
|
|
904
|
+
end
|
|
905
|
+
|
|
906
|
+
def to_flatbuffers
|
|
907
|
+
FB::Struct::Data.new
|
|
908
|
+
end
|
|
614
909
|
end
|
|
615
910
|
|
|
616
911
|
class MapType < VariableSizeListType
|
|
617
|
-
def initialize(child)
|
|
912
|
+
def initialize(child, keys_sorted)
|
|
618
913
|
if child.nullable?
|
|
619
914
|
raise TypeError.new("Map entry field must not be nullable: " +
|
|
620
915
|
child.inspect)
|
|
@@ -632,22 +927,41 @@ module ArrowFormat
|
|
|
632
927
|
type.children[0].inspect)
|
|
633
928
|
end
|
|
634
929
|
super(child)
|
|
930
|
+
@keys_sorted = keys_sorted
|
|
635
931
|
end
|
|
636
932
|
|
|
637
933
|
def name
|
|
638
934
|
"Map"
|
|
639
935
|
end
|
|
640
936
|
|
|
937
|
+
def keys_sorted?
|
|
938
|
+
@keys_sorted
|
|
939
|
+
end
|
|
940
|
+
|
|
941
|
+
def offset_buffer_type
|
|
942
|
+
:s32 # TODO: big endian support
|
|
943
|
+
end
|
|
944
|
+
|
|
641
945
|
def build_array(size, validity_buffer, offsets_buffer, child)
|
|
642
946
|
MapArray.new(self, size, validity_buffer, offsets_buffer, child)
|
|
643
947
|
end
|
|
948
|
+
|
|
949
|
+
def to_s
|
|
950
|
+
key, value, = child.type.children
|
|
951
|
+
"#{name}<#{key.type}, #{value.type}>"
|
|
952
|
+
end
|
|
953
|
+
|
|
954
|
+
def to_flatbuffers
|
|
955
|
+
FB::Map::Data.new
|
|
956
|
+
end
|
|
644
957
|
end
|
|
645
958
|
|
|
646
959
|
class UnionType < Type
|
|
647
960
|
attr_reader :children
|
|
648
961
|
attr_reader :type_ids
|
|
649
|
-
def initialize(children, type_ids)
|
|
962
|
+
def initialize(mode, children, type_ids)
|
|
650
963
|
super()
|
|
964
|
+
@mode = mode
|
|
651
965
|
@children = children
|
|
652
966
|
@type_ids = type_ids
|
|
653
967
|
@type_indexes = {}
|
|
@@ -656,19 +970,45 @@ module ArrowFormat
|
|
|
656
970
|
def resolve_type_index(type)
|
|
657
971
|
@type_indexes[type] ||= @type_ids.index(type)
|
|
658
972
|
end
|
|
973
|
+
|
|
974
|
+
def to_s
|
|
975
|
+
children = @children.collect.with_index do |child, i|
|
|
976
|
+
"#{child.name}: #{child.type}=#{@type_ids[i]}"
|
|
977
|
+
end
|
|
978
|
+
"#{super}<#{children.join(", ")}>"
|
|
979
|
+
end
|
|
980
|
+
|
|
981
|
+
def to_flatbuffers
|
|
982
|
+
fb_type = FB::Union::Data.new
|
|
983
|
+
fb_type.mode = FB::UnionMode.try_convert(@mode.to_s.capitalize)
|
|
984
|
+
fb_type.type_ids = @type_ids
|
|
985
|
+
fb_type
|
|
986
|
+
end
|
|
659
987
|
end
|
|
660
988
|
|
|
661
989
|
class DenseUnionType < UnionType
|
|
990
|
+
def initialize(children, type_ids)
|
|
991
|
+
super(:dense, children, type_ids)
|
|
992
|
+
end
|
|
993
|
+
|
|
662
994
|
def name
|
|
663
995
|
"DenseUnion"
|
|
664
996
|
end
|
|
665
997
|
|
|
998
|
+
def offset_buffer_type
|
|
999
|
+
:s32
|
|
1000
|
+
end
|
|
1001
|
+
|
|
666
1002
|
def build_array(size, types_buffer, offsets_buffer, children)
|
|
667
1003
|
DenseUnionArray.new(self, size, types_buffer, offsets_buffer, children)
|
|
668
1004
|
end
|
|
669
1005
|
end
|
|
670
1006
|
|
|
671
1007
|
class SparseUnionType < UnionType
|
|
1008
|
+
def initialize(children, type_ids)
|
|
1009
|
+
super(:sparse, children, type_ids)
|
|
1010
|
+
end
|
|
1011
|
+
|
|
672
1012
|
def name
|
|
673
1013
|
"SparseUnion"
|
|
674
1014
|
end
|
|
@@ -679,26 +1019,49 @@ module ArrowFormat
|
|
|
679
1019
|
end
|
|
680
1020
|
|
|
681
1021
|
class DictionaryType < Type
|
|
1022
|
+
attr_reader :id
|
|
682
1023
|
attr_reader :index_type
|
|
683
1024
|
attr_reader :value_type
|
|
684
|
-
|
|
685
|
-
def initialize(index_type, value_type, ordered)
|
|
1025
|
+
def initialize(id, index_type, value_type, ordered)
|
|
686
1026
|
super()
|
|
1027
|
+
@id = id
|
|
687
1028
|
@index_type = index_type
|
|
688
1029
|
@value_type = value_type
|
|
689
1030
|
@ordered = ordered
|
|
690
1031
|
end
|
|
691
1032
|
|
|
1033
|
+
def ordered?
|
|
1034
|
+
@ordered
|
|
1035
|
+
end
|
|
1036
|
+
|
|
692
1037
|
def name
|
|
693
1038
|
"Dictionary"
|
|
694
1039
|
end
|
|
695
1040
|
|
|
696
|
-
def build_array(size, validity_buffer, indices_buffer,
|
|
1041
|
+
def build_array(size, validity_buffer, indices_buffer, dictionaries)
|
|
697
1042
|
DictionaryArray.new(self,
|
|
698
1043
|
size,
|
|
699
1044
|
validity_buffer,
|
|
700
1045
|
indices_buffer,
|
|
701
|
-
|
|
1046
|
+
dictionaries)
|
|
1047
|
+
end
|
|
1048
|
+
|
|
1049
|
+
def build_fb_field(fb_field)
|
|
1050
|
+
fb_dictionary_encoding = FB::DictionaryEncoding::Data.new
|
|
1051
|
+
fb_dictionary_encoding.id = @id
|
|
1052
|
+
fb_int = FB::Int::Data.new
|
|
1053
|
+
fb_int.bit_width = @index_type.bit_width
|
|
1054
|
+
fb_int.signed = @index_type.signed?
|
|
1055
|
+
fb_dictionary_encoding.index_type = fb_int
|
|
1056
|
+
fb_dictionary_encoding.ordered = @ordered
|
|
1057
|
+
fb_dictionary_encoding.dictionary_kind = FB::DictionaryKind::DENSE_ARRAY
|
|
1058
|
+
fb_field.type = @value_type.to_flatbuffers
|
|
1059
|
+
fb_field.dictionary = fb_dictionary_encoding
|
|
1060
|
+
end
|
|
1061
|
+
|
|
1062
|
+
def to_s
|
|
1063
|
+
"#{super}<id=#{@id}, index=#{@index_type}, value=#{@value_type}, " +
|
|
1064
|
+
"ordered=#{@ordered}>"
|
|
702
1065
|
end
|
|
703
1066
|
end
|
|
704
1067
|
end
|