idata 0.0.5 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/bin/iload +20 -25
  3. data/lib/idata/version.rb +1 -1
  4. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9b369eb5215e497e66d4364240f9fb7de6da8c62
4
- data.tar.gz: 37d2fdc825b364a26f48df4172f1546be61ce301
3
+ metadata.gz: 819b2d2fdfbb0c55e7e0fad65c6bbdb28c5e5b5d
4
+ data.tar.gz: 553beaa45ad12795547c87902c18d6d44da58a34
5
5
  SHA512:
6
- metadata.gz: 2ee2a70707b45a9d1e163fd735ad88b47bc37c117039e4b1686b669352a75b420569a8b3f72977c567e13ecc5e301f0addb5c3b694f592dc072e194a249e95b3
7
- data.tar.gz: e0ce31954906f7c468ce945e83165ab6091fe77eb657dc4c0cc11b0b443cf5e089ae46a762b19321328abdf8540b4650d4e742a3d435b41d000f499513ee53e3
6
+ metadata.gz: c3e289852ac767f0948e5f835cb0bf937309699c9e6d04ac50386888327de5abc1cfe8465a8ff403f5695bced3ad45e7b5e06f4bbdf91b16a4f4fc2d55c0133f
7
+ data.tar.gz: 5fad9fdd602ad71e584e98b0dea174dfa74f9027be7d3d7cac00be55f7f6c231218a7480bcfdbfb948e7b9fdc228db5bb083e13be193b974b8392f2d73d010ed
data/bin/iload CHANGED
@@ -19,14 +19,6 @@ POSTGRESQL_PORT = 5432
19
19
  CSV_DEFAULT_DELIMITER = ','
20
20
  CSV_DEFAULT_QUOTE = '"'
21
21
 
22
- PG_TAB = "E'\t'"
23
- PG_BACKSPACE = "E'\b'"
24
-
25
- PG_CHAR_MAP = {
26
- "\t" => PG_TAB,
27
- "\b" => PG_BACKSPACE
28
- }
29
-
30
22
  $options = {}
31
23
  parser = OptionParser.new("", 24) do |opts|
32
24
  opts.banner = "\nProgram: Data Loader\nAuthor: MCKI\n\n"
@@ -195,8 +187,20 @@ class MyParser
195
187
  end
196
188
 
197
189
  def load_csv
198
- # Copy file to /tmp/ folder to prevent Permission Error
199
- FileUtils.cp $options[:input], $tmpfile
190
+ # Load CSV data from input file to a temp array
191
+ csv_data = []
192
+ CSV.foreach($options[:input], :col_sep => $options[:delim], :quote_char => $options[:quote]) do |csv|
193
+ csv_data << csv
194
+ end
195
+
196
+ # Serialize array into a new CSV (with standard delimiter, quote) for later use with PostgreSQL
197
+ CSV.open($tmpfile, "wb", :col_sep => CSV_DEFAULT_DELIMITER, :quote_char => CSV_DEFAULT_QUOTE) do |writer|
198
+ csv_data.each do |csv|
199
+ writer << csv
200
+ end
201
+ end
202
+
203
+ # Send to PostgreSQL
200
204
  create_table_from_csv($tmpfile)
201
205
  end
202
206
 
@@ -211,21 +215,21 @@ class MyParser
211
215
  headers.map!{|s| s.downcase.strip }
212
216
 
213
217
  # Write
214
- CSV.open($tmpfile, "wb", :col_sep => CSV_DEFAULT_DELIMITER) do |csv|
218
+ CSV.open($tmpfile, "wb", :col_sep => CSV_DEFAULT_DELIMITER, :quote_char => CSV_DEFAULT_QUOTE) do |csv|
215
219
  csv << headers
216
-
217
220
  data.each_with_index{|s, index|
218
221
  record = s.unpack(ranges).map{|e| e.strip}
219
222
  csv << record
220
223
  }
221
224
  end
222
-
225
+
226
+ # Send to PostgreSQL
223
227
  create_table_from_csv($tmpfile)
224
228
  end
225
229
 
226
230
  def create_table_from_csv(csv_path)
227
231
  # Get headers
228
- csv = CSV.open(csv_path, :headers => true, :col_sep => $options[:delim], quote_char: "\b")
232
+ csv = CSV.open(csv_path, :headers => true, :col_sep => CSV_DEFAULT_DELIMITER, :quote_char => CSV_DEFAULT_QUOTE)
229
233
 
230
234
  first = csv.first
231
235
  unless first
@@ -256,19 +260,10 @@ class MyParser
256
260
  create_table_sql = headers.map{|e| "\"#{e}\" text"}.join(",")
257
261
  create_table_sql = "create table if not exists #{$options[:table]}( id serial not null, #{create_table_sql} );"
258
262
  query(drop_table_sql, create_table_sql)
259
-
260
- # Dump data
261
- #pg_tab = "E'\t'" if $options[:delim] == "\t"
262
-
263
- tab = PG_CHAR_MAP[$options[:delim]]
264
- tab ||= "'#{$options[:delim]}'"
265
-
266
- quote = PG_CHAR_MAP[$options[:quote]]
267
- quote = "'#{$options[:quote]}'"
268
263
 
269
264
  insert_data_sql = headers.map{|e| "\"#{e}\""}.join(",")
270
- insert_data_sql = "COPY #{$options[:table]}( #{insert_data_sql} ) FROM '#{csv_path}' DELIMITER #{tab} CSV HEADER QUOTE #{quote};"
271
-
265
+ insert_data_sql = "COPY #{$options[:table]}( #{insert_data_sql} ) FROM '#{csv_path}' DELIMITER ',' CSV HEADER"
266
+
272
267
  # Change output file permission so that postgres user can read it
273
268
  begin
274
269
  FileUtils.chmod 0755, csv_path
data/lib/idata/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Idata
2
- VERSION = "0.0.5"
2
+ VERSION = "0.1.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: idata
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nghi Pham