lib/arrow/array-builder.rb in red-arrow-0.14.1 vs lib/arrow/array-builder.rb in red-arrow-0.15.0
- old
+ new
@@ -25,10 +25,11 @@
builder = new
return builder.build(values)
end
builder_class = nil
+ builder_class_arguments = []
values.each do |value|
case value
when nil
# Ignore
when true, false
@@ -41,12 +42,33 @@
if value < 0
builder = IntArrayBuilder.new
return builder.build(values)
else
builder_class = UIntArrayBuilder
+ builder_class_arguments = []
end
when Time
+ data_type = value.data_type
+ case data_type.unit
+ when TimeUnit::SECOND
+ if builder.nil?
+ builder = Time32ArrayBuilder
+ builder_class_arguments = [data_type]
+ end
+ when TimeUnit::MILLI
+ if builder != Time64ArrayBuilder
+ builder = Time32ArrayBuilder
+ builder_class_arguments = [data_type]
+ end
+ when TimeUnit::MICRO
+ builder = Time64ArrayBuilder
+ builder_class_arguments = [data_type]
+ when TimeUnit::NANO
+ builder = Time64ArrayBuilder.new(data_type)
+ return builder.build(values)
+ end
+ when ::Time
data_type = TimestampDataType.new(:nano)
builder = TimestampArrayBuilder.new(data_type)
return builder.build(values)
when DateTime
return Date64Array.new(values)
@@ -55,10 +77,11 @@
else
return StringArray.new(values)
end
end
if builder_class
- builder_class.new.build(values)
+ builder = builder_class.new(*builder_class_arguments)
+ builder.build(values)
else
Arrow::StringArray.new(values)
end
end