Module: E621::CsvImportable

Extended by:
T::Sig
Included in:
Artist, BulkUpdateRequest, Pool, Post, PostReplacement, PostVersion, Tag, TagAlias, TagImplication, WikiPage
Defined in:
lib/e621/csv_importable.rb

Instance Method Summary collapse

Instance Method Details

#import_from_csv(csv_path) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
# File 'lib/e621/csv_importable.rb', line 9

def import_from_csv(csv_path)
  model = T.unsafe(self)
  headers = File.open(csv_path, "rb", &:readline).chomp
  columns = headers.split(",").map { |h| model.connection.quote_column_name(h.strip) }.join(", ")
  raw = model.connection.raw_connection
  raw.copy_data("COPY #{model.quoted_table_name} (#{columns}) FROM STDIN WITH (FORMAT CSV, HEADER TRUE)") do
    File.open(csv_path, "rb") do |f|
      raw.put_copy_data(f.read(65_536)) until f.eof?
    end
  end
end