red-arrow 3.0.0 → 4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a70c1505c294a8f74c992ec0f2ab5d651647e45dd178db8523f5b5c01e64a541
4
- data.tar.gz: dad979599033104a25d5be3d05c57e552c803f9c8002d66b757866c425937ce9
3
+ metadata.gz: f048aad4d5cc38373c1acc3976ba7012292c2b21315be7334704b6abbd4076fa
4
+ data.tar.gz: 426aac582a879286bd8f6ae632f4851bcc00025a08032142f07073fd4c665c62
5
5
  SHA512:
6
- metadata.gz: b2363ba6468985a3d237cbb9cec8b2ccb5031aae94153b8f263916e811524e8a5326f408867a843b7077f624050fabcde93520b26e6f8ceb1dd094aaa0068ed6
7
- data.tar.gz: 797b89062dfd212d92ca957b8e51c6dc8acf16ab51e5a60ecb0cbf31dd979c288f2afb71274b2235a24d31da344cfce93b40830d6dc6edd000ce0aa607ce8cde
6
+ metadata.gz: 5f7ab5ce2884d205b7d498db7f74d50c9c6228a4c27de8638fb921535c71fed28aa69ffdcb55bc27300e8b5995d5f31b0e78a29b2bd0513fcbf60d1514a58f79
7
+ data.tar.gz: b6d28706fb0b4845c2b134e22f4988199e8714bf41e24a73d02b38a6161142ad04c7ebf30185791afb3c3a0b7a02701e92193b6ae55ff1e78089d60f3ca91c9a
data/lib/arrow/array.rb CHANGED
@@ -100,5 +100,123 @@ module Arrow
100
100
  is_in_raw(values)
101
101
  end
102
102
  end
103
+
104
+ # @api private
105
+ alias_method :concatenate_raw, :concatenate
106
+ # Concatenates the given other arrays to the array.
107
+ #
108
+ # @param other_arrays [::Array, Arrow::Array] The arrays to be
109
+ # concatenated.
110
+ #
111
+ # Each other array is processed by {#resolve} before they're
112
+ # concatenated.
113
+ #
114
+ # @example Raw Ruby Array
115
+ # array = Arrow::Int32Array.new([1])
116
+ # array.concatenate([2, 3], [4]) # => Arrow::Int32Array.new([1, 2, 3, 4])
117
+ #
118
+ # @example Arrow::Array
119
+ # array = Arrow::Int32Array.new([1])
120
+ # array.concatenate(Arrow::Int32Array.new([2, 3]),
121
+ # Arrow::Int8Array.new([4])) # => Arrow::Int32Array.new([1, 2, 3, 4])
122
+ #
123
+ # @since 4.0.0
124
+ def concatenate(*other_arrays)
125
+ other_arrays = other_arrays.collect do |other_array|
126
+ resolve(other_array)
127
+ end
128
+ concatenate_raw(other_arrays)
129
+ end
130
+
131
+ # Concatenates the given other array to the array.
132
+ #
133
+ # If you have multiple arrays to be concatenated, you should use
134
+ # {#concatenate} to concatenate multiple arrays at once.
135
+ #
136
+ # @param other_array [::Array, Arrow::Array] The array to be concatenated.
137
+ #
138
+ # `@other_array` is processed by {#resolve} before it's
139
+ # concatenated.
140
+ #
141
+ # @example Raw Ruby Array
142
+ # Arrow::Int32Array.new([1]) + [2, 3] # => Arrow::Int32Array.new([1, 2, 3])
143
+ #
144
+ # @example Arrow::Array
145
+ # Arrow::Int32Array.new([1]) +
146
+ # Arrow::Int32Array.new([2, 3]) # => Arrow::Int32Array.new([1, 2, 3])
147
+ #
148
+ # @since 4.0.0
149
+ def +(other_array)
150
+ concatenate(other_array)
151
+ end
152
+
153
+ # Ensures returning the same data type array from the given array.
154
+ #
155
+ # @return [Arrow::Array]
156
+ #
157
+ # @overload resolve(other_raw_array)
158
+ #
159
+ # @param other_raw_array [::Array] A raw Ruby Array. A new Arrow::Array
160
+ # is built by `self.class.new`.
161
+ #
162
+ # @example Raw Ruby Array
163
+ # int32_array = Arrow::Int32Array.new([1])
164
+ # other_array = int32_array.resolve([2, 3, 4])
165
+ # other_array # => Arrow::Int32Array.new([2, 3, 4])
166
+ #
167
+ # @overload resolve(other_array)
168
+ #
169
+ # @param other_array [Arrow::Array] Another Arrow::Array.
170
+ #
171
+ # If the given other array is an same data type array of
172
+ # `self`, the given other array is returned as-is.
173
+ #
174
+ # If the given other array isn't an same data type array of
175
+ # `self`, the given other array is casted.
176
+ #
177
+ # @example Same data type
178
+ # int32_array = Arrow::Int32Array.new([1])
179
+ # other_int32_array = Arrow::Int32Array.new([2, 3, 4])
180
+ # other_array = int32_array.resolve(other_int32_array)
181
+ # other_array.object_id == other_int32_array.object_id
182
+ #
183
+ # @example Other data type
184
+ # int32_array = Arrow::Int32Array.new([1])
185
+ # other_int8_array = Arrow::Int8Array.new([2, 3, 4])
186
+ # other_array = int32_array.resolve(other_int32_array)
187
+ # other_array #=> Arrow::Int32Array.new([2, 3, 4])
188
+ #
189
+ # @since 4.0.0
190
+ def resolve(other_array)
191
+ if other_array.is_a?(::Array)
192
+ builder_class = self.class.builder_class
193
+ if builder_class.nil?
194
+ message =
195
+ "[array][resolve] can't build #{value_data_type} array " +
196
+ "from raw Ruby Array"
197
+ raise ArgumentError, message
198
+ end
199
+ if builder_class.buildable?([other_array])
200
+ other_array = builder_class.build(other_array)
201
+ elsif builder_class.buildable?([value_data_type, other_array])
202
+ other_array = builder_class.build(value_data_type, other_array)
203
+ else
204
+ message =
205
+ "[array][resolve] need to implement " +
206
+ "a feature that building #{value_data_type} array " +
207
+ "from raw Ruby Array"
208
+ raise NotImpelemented, message
209
+ end
210
+ other_array
211
+ elsif other_array.respond_to?(:value_data_type)
212
+ return other_array if value_data_type == other_array.value_data_type
213
+ other_array.cast(value_data_type)
214
+ else
215
+ message =
216
+ "[array][resolve] can't build #{value_data_type} array: " +
217
+ "#{other_array.inspect}"
218
+ raise ArgumentError, message
219
+ end
220
+ end
103
221
  end
104
222
  end
@@ -18,7 +18,7 @@
18
18
  module Arrow
19
19
  class DataType
20
20
  class << self
21
- # Creates a new suitable {Arrow::DataType}.
21
+ # Ensure returning suitable {Arrow::DataType}.
22
22
  #
23
23
  # @overload resolve(data_type)
24
24
  #
@@ -31,17 +31,21 @@ module Arrow
31
31
  #
32
32
  # @overload resolve(name)
33
33
  #
34
- # Creates a suitable data type from type name. For example,
35
- # you can create {Arrow::BooleanDataType} from `:boolean`.
34
+ # Creates a suitable data type from the given type name. For
35
+ # example, you can create {Arrow::BooleanDataType} from
36
+ # `:boolean`.
36
37
  #
37
38
  # @param name [String, Symbol] The type name of the data type.
38
39
  #
40
+ # @return [Arrow::DataType] A new suitable data type.
41
+ #
39
42
  # @example Create a boolean data type
40
43
  # Arrow::DataType.resolve(:boolean)
41
44
  #
42
45
  # @overload resolve(name_with_arguments)
43
46
  #
44
- # Creates a suitable data type from type name with arguments.
47
+ # Creates a new suitable data type from the given type name
48
+ # with arguments.
45
49
  #
46
50
  # @param name_with_arguments [::Array<String, ...>]
47
51
  # The type name of the data type as the first element.
@@ -51,6 +55,8 @@ module Arrow
51
55
  # For example, {Arrow::TimestampDataType} needs unit as
52
56
  # additional information.
53
57
  #
58
+ # @return [Arrow::DataType] A new suitable data type.
59
+ #
54
60
  # @example Create a boolean data type
55
61
  # Arrow::DataType.resolve([:boolean])
56
62
  #
@@ -59,7 +65,8 @@ module Arrow
59
65
  #
60
66
  # @overload resolve(description)
61
67
  #
62
- # Creates a suitable data type from data type description.
68
+ # Creates a new suitable data type from the given data type
69
+ # description.
63
70
  #
64
71
  # Data type description is a raw `Hash`. Data type description
65
72
  # must have `:type` value. `:type` is the type of the data type.
@@ -74,6 +81,8 @@ module Arrow
74
81
  # @option description [String, Symbol] :type The type name of
75
82
  # the data type.
76
83
  #
84
+ # @return [Arrow::DataType] A new suitable data type.
85
+ #
77
86
  # @example Create a boolean data type
78
87
  # Arrow::DataType.resolve(type: :boolean)
79
88
  #
@@ -33,7 +33,7 @@ module Arrow
33
33
  # @param type_codes [::Array<Integer>] The IDs that indicates
34
34
  # corresponding fields.
35
35
  #
36
- # @example Create a dense union data type for {2: visible, 9: count}
36
+ # @example Create a dense union data type for `{2: visible, 9: count}`
37
37
  # fields = [
38
38
  # Arrow::Field.new("visible", :boolean),
39
39
  # {
@@ -57,7 +57,7 @@ module Arrow
57
57
  # @option description [::Array<Integer>] :type_codes The IDs
58
58
  # that indicates corresponding fields.
59
59
  #
60
- # @example Create a dense union data type for {2: visible, 9: count}
60
+ # @example Create a dense union data type for `{2: visible, 9: count}`
61
61
  # fields = [
62
62
  # Arrow::Field.new("visible", :boolean),
63
63
  # {
@@ -50,7 +50,7 @@ module Arrow
50
50
  # @param ordered [Boolean] Whether dictionary contents are
51
51
  # ordered or not.
52
52
  #
53
- # @example Create a dictionary data type for {0: "Hello", 1: "World"}
53
+ # @example Create a dictionary data type for `{0: "Hello", 1: "World"}`
54
54
  # index_data_type = :int8
55
55
  # value_data_type = :string
56
56
  # ordered = true
@@ -91,7 +91,7 @@ module Arrow
91
91
  # @option description [Boolean] :ordered Whether dictionary
92
92
  # contents are ordered or not.
93
93
  #
94
- # @example Create a dictionary data type for {0: "Hello", 1: "World"}
94
+ # @example Create a dictionary data type for `{0: "Hello", 1: "World"}`
95
95
  # Arrow::DictionaryDataType.new(index_data_type: :int8,
96
96
  # value_data_type: :string,
97
97
  # ordered: true)
data/lib/arrow/loader.rb CHANGED
@@ -82,6 +82,8 @@ module Arrow
82
82
  require "arrow/rolling-window"
83
83
  require "arrow/schema"
84
84
  require "arrow/slicer"
85
+ require "arrow/sort-key"
86
+ require "arrow/sort-options"
85
87
  require "arrow/sparse-union-data-type"
86
88
  require "arrow/struct-array"
87
89
  require "arrow/struct-array-builder"
@@ -0,0 +1,193 @@
1
+ # Licensed to the Apache Software Foundation (ASF) under one
2
+ # or more contributor license agreements. See the NOTICE file
3
+ # distributed with this work for additional information
4
+ # regarding copyright ownership. The ASF licenses this file
5
+ # to you under the Apache License, Version 2.0 (the
6
+ # "License"); you may not use this file except in compliance
7
+ # with the License. You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing,
12
+ # software distributed under the License is distributed on an
13
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
+ # KIND, either express or implied. See the License for the
15
+ # specific language governing permissions and limitations
16
+ # under the License.
17
+
18
+ module Arrow
19
+ class SortKey
20
+ class << self
21
+ # Ensure returning suitable {Arrow::SortKey}.
22
+ #
23
+ # @overload resolve(sort_key)
24
+ #
25
+ # Returns the given sort key itself. This is convenient to use
26
+ # this method as {Arrow::SortKey} converter.
27
+ #
28
+ # @param sort_key [Arrow::SortKey] The sort key.
29
+ #
30
+ # @return [Arrow::SortKey] The given sort key itself.
31
+ #
32
+ # @overload resolve(name)
33
+ #
34
+ # Creates a new suitable sort key from column name with
35
+ # leading order mark. See {#initialize} for details about
36
+ # order mark.
37
+ #
38
+ # @return [Arrow::SortKey] A new suitable sort key.
39
+ #
40
+ # @overload resolve(name, order)
41
+ #
42
+ # Creates a new suitable sort key from column name without
43
+ # leading order mark and order. See {#initialize} for details.
44
+ #
45
+ # @return [Arrow::SortKey] A new suitable sort key.
46
+ #
47
+ # @since 4.0.0
48
+ def resolve(name, order=nil)
49
+ return name if name.is_a?(self)
50
+ new(name, order)
51
+ end
52
+
53
+ # @api private
54
+ def try_convert(value)
55
+ case value
56
+ when Symbol, String
57
+ new(value.to_s, :ascending)
58
+ else
59
+ nil
60
+ end
61
+ end
62
+ end
63
+
64
+ alias_method :initialize_raw, :initialize
65
+ private :initialize_raw
66
+ # Creates a new {Arrow::SortKey}.
67
+ #
68
+ # @overload initialize(name)
69
+ #
70
+ # @param name [Symbol, String] The name of the sort column.
71
+ #
72
+ # If `name` is a String, the first character may be processed
73
+ # as the "leading order mark". If the first character is `"+"`
74
+ # or `"-"`, they are processed as a leading order mark. If the
75
+ # first character is processed as a leading order mark, the
76
+ # first character is removed from sort column name and
77
+ # corresponding order is used. `"+"` uses ascending order and
78
+ # `"-"` uses ascending order.
79
+ #
80
+ # If `name` is not a String nor `name` doesn't start with the
81
+ # leading order mark, sort column name is `name` as-is and
82
+ # ascending order is used.
83
+ #
84
+ # @example String without the leading order mark
85
+ # key = Arrow::SortKey.new("count")
86
+ # key.name # => "count"
87
+ # key.order # => Arrow::SortOrder::ASCENDING
88
+ #
89
+ # @example String with the "+" leading order mark
90
+ # key = Arrow::SortKey.new("+count")
91
+ # key.name # => "count"
92
+ # key.order # => Arrow::SortOrder::ASCENDING
93
+ #
94
+ # @example String with the "-" leading order mark
95
+ # key = Arrow::SortKey.new("-count")
96
+ # key.name # => "count"
97
+ # key.order # => Arrow::SortOrder::DESCENDING
98
+ #
99
+ # @example Symbol that starts with "-"
100
+ # key = Arrow::SortKey.new(:"-count")
101
+ # key.name # => "-count"
102
+ # key.order # => Arrow::SortOrder::ASCENDING
103
+ #
104
+ # @overload initialize(name, order)
105
+ #
106
+ # @param name [Symbol, String] The name of the sort column.
107
+ #
108
+ # No leading order mark processing. The given `name` is used
109
+ # as-is.
110
+ #
111
+ # @param order [Symbol, String, Arrow::SortOrder] How to order
112
+ # by this sort key.
113
+ #
114
+ # If this is a Symbol or String, this must be `:ascending`,
115
+ # `"ascending"`, `:asc`, `"asc"`, `:descending`,
116
+ # `"descending"`, `:desc` or `"desc"`.
117
+ #
118
+ # @example No leading order mark processing
119
+ # key = Arrow::SortKey.new("-count", :ascending)
120
+ # key.name # => "-count"
121
+ # key.order # => Arrow::SortOrder::ASCENDING
122
+ #
123
+ # @example Order by abbreviated name with Symbol
124
+ # key = Arrow::SortKey.new("count", :desc)
125
+ # key.name # => "count"
126
+ # key.order # => Arrow::SortOrder::DESCENDING
127
+ #
128
+ # @example Order by String
129
+ # key = Arrow::SortKey.new("count", "descending")
130
+ # key.name # => "count"
131
+ # key.order # => Arrow::SortOrder::DESCENDING
132
+ #
133
+ # @example Order by Arrow::SortOrder
134
+ # key = Arrow::SortKey.new("count", Arrow::SortOrder::DESCENDING)
135
+ # key.name # => "count"
136
+ # key.order # => Arrow::SortOrder::DESCENDING
137
+ #
138
+ # @since 4.0.0
139
+ def initialize(name, order=nil)
140
+ name, order = normalize_name(name, order)
141
+ order = normalize_order(order) || :ascending
142
+ initialize_raw(name, order)
143
+ end
144
+
145
+ # @return [String] The string representation of this sort key. You
146
+ # can use recreate {Arrow::SortKey} by
147
+ # `Arrow::SortKey.new(key.to_s)`.
148
+ #
149
+ # @example Recreate Arrow::SortKey
150
+ # key = Arrow::SortKey.new("-count")
151
+ # key.to_s # => "-count"
152
+ # key == Arrow::SortKey.new(key.to_s) # => true
153
+ #
154
+ # @since 4.0.0
155
+ def to_s
156
+ if order == SortOrder::ASCENDING
157
+ "+#{name}"
158
+ else
159
+ "-#{name}"
160
+ end
161
+ end
162
+
163
+ private
164
+ def normalize_name(name, order)
165
+ case name
166
+ when Symbol
167
+ return name.to_s, order
168
+ when String
169
+ return name, order if order
170
+ if name.start_with?("-")
171
+ return name[1..-1], order || :descending
172
+ elsif name.start_with?("+")
173
+ return name[1..-1], order || :ascending
174
+ else
175
+ return name, order
176
+ end
177
+ else
178
+ return name, order
179
+ end
180
+ end
181
+
182
+ def normalize_order(order)
183
+ case order
184
+ when :asc, "asc"
185
+ :ascending
186
+ when :desc, "desc"
187
+ :descending
188
+ else
189
+ order
190
+ end
191
+ end
192
+ end
193
+ end
@@ -0,0 +1,109 @@
1
+ # Licensed to the Apache Software Foundation (ASF) under one
2
+ # or more contributor license agreements. See the NOTICE file
3
+ # distributed with this work for additional information
4
+ # regarding copyright ownership. The ASF licenses this file
5
+ # to you under the Apache License, Version 2.0 (the
6
+ # "License"); you may not use this file except in compliance
7
+ # with the License. You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing,
12
+ # software distributed under the License is distributed on an
13
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
+ # KIND, either express or implied. See the License for the
15
+ # specific language governing permissions and limitations
16
+ # under the License.
17
+
18
+ module Arrow
19
+ class SortOptions
20
+ class << self
21
+ # @api private
22
+ def try_convert(value)
23
+ case value
24
+ when Symbol, String
25
+ new(value)
26
+ when ::Array
27
+ new(*value)
28
+ else
29
+ nil
30
+ end
31
+ end
32
+ end
33
+
34
+ alias_method :initialize_raw, :initialize
35
+ private :initialize_raw
36
+ # @param sort_keys [::Array<String, Symbol, Arrow::SortKey>] The
37
+ # sort keys to be used. See {Arrow::SortKey.resolve} how to
38
+ # resolve each sort key in `sort_keys`.
39
+ #
40
+ # You can add more sort keys by {#add_sort_key} later.
41
+ #
42
+ # @example No initial sort keys
43
+ # options = Arrow::SortOptions.new
44
+ # options.sort_keys # => []
45
+ #
46
+ # @example String sort keys
47
+ # options = Arrow::SortOptions.new("count", "-age")
48
+ # options.sort_keys.collect(&:to_s) # => ["+count", "-age"]
49
+ #
50
+ # @example Symbol sort keys
51
+ # options = Arrow::SortOptions.new(:count, :age)
52
+ # options.sort_keys.collect(&:to_s) # => ["+count", "+age"]
53
+ #
54
+ # @example Mixed sort keys
55
+ # options = Arrow::SortOptions.new(:count, "-age")
56
+ # options.sort_keys.collect(&:to_s) # => ["+count", "-age"]
57
+ #
58
+ # @since 4.0.0
59
+ def initialize(*sort_keys)
60
+ initialize_raw
61
+ sort_keys.each do |sort_key|
62
+ add_sort_key(sort_key)
63
+ end
64
+ end
65
+
66
+ # @api private
67
+ alias_method :add_sort_key_raw, :add_sort_key
68
+ # Add a sort key.
69
+ #
70
+ # @return [void]
71
+ #
72
+ # @overload add_sort_key(key)
73
+ #
74
+ # @param key [Arrow::SortKey] The sort key to be added.
75
+ #
76
+ # @example Add a key to sort by "price" column in descending order
77
+ # options = Arrow::SortOptions.new
78
+ # options.add_sort_key(Arrow::SortKey.new(:price, :descending))
79
+ # options.sort_keys.collect(&:to_s) # => ["-price"]
80
+ #
81
+ # @overload add_sort_key(name)
82
+ #
83
+ # @param name [Symbol, String] The sort key name to be
84
+ # added. See also {Arrow::SortKey#initialize} for the leading
85
+ # order mark for String name.
86
+ #
87
+ # @example Add a key to sort by "price" column in descending order
88
+ # options = Arrow::SortOptions.new
89
+ # options.add_sort_key("-price")
90
+ # options.sort_keys.collect(&:to_s) # => ["-price"]
91
+ #
92
+ # @overload add_sort_key(name, order)
93
+ #
94
+ # @param name [Symbol, String] The sort key name.
95
+ #
96
+ # @param order [Symbol, String, Arrow::SortOrder] The sort
97
+ # order. See {Arrow::SortKey#initialize} for details.
98
+ #
99
+ # @example Add a key to sort by "price" column in descending order
100
+ # options = Arrow::SortOptions.new
101
+ # options.add_sort_key("price", :desc)
102
+ # options.sort_keys.collect(&:to_s) # => ["-price"]
103
+ #
104
+ # @since 4.0.0
105
+ def add_sort_key(name, order=nil)
106
+ add_sort_key_raw(SortKey.resolve(name, order))
107
+ end
108
+ end
109
+ end
@@ -33,7 +33,7 @@ module Arrow
33
33
  # @param type_codes [::Array<Integer>] The IDs that indicates
34
34
  # corresponding fields.
35
35
  #
36
- # @example Create a sparse union data type for {2: visible, 9: count}
36
+ # @example Create a sparse union data type for `{2: visible, 9: count}`
37
37
  # fields = [
38
38
  # Arrow::Field.new("visible", :boolean),
39
39
  # {
@@ -57,7 +57,7 @@ module Arrow
57
57
  # @option description [::Array<Integer>] :type_codes The IDs
58
58
  # that indicates corresponding fields.
59
59
  #
60
- # @example Create a sparse union data type for {2: visible, 9: count}
60
+ # @example Create a sparse union data type for `{2: visible, 9: count}`
61
61
  # fields = [
62
62
  # Arrow::Field.new("visible", :boolean),
63
63
  # {
@@ -29,7 +29,7 @@ module Arrow
29
29
  #
30
30
  # The unit must be second or millisecond.
31
31
  #
32
- # @example Create a time32 data type with {Arrow::TimeUnit}
32
+ # @example Create a time32 data type with Arrow::TimeUnit
33
33
  # Arrow::Time32DataType.new(Arrow::TimeUnit::MILLI)
34
34
  #
35
35
  # @example Create a time32 data type with Symbol
@@ -45,7 +45,7 @@ module Arrow
45
45
  #
46
46
  # The unit must be second or millisecond.
47
47
  #
48
- # @example Create a time32 data type with {Arrow::TimeUnit}
48
+ # @example Create a time32 data type with Arrow::TimeUnit
49
49
  # Arrow::Time32DataType.new(unit: Arrow::TimeUnit::MILLI)
50
50
  #
51
51
  # @example Create a time32 data type with Symbol
@@ -29,7 +29,7 @@ module Arrow
29
29
  #
30
30
  # The unit must be microsecond or nanosecond.
31
31
  #
32
- # @example Create a time64 data type with {Arrow::TimeUnit}
32
+ # @example Create a time64 data type with Arrow::TimeUnit
33
33
  # Arrow::Time64DataType.new(Arrow::TimeUnit::NANO)
34
34
  #
35
35
  # @example Create a time64 data type with Symbol
@@ -45,7 +45,7 @@ module Arrow
45
45
  #
46
46
  # The unit must be microsecond or nanosecond.
47
47
  #
48
- # @example Create a time64 data type with {Arrow::TimeUnit}
48
+ # @example Create a time64 data type with Arrow::TimeUnit
49
49
  # Arrow::Time64DataType.new(unit: Arrow::TimeUnit::NANO)
50
50
  #
51
51
  # @example Create a time64 data type with Symbol
@@ -27,7 +27,7 @@ module Arrow
27
27
  # @param unit [Arrow::TimeUnit, Symbol] The unit of the
28
28
  # timestamp data type.
29
29
  #
30
- # @example Create a timestamp data type with {Arrow::TimeUnit}
30
+ # @example Create a timestamp data type with Arrow::TimeUnit
31
31
  # Arrow::TimestampDataType.new(Arrow::TimeUnit::MILLI)
32
32
  #
33
33
  # @example Create a timestamp data type with Symbol
@@ -41,7 +41,7 @@ module Arrow
41
41
  # @option description [Arrow::TimeUnit, Symbol] :unit The unit of
42
42
  # the timestamp data type.
43
43
  #
44
- # @example Create a timestamp data type with {Arrow::TimeUnit}
44
+ # @example Create a timestamp data type with Arrow::TimeUnit
45
45
  # Arrow::TimestampDataType.new(unit: Arrow::TimeUnit::MILLI)
46
46
  #
47
47
  # @example Create a timestamp data type with Symbol
data/lib/arrow/version.rb CHANGED
@@ -16,7 +16,7 @@
16
16
  # under the License.
17
17
 
18
18
  module Arrow
19
- VERSION = "3.0.0"
19
+ VERSION = "4.0.0"
20
20
 
21
21
  module Version
22
22
  numbers, TAG = VERSION.split("-")
data/test/test-array.rb CHANGED
@@ -168,4 +168,124 @@ class ArrayTest < Test::Unit::TestCase
168
168
  @array.is_in(right))
169
169
  end
170
170
  end
171
+
172
+ sub_test_case("#concatenate") do
173
+ test("Arrow::Array: same") do
174
+ assert_equal(Arrow::Int32Array.new([1, 2, nil, 4 ,5, 6]),
175
+ Arrow::Int32Array.new([1, 2, nil]).
176
+ concatenate(Arrow::Int32Array.new([4, 5]),
177
+ Arrow::Int32Array.new([6])))
178
+ end
179
+
180
+ test("Arrow::Array: castable") do
181
+ assert_equal(Arrow::Int32Array.new([1, 2, nil, 4 ,5, 6]),
182
+ Arrow::Int32Array.new([1, 2, nil]).
183
+ concatenate(Arrow::Int8Array.new([4, 5]),
184
+ Arrow::UInt32Array.new([6])))
185
+ end
186
+
187
+ test("Arrow::Array: non-castable") do
188
+ assert_raise(Arrow::Error::Invalid) do
189
+ Arrow::Int32Array.new([1, 2, nil]).
190
+ concatenate(Arrow::StringArray.new(["X"]))
191
+ end
192
+ end
193
+
194
+ test("Array") do
195
+ assert_equal(Arrow::Int32Array.new([1, 2, nil, 4 ,nil, 6]),
196
+ Arrow::Int32Array.new([1, 2, nil]).
197
+ concatenate([4, nil],
198
+ [6]))
199
+ end
200
+
201
+ test("invalid") do
202
+ message = "[array][resolve] can't build int32 array: 4"
203
+ assert_raise(ArgumentError.new(message)) do
204
+ Arrow::Int32Array.new([1, 2, nil]).
205
+ concatenate(4)
206
+ end
207
+ end
208
+ end
209
+
210
+ sub_test_case("#+") do
211
+ test("Arrow::Array: same") do
212
+ assert_equal(Arrow::Int32Array.new([1, 2, nil, 4 ,5, 6]),
213
+ Arrow::Int32Array.new([1, 2, nil]) +
214
+ Arrow::Int32Array.new([4, 5, 6]))
215
+ end
216
+
217
+ test("Arrow::Array: castable") do
218
+ assert_equal(Arrow::Int32Array.new([1, 2, nil, 4 ,5, 6]),
219
+ Arrow::Int32Array.new([1, 2, nil]) +
220
+ Arrow::Int8Array.new([4, 5, 6]))
221
+ end
222
+
223
+ test("Arrow::Array: non-castable") do
224
+ assert_raise(Arrow::Error::Invalid) do
225
+ Arrow::Int32Array.new([1, 2, nil]) +
226
+ Arrow::StringArray.new(["X"])
227
+ end
228
+ end
229
+
230
+ test("Array") do
231
+ assert_equal(Arrow::Int32Array.new([1, 2, nil, 4 ,nil, 6]),
232
+ Arrow::Int32Array.new([1, 2, nil]) +
233
+ [4, nil, 6])
234
+ end
235
+
236
+ test("invalid") do
237
+ message = "[array][resolve] can't build int32 array: 4"
238
+ assert_raise(ArgumentError.new(message)) do
239
+ Arrow::Int32Array.new([1, 2, nil]) + 4
240
+ end
241
+ end
242
+ end
243
+
244
+ sub_test_case("#resolve") do
245
+ test("Arrow::Array: same") do
246
+ assert_equal(Arrow::Int32Array.new([1, 2, nil]),
247
+ Arrow::Int32Array.new([]).
248
+ resolve(Arrow::Int32Array.new([1, 2, nil])))
249
+ end
250
+
251
+ test("Arrow::Array: castable") do
252
+ assert_equal(Arrow::Int32Array.new([1, 2, nil]),
253
+ Arrow::Int32Array.new([]).
254
+ resolve(Arrow::Int8Array.new([1, 2, nil])))
255
+ end
256
+
257
+ test("Arrow::Array: non-castable") do
258
+ assert_raise(Arrow::Error::Invalid) do
259
+ Arrow::Int32Array.new([]) +
260
+ Arrow::StringArray.new(["X"])
261
+ end
262
+ end
263
+
264
+ test("Array: non-parametric") do
265
+ assert_equal(Arrow::Int32Array.new([1, 2, nil]),
266
+ Arrow::Int32Array.new([]).
267
+ resolve([1, 2, nil]))
268
+ end
269
+
270
+ test("Array: parametric") do
271
+ list_data_type = Arrow::ListDataType.new(name: "visible", type: :boolean)
272
+ list_array = Arrow::ListArray.new(list_data_type, [])
273
+ assert_equal(Arrow::ListArray.new(list_data_type,
274
+ [
275
+ [true, false],
276
+ nil,
277
+ ]),
278
+ list_array.resolve([
279
+ [true, false],
280
+ nil,
281
+ ]))
282
+ end
283
+
284
+ test("invalid") do
285
+ message = "[array][resolve] can't build int32 array: 4"
286
+ assert_raise(ArgumentError.new(message)) do
287
+ Arrow::Int32Array.new([]).resolve(4)
288
+ end
289
+ end
290
+ end
171
291
  end
@@ -18,12 +18,12 @@
18
18
  class Decimal128DataTypeTest < Test::Unit::TestCase
19
19
  sub_test_case(".new") do
20
20
  test("ordered arguments") do
21
- assert_equal("decimal(8, 2)",
21
+ assert_equal("decimal128(8, 2)",
22
22
  Arrow::Decimal128DataType.new(8, 2).to_s)
23
23
  end
24
24
 
25
25
  test("description") do
26
- assert_equal("decimal(8, 2)",
26
+ assert_equal("decimal128(8, 2)",
27
27
  Arrow::Decimal128DataType.new(precision: 8,
28
28
  scale: 2).to_s)
29
29
  end
data/test/test-orc.rb CHANGED
@@ -118,39 +118,35 @@ class ORCTest < Test::Unit::TestCase
118
118
  ]
119
119
  ],
120
120
  [
121
- "map: list<item: " +
122
- "struct<key: string, value: " +
123
- "struct<int1: int32, string1: string>>>",
121
+ "map: map<string, struct<int1: int32, string1: string>>",
124
122
  [
125
123
  <<-MAP.chomp
126
124
  [
125
+ keys:
126
+ []
127
+ values:
127
128
  -- is_valid: all not null
128
- -- child 0 type: string
129
+ -- child 0 type: int32
129
130
  []
130
- -- child 1 type: struct<int1: int32, string1: string>
131
- -- is_valid: all not null
132
- -- child 0 type: int32
133
- []
134
- -- child 1 type: string
135
- [],
131
+ -- child 1 type: string
132
+ [],
133
+ keys:
134
+ [
135
+ "chani",
136
+ "mauddib"
137
+ ]
138
+ values:
136
139
  -- is_valid: all not null
137
- -- child 0 type: string
140
+ -- child 0 type: int32
141
+ [
142
+ 5,
143
+ 1
144
+ ]
145
+ -- child 1 type: string
138
146
  [
139
147
  "chani",
140
148
  "mauddib"
141
149
  ]
142
- -- child 1 type: struct<int1: int32, string1: string>
143
- -- is_valid: all not null
144
- -- child 0 type: int32
145
- [
146
- 5,
147
- 1
148
- ]
149
- -- child 1 type: string
150
- [
151
- "chani",
152
- "mauddib"
153
- ]
154
150
  ]
155
151
  MAP
156
152
  ],
@@ -0,0 +1,40 @@
1
+ # Licensed to the Apache Software Foundation (ASF) under one
2
+ # or more contributor license agreements. See the NOTICE file
3
+ # distributed with this work for additional information
4
+ # regarding copyright ownership. The ASF licenses this file
5
+ # to you under the Apache License, Version 2.0 (the
6
+ # "License"); you may not use this file except in compliance
7
+ # with the License. You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing,
12
+ # software distributed under the License is distributed on an
13
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
+ # KIND, either express or implied. See the License for the
15
+ # specific language governing permissions and limitations
16
+ # under the License.
17
+
18
+ class SortIndicesTest < Test::Unit::TestCase
19
+ def setup
20
+ @table = Arrow::Table.new(number1: [16, -1, 2, 32, -4, -4, -8],
21
+ number2: [32, 2, -16, 8, 1, 4, 1])
22
+ end
23
+
24
+ sub_test_case("Table") do
25
+ test("Symbol") do
26
+ assert_equal(Arrow::UInt64Array.new([6, 4, 5, 1, 2, 0, 3]),
27
+ @table.sort_indices(:number1))
28
+ end
29
+
30
+ test("-String") do
31
+ assert_equal(Arrow::UInt64Array.new([3, 0, 2, 1, 4, 5, 6]),
32
+ @table.sort_indices("-number1"))
33
+ end
34
+
35
+ test("Symbol, -String") do
36
+ assert_equal(Arrow::UInt64Array.new([6, 5, 4, 1, 2, 0, 3]),
37
+ @table.sort_indices([:number1, "-number2"]))
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,81 @@
1
+ # Licensed to the Apache Software Foundation (ASF) under one
2
+ # or more contributor license agreements. See the NOTICE file
3
+ # distributed with this work for additional information
4
+ # regarding copyright ownership. The ASF licenses this file
5
+ # to you under the Apache License, Version 2.0 (the
6
+ # "License"); you may not use this file except in compliance
7
+ # with the License. You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing,
12
+ # software distributed under the License is distributed on an
13
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
+ # KIND, either express or implied. See the License for the
15
+ # specific language governing permissions and limitations
16
+ # under the License.
17
+
18
+ class SortKeyTest < Test::Unit::TestCase
19
+ sub_test_case(".resolve") do
20
+ test("SortKey") do
21
+ assert_equal(Arrow::SortKey.new("-count"),
22
+ Arrow::SortKey.resolve(Arrow::SortKey.new("-count")))
23
+ end
24
+
25
+ test("-String") do
26
+ assert_equal(Arrow::SortKey.new("-count"),
27
+ Arrow::SortKey.resolve("-count"))
28
+ end
29
+
30
+ test("Symbol, Symbol") do
31
+ assert_equal(Arrow::SortKey.new("-count"),
32
+ Arrow::SortKey.resolve(:count, :desc))
33
+ end
34
+ end
35
+
36
+ sub_test_case("#initialize") do
37
+ test("String") do
38
+ assert_equal("+count",
39
+ Arrow::SortKey.new("count").to_s)
40
+ end
41
+
42
+ test("+String") do
43
+ assert_equal("+count",
44
+ Arrow::SortKey.new("+count").to_s)
45
+ end
46
+
47
+ test("-String") do
48
+ assert_equal("-count",
49
+ Arrow::SortKey.new("-count").to_s)
50
+ end
51
+
52
+ test("Symbol") do
53
+ assert_equal("+-count",
54
+ Arrow::SortKey.new(:"-count").to_s)
55
+ end
56
+
57
+ test("String, Symbol") do
58
+ assert_equal("--count",
59
+ Arrow::SortKey.new("-count", :desc).to_s)
60
+ end
61
+
62
+ test("String, String") do
63
+ assert_equal("--count",
64
+ Arrow::SortKey.new("-count", "desc").to_s)
65
+ end
66
+
67
+ test("String, SortOrder") do
68
+ assert_equal("--count",
69
+ Arrow::SortKey.new("-count",
70
+ Arrow::SortOrder::DESCENDING).to_s)
71
+ end
72
+ end
73
+
74
+ sub_test_case("#to_s") do
75
+ test("recreatable") do
76
+ key = Arrow::SortKey.new("-count", :desc)
77
+ assert_equal(key,
78
+ Arrow::SortKey.new(key.to_s))
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,58 @@
1
+ # Licensed to the Apache Software Foundation (ASF) under one
2
+ # or more contributor license agreements. See the NOTICE file
3
+ # distributed with this work for additional information
4
+ # regarding copyright ownership. The ASF licenses this file
5
+ # to you under the Apache License, Version 2.0 (the
6
+ # "License"); you may not use this file except in compliance
7
+ # with the License. You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing,
12
+ # software distributed under the License is distributed on an
13
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
+ # KIND, either express or implied. See the License for the
15
+ # specific language governing permissions and limitations
16
+ # under the License.
17
+
18
+ class SortOptionsTest < Test::Unit::TestCase
19
+ sub_test_case("#initialize") do
20
+ test("none") do
21
+ options = Arrow::SortOptions.new
22
+ assert_equal([],
23
+ options.sort_keys.collect(&:to_s))
24
+ end
25
+
26
+ test("-String, Symbol") do
27
+ options = Arrow::SortOptions.new("-count", :age)
28
+ assert_equal(["-count", "+age"],
29
+ options.sort_keys.collect(&:to_s))
30
+ end
31
+ end
32
+
33
+ sub_test_case("instance methods") do
34
+ setup do
35
+ @options = Arrow::SortOptions.new
36
+ end
37
+
38
+ sub_test_case("#add_sort_key") do
39
+ test("-String") do
40
+ @options.add_sort_key("-count")
41
+ assert_equal(["-count"],
42
+ @options.sort_keys.collect(&:to_s))
43
+ end
44
+
45
+ test("-String, Symbol") do
46
+ @options.add_sort_key("-count", :desc)
47
+ assert_equal(["--count"],
48
+ @options.sort_keys.collect(&:to_s))
49
+ end
50
+
51
+ test("SortKey") do
52
+ @options.add_sort_key(Arrow::SortKey.new("-count"))
53
+ assert_equal(["-count"],
54
+ @options.sort_keys.collect(&:to_s))
55
+ end
56
+ end
57
+ end
58
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: red-arrow
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0
4
+ version: 4.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Apache Arrow Developers
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-01-25 00:00:00.000000000 Z
11
+ date: 2021-04-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bigdecimal
@@ -254,6 +254,8 @@ files:
254
254
  - lib/arrow/rolling-window.rb
255
255
  - lib/arrow/schema.rb
256
256
  - lib/arrow/slicer.rb
257
+ - lib/arrow/sort-key.rb
258
+ - lib/arrow/sort-options.rb
257
259
  - lib/arrow/sparse-union-data-type.rb
258
260
  - lib/arrow/struct-array-builder.rb
259
261
  - lib/arrow/struct-array.rb
@@ -337,6 +339,9 @@ files:
337
339
  - test/test-rolling-window.rb
338
340
  - test/test-schema.rb
339
341
  - test/test-slicer.rb
342
+ - test/test-sort-indices.rb
343
+ - test/test-sort-key.rb
344
+ - test/test-sort-options.rb
340
345
  - test/test-sparse-union-data-type.rb
341
346
  - test/test-struct-array-builder.rb
342
347
  - test/test-struct-array.rb
@@ -359,8 +364,8 @@ homepage: https://arrow.apache.org/
359
364
  licenses:
360
365
  - Apache-2.0
361
366
  metadata:
362
- msys2_mingw_dependencies: arrow>=3.0.0
363
- post_install_message:
367
+ msys2_mingw_dependencies: arrow>=4.0.0
368
+ post_install_message:
364
369
  rdoc_options: []
365
370
  require_paths:
366
371
  - lib
@@ -375,85 +380,88 @@ required_rubygems_version: !ruby/object:Gem::Requirement
375
380
  - !ruby/object:Gem::Version
376
381
  version: '0'
377
382
  requirements: []
378
- rubygems_version: 3.2.5
379
- signing_key:
383
+ rubygems_version: 3.2.15
384
+ signing_key:
380
385
  specification_version: 4
381
386
  summary: Red Arrow is the Ruby bindings of Apache Arrow
382
387
  test_files:
383
- - test/test-decimal256-array-builder.rb
384
- - test/test-time64-data-type.rb
385
- - test/test-feather.rb
386
- - test/test-decimal128.rb
387
- - test/test-struct-array.rb
388
- - test/test-data-type.rb
389
- - test/test-list-data-type.rb
390
- - test/test-dense-union-data-type.rb
391
- - test/test-decimal256-array.rb
388
+ - test/fixture/TestOrcFile.test1.orc
389
+ - test/fixture/float-integer.csv
390
+ - test/fixture/integer-float.csv
391
+ - test/fixture/null-with-double-quote.csv
392
+ - test/fixture/null-without-double-quote.csv
393
+ - test/fixture/with-header-float.csv
394
+ - test/fixture/with-header.csv
395
+ - test/fixture/without-header-float.csv
396
+ - test/fixture/without-header.csv
397
+ - test/helper/fixture.rb
398
+ - test/helper/omittable.rb
392
399
  - test/helper.rb
393
- - test/test-record-batch.rb
394
- - test/test-table.rb
400
+ - test/raw-records/test-basic-arrays.rb
401
+ - test/raw-records/test-dense-union-array.rb
402
+ - test/raw-records/test-list-array.rb
403
+ - test/raw-records/test-multiple-columns.rb
404
+ - test/raw-records/test-sparse-union-array.rb
405
+ - test/raw-records/test-struct-array.rb
406
+ - test/raw-records/test-table.rb
395
407
  - test/run-test.rb
396
- - test/test-timestamp-array.rb
397
- - test/test-date32-array.rb
398
408
  - test/test-array-builder.rb
409
+ - test/test-array.rb
410
+ - test/test-bigdecimal.rb
411
+ - test/test-buffer.rb
412
+ - test/test-chunked-array.rb
413
+ - test/test-column.rb
414
+ - test/test-csv-loader.rb
415
+ - test/test-data-type.rb
416
+ - test/test-date32-array.rb
399
417
  - test/test-date64-array.rb
400
- - test/test-record-batch-file-reader.rb
418
+ - test/test-decimal128-array-builder.rb
419
+ - test/test-decimal128-array.rb
401
420
  - test/test-decimal128-data-type.rb
402
- - test/test-time.rb
403
- - test/test-timestamp-data-type.rb
421
+ - test/test-decimal128.rb
422
+ - test/test-decimal256-array-builder.rb
423
+ - test/test-decimal256-array.rb
424
+ - test/test-decimal256-data-type.rb
404
425
  - test/test-decimal256.rb
426
+ - test/test-dense-union-data-type.rb
405
427
  - test/test-dictionary-array.rb
406
- - test/test-fixed-size-binary-array-builder.rb
407
- - test/test-column.rb
428
+ - test/test-dictionary-data-type.rb
429
+ - test/test-feather.rb
408
430
  - test/test-field.rb
409
- - test/test-decimal128-array.rb
410
- - test/test-csv-loader.rb
411
- - test/test-bigdecimal.rb
431
+ - test/test-file-output-stream.rb
432
+ - test/test-fixed-size-binary-array-builder.rb
412
433
  - test/test-fixed-size-binary-array.rb
413
- - test/test-list-array.rb
414
- - test/test-decimal256-data-type.rb
415
- - test/test-time64-array.rb
416
- - test/test-rolling-window.rb
417
- - test/test-dictionary-data-type.rb
418
- - test/fixture/integer-float.csv
419
- - test/fixture/without-header-float.csv
420
- - test/fixture/null-with-double-quote.csv
421
- - test/fixture/with-header-float.csv
422
- - test/fixture/TestOrcFile.test1.orc
423
- - test/fixture/null-without-double-quote.csv
424
- - test/fixture/without-header.csv
425
- - test/fixture/with-header.csv
426
- - test/fixture/float-integer.csv
427
- - test/test-orc.rb
428
- - test/test-null-array.rb
429
- - test/test-time32-data-type.rb
430
- - test/test-struct-data-type.rb
431
434
  - test/test-group.rb
432
- - test/test-buffer.rb
433
- - test/values/test-struct-array.rb
434
- - test/values/test-basic-arrays.rb
435
- - test/values/test-list-array.rb
436
- - test/values/test-dense-union-array.rb
437
- - test/values/test-sparse-union-array.rb
438
- - test/test-slicer.rb
439
435
  - test/test-list-array-builder.rb
440
- - test/test-sparse-union-data-type.rb
436
+ - test/test-list-array.rb
437
+ - test/test-list-data-type.rb
438
+ - test/test-null-array.rb
439
+ - test/test-orc.rb
441
440
  - test/test-record-batch-builder.rb
442
- - test/raw-records/test-struct-array.rb
443
- - test/raw-records/test-table.rb
444
- - test/raw-records/test-basic-arrays.rb
445
- - test/raw-records/test-list-array.rb
446
- - test/raw-records/test-dense-union-array.rb
447
- - test/raw-records/test-sparse-union-array.rb
448
- - test/raw-records/test-multiple-columns.rb
449
- - test/test-array.rb
450
- - test/test-file-output-stream.rb
441
+ - test/test-record-batch-file-reader.rb
451
442
  - test/test-record-batch-iterator.rb
452
- - test/test-tensor.rb
453
- - test/test-decimal128-array-builder.rb
454
- - test/test-chunked-array.rb
443
+ - test/test-record-batch.rb
444
+ - test/test-rolling-window.rb
455
445
  - test/test-schema.rb
446
+ - test/test-slicer.rb
447
+ - test/test-sort-indices.rb
448
+ - test/test-sort-key.rb
449
+ - test/test-sort-options.rb
450
+ - test/test-sparse-union-data-type.rb
456
451
  - test/test-struct-array-builder.rb
457
- - test/helper/fixture.rb
458
- - test/helper/omittable.rb
452
+ - test/test-struct-array.rb
453
+ - test/test-struct-data-type.rb
454
+ - test/test-table.rb
455
+ - test/test-tensor.rb
456
+ - test/test-time.rb
459
457
  - test/test-time32-array.rb
458
+ - test/test-time32-data-type.rb
459
+ - test/test-time64-array.rb
460
+ - test/test-time64-data-type.rb
461
+ - test/test-timestamp-array.rb
462
+ - test/test-timestamp-data-type.rb
463
+ - test/values/test-basic-arrays.rb
464
+ - test/values/test-dense-union-array.rb
465
+ - test/values/test-list-array.rb
466
+ - test/values/test-sparse-union-array.rb
467
+ - test/values/test-struct-array.rb