1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

[ruby/csv] parser: use row separator explicitly

It will improve performance a bit. (But I haven't confirmed it yet...)

06a65b0302
This commit is contained in:
Sutou Kouhei 2021-12-24 10:18:35 +09:00 committed by Sutou Kouhei
parent 4a5d372ca8
commit 002ce9f515
Notes: git 2021-12-24 14:35:53 +09:00

View file

@ -85,9 +85,10 @@ class CSV
# If there is no more data (eos? = true), it returns "". # If there is no more data (eos? = true), it returns "".
# #
class InputsScanner class InputsScanner
def initialize(inputs, encoding, chunk_size: 8192) def initialize(inputs, encoding, row_separator, chunk_size: 8192)
@inputs = inputs.dup @inputs = inputs.dup
@encoding = encoding @encoding = encoding
@row_separator = row_separator
@chunk_size = chunk_size @chunk_size = chunk_size
@last_scanner = @inputs.empty? @last_scanner = @inputs.empty?
@keeps = [] @keeps = []
@ -250,7 +251,7 @@ class CSV
@last_scanner = @inputs.empty? @last_scanner = @inputs.empty?
true true
else else
chunk = input.gets(nil, @chunk_size) chunk = input.gets(@row_separator, @chunk_size)
if chunk if chunk
raise InvalidEncoding unless chunk.valid_encoding? raise InvalidEncoding unless chunk.valid_encoding?
@scanner = StringScanner.new(chunk) @scanner = StringScanner.new(chunk)
@ -778,6 +779,7 @@ class CSV
Integer((ENV["CSV_PARSER_SCANNER_TEST_CHUNK_SIZE"] || "1"), 10) Integer((ENV["CSV_PARSER_SCANNER_TEST_CHUNK_SIZE"] || "1"), 10)
InputsScanner.new(inputs, InputsScanner.new(inputs,
@encoding, @encoding,
@row_separator,
chunk_size: chunk_size) chunk_size: chunk_size)
end end
else else
@ -807,7 +809,7 @@ class CSV
StringIO.new(sample) StringIO.new(sample)
end end
inputs << @input inputs << @input
InputsScanner.new(inputs, @encoding) InputsScanner.new(inputs, @encoding, @row_separator)
end end
end end
end end