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