class GeocodeRecords::UpdateTableFromCsv
Constants
- COPY_SQL
- CREATE_TABLE_SQL
- DESIRED_COLUMNS
- UPDATE_TABLE_SQL
Attributes
database_url[R]
num[R]
path[R]
table_name[R]
Public Class Methods
new( database_url:, table_name:, path:, num: )
click to toggle source
# File lib/geocode_records/update_table_from_csv.rb, line 77 def initialize( database_url:, table_name:, path:, num: ) @database_url = database_url @table_name = table_name @path = path @num = num end
Public Instance Methods
create_tmp_table()
click to toggle source
# File lib/geocode_records/update_table_from_csv.rb, line 101 def create_tmp_table memo = "geocode_records_#{table_name}_#{rand(999999)}".gsub(/[^a-z0-9_]/i, '') GeocodeRecords.psql( database_url, CREATE_TABLE_SQL.gsub('$TMP_TABLE_NAME', memo) ) memo end
delete_tmp_table(tmp_table_name)
click to toggle source
# File lib/geocode_records/update_table_from_csv.rb, line 136 def delete_tmp_table(tmp_table_name) GeocodeRecords.psql( database_url, "DROP TABLE IF EXISTS #{tmp_table_name}" ) end
load_csv_into_tmp_table(path:, table_name:)
click to toggle source
# File lib/geocode_records/update_table_from_csv.rb, line 121 def load_csv_into_tmp_table(path:, table_name:) GeocodeRecords.psql( database_url, COPY_SQL.gsub('$TMP_TABLE_NAME', table_name).gsub('$PATH', path) ) end
perform()
click to toggle source
# File lib/geocode_records/update_table_from_csv.rb, line 89 def perform return unless File.size(path) > 32 tmp_table_name = create_tmp_table begin tmp_csv_path = strip_csv load_csv_into_tmp_table path: tmp_csv_path, table_name: tmp_table_name update_original_table tmp_table_name ensure delete_tmp_table tmp_table_name end end
strip_csv()
click to toggle source
# File lib/geocode_records/update_table_from_csv.rb, line 110 def strip_csv memo = GeocodeRecords.new_tmp_path('stripped') system( 'xsv', 'select', DESIRED_COLUMNS.join(','), path, out: memo ) or raise("xsv failed") memo end
update_original_table(tmp_table_name)
click to toggle source
# File lib/geocode_records/update_table_from_csv.rb, line 128 def update_original_table(tmp_table_name) num_suffix = (num == 1 ? '' : num.to_s) GeocodeRecords.psql( database_url, UPDATE_TABLE_SQL.gsub('$TMP_TABLE_NAME', tmp_table_name).gsub('$TABLE_NAME', table_name).gsub('$NUM_SUFFIX', num_suffix) ) end