csv2psql 0.0.15 → 0.0.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 764ba1f133551d811fce81b53bda7b9fa53c3f31
4
- data.tar.gz: d5501dd56420a37048ec43c08a61bd6070bc054d
3
+ metadata.gz: 22ed4a3c0fd8d982937fd5ff0fd94a28096b53ee
4
+ data.tar.gz: 69be2825f4e5073e8b1176e781c5c6be185c430d
5
5
  SHA512:
6
- metadata.gz: 33e26a12dbce605939c42199023a321da5e871ddd7664b6ad221dffacb5ad3cf7b557e12d40ae01647fc551f7a7bff89cdaa53fca29e66abb6f8a6877e4443b8
7
- data.tar.gz: 78b0315b8a67a9add8eb58fd4ac62df82f731f37a796fe90cdbf968af1bf22ed3f46a5f41db02542dd0cca1a72e35f1f72e2f4b389704bf90c45404484f002a1
6
+ metadata.gz: e83da80ea836915620c2da1093dbaf7246ad64456eb390d2a89085cef5a5a851b2f54c62b3893054c5af480e72d1d9a50ea4df643751a9681698884b99afb25a
7
+ data.tar.gz: 940af7ddd4b901109e9435b780441fbaed0327f59c5c871b841deb177cb59519b871fb436081b6aed94e6b917d5db86ec89d61bf39f5b18337deae1212b215a5
data/README.md CHANGED
@@ -33,7 +33,7 @@ See **[examples](https://gist.github.com/korczis/2f7f54c7bd53554f44df)**
33
33
  ## Getting started
34
34
 
35
35
  ```
36
- gem install csv2psql
36
+ $ gem install csv2psql
37
37
  ```
38
38
 
39
39
  ## Usage
@@ -41,20 +41,22 @@ gem install csv2psql
41
41
  **Simple conversion**
42
42
 
43
43
  ```
44
- csv2psql convert data/sample.csv
44
+ $ csv2psql convert data/sample.csv
45
45
  ```
46
46
 
47
47
  **Global help**
48
48
 
49
49
  ```
50
- csv2psql help
51
-
50
+ $ csv2psql
52
51
  NAME
53
- csv2psql - csv2psql 0.0.12 (Codename: Prudent owl)
52
+ csv2psql - Tool for converting CSV files to PSQL statements
54
53
 
55
54
  SYNOPSIS
56
55
  csv2psql [global options] command [command options] [arguments...]
57
56
 
57
+ VERSION
58
+ 0.0.15
59
+
58
60
  GLOBAL OPTIONS
59
61
  -d, --delimiter=arg - Column delimiter (default: ,)
60
62
  -h, --[no-]header - Header row included (default: enabled)
@@ -63,20 +65,20 @@ GLOBAL OPTIONS
63
65
  -q, --quote=arg - Quoting character (default: ")
64
66
  -s, --separator=arg - Line separator (default: none)
65
67
  --skip=arg - How many rows skip (default: -1)
68
+ --version - Display the program version
66
69
 
67
70
  COMMANDS
68
71
  analyze - Analyze csv file
69
72
  convert - Convert csv file
70
73
  help - Shows a list of commands or help for one command
71
74
  schema - Generate schema for file
72
- version - Print version info```
75
+ version - Print version info
73
76
  ```
74
77
 
75
78
  **Analyze help**
76
79
 
77
80
  ```
78
- csv2psql help analyze
79
-
81
+ $ csv2psql help analyze
80
82
  NAME
81
83
  analyze - Analyze csv file
82
84
 
@@ -84,14 +86,13 @@ SYNOPSIS
84
86
  csv2psql [global options] analyze [command options]
85
87
 
86
88
  COMMAND OPTIONS
87
- -f, --format=arg - Output format (default: json)
89
+ -f, --format=arg - Output format json, table (default: json)
88
90
  ```
89
91
 
90
92
  **Convert help**
91
93
 
92
94
  ```
93
- csv2psql help convert
94
-
95
+ $ csv2psql help convert
95
96
  NAME
96
97
  convert - Convert csv file
97
98
 
@@ -102,15 +103,14 @@ COMMAND OPTIONS
102
103
  --[no-]create-table - Crate SQL Table before inserts
103
104
  --[no-]drop-table - Drop SQL Table before inserts
104
105
  -t, --table=arg - Table to insert to (default: none)
105
- --[no-]transaction - Import in transaction block (default: enabled)
106
+ --[no-]transaction - Import in transaction block
106
107
  --[no-]truncate-table - Truncate SQL Table before inserts
107
108
  ```
108
109
 
109
110
  **Schema help**
110
111
 
111
112
  ```
112
- csv2psql help schema
113
-
113
+ $ csv2psql help schema
114
114
  NAME
115
115
  schema - Generate schema for file
116
116
 
@@ -118,7 +118,7 @@ SYNOPSIS
118
118
  csv2psql [global options] schema [command options]
119
119
 
120
120
  COMMAND OPTIONS
121
- -f, --format=arg - Output format (default: json)
121
+ -f, --format=arg - Output format - json, sql, table (default: json)
122
122
  ```
123
123
 
124
124
  ## Example
@@ -126,7 +126,7 @@ COMMAND OPTIONS
126
126
  **Input CSV**
127
127
 
128
128
  ```
129
- cat data/sample.csv
129
+ $ cat data/sample.csv
130
130
 
131
131
  id,Firstname,Lastname,Address.Street,Address.City,Address.Details.Note
132
132
  12345,Joe,Doe,"#2140 Taylor Street, 94133",San Francisco,Pool available
@@ -136,7 +136,7 @@ id,Firstname,Lastname,Address.Street,Address.City,Address.Details.Note
136
136
  **Convert CSV**
137
137
 
138
138
  ```
139
- csv2psql convert data/sample.csv
139
+ $ csv2psql convert data/sample.csv
140
140
 
141
141
  BEGIN;
142
142
  -- Table: my_table
@@ -149,7 +149,7 @@ COMMIT;
149
149
  **Convert CSV - Create table**
150
150
 
151
151
  ```
152
- csv2psql convert --create-table -t pokus data/sample.csv
152
+ $ csv2psql convert --create-table -t pokus data/sample.csv
153
153
 
154
154
  BEGIN;
155
155
  -- Table: pokus
@@ -174,7 +174,7 @@ COMMIT;
174
174
  **Convert CSV - Stream directly to Postgres client (psql)**
175
175
 
176
176
  ```
177
- csv2psql convert --create-table -t hokus data/sample.csv | psql
177
+ $ csv2psql convert --create-table -t hokus data/sample.csv | psql
178
178
 
179
179
  BEGIN
180
180
  CREATE TABLE
@@ -183,10 +183,17 @@ INSERT 0 1
183
183
  COMMIT
184
184
  ```
185
185
 
186
+ ```
187
+ $ csv2psql convert --create-table -t hokus data/sample.csv | psql -h 127.0.0.1 -U jetel
188
+ Password for user jetel:
189
+ CREATE TABLE
190
+ INSERT 0 1
191
+ INSERT 0 1
192
+ ```
186
193
  **Convert CSV - Full load**
187
194
 
188
195
  ```
189
- csv2psql convert --create-table --drop-table --truncate-table -t test data/sample.csv
196
+ $ csv2psql convert --create-table --drop-table --truncate-table -t test data/sample.csv
190
197
 
191
198
  BEGIN;
192
199
  DROP TABLE IF EXISTS test;
@@ -213,13 +220,13 @@ COMMIT;
213
220
  **Convert CSV - Load CIA Factbook automagically**
214
221
 
215
222
  ```
216
- csv2psql convert --create-table --drop-table --truncate-table --no-transaction -t test data/cia-data-all.csv | psql
223
+ $ csv2psql convert --create-table --drop-table --truncate-table --no-transaction -t test data/cia-data-all.csv | psql
217
224
  ```
218
225
 
219
226
  **Analyze CSV - Show as table**
220
227
 
221
228
  ```
222
- csv2psql analyze --format=table tmp/sfpd_incident_2013.csv
229
+ $ csv2psql analyze --format=table tmp/sfpd_incident_2013.csv
223
230
 
224
231
  +------------+--------+-----------+---------+------+--------+------+
225
232
  | tmp/sfpd_incident_2013.csv |
@@ -243,7 +250,7 @@ csv2psql analyze --format=table tmp/sfpd_incident_2013.csv
243
250
  **Schema guess**
244
251
 
245
252
  ```
246
- csv2psql schema -f table ./data/census_SFOH_2010.csv
253
+ $ csv2psql schema -f table ./data/census_SFOH_2010.csv
247
254
 
248
255
  +-------------------------------------------------+---------+---------+
249
256
  | ./data/census_SFOH_2010.csv |
data/bin/csv2psql CHANGED
@@ -1,4 +1,3 @@
1
1
  #! /usr/bin/env ruby
2
2
 
3
3
  require_relative '../lib/csv2psql/cli/cli'
4
-
@@ -10,9 +10,11 @@ module Csv2Psql
10
10
  CLASS = :numeric
11
11
  WEIGHT = 4
12
12
 
13
+ RE = Regexp.new(/^\d+$/)
14
+
13
15
  class << self
14
16
  def analyze(val)
15
- val.is_a?(Integer) || (val && !val.match(/^\d+$/).nil?)
17
+ val.is_a?(Integer) || (val && RE.match(val))
16
18
  end
17
19
 
18
20
  def convert(val)
@@ -10,20 +10,34 @@ module Csv2Psql
10
10
  CLASS = :special
11
11
  WEIGHT = 5
12
12
 
13
- BOOLEAN_VALUES = %w(true false 0 1)
14
- BOOLEAN_VALUES_MAP = {}
15
- BOOLEAN_VALUES.each do |k|
16
- BOOLEAN_VALUES_MAP[k] = true
17
- end
13
+ TRUE_VALUES = [
14
+ true,
15
+ 't',
16
+ 'true',
17
+ 'y',
18
+ 'yes',
19
+ 'on',
20
+ '1',
21
+ ]
22
+ FALSE_VALUES = [
23
+ false,
24
+ 'f',
25
+ 'false',
26
+ 'n',
27
+ 'no',
28
+ 'off',
29
+ '0'
30
+ ]
31
+ BOOLEAN_VALUES = TRUE_VALUES + FALSE_VALUES
18
32
 
19
33
  class << self
20
34
  def analyze(val)
21
- return if val.nil? || val.empty?
22
- BOOLEAN_VALUES_MAP.key?(val.downcase)
35
+ return false if val.nil? || val.empty?
36
+ BOOLEAN_VALUES.index(val) != nil
23
37
  end
24
38
 
25
39
  def convert(val)
26
- val.to_i
40
+ val.downcase
27
41
  end
28
42
  end
29
43
  end
@@ -6,7 +6,7 @@ module Csv2Psql
6
6
  module Analyzers
7
7
  # Character value matcher
8
8
  class Character < BaseAnalyzer
9
- TYPE = :bigint
9
+ TYPE = :character
10
10
  CLASS = :character
11
11
  WEIGHT = 2
12
12
 
@@ -0,0 +1,26 @@
1
+ # encoding: UTF-8
2
+
3
+ require_relative 'base_analyzer'
4
+
5
+ module Csv2Psql
6
+ module Analyzers
7
+ # Bigint value matcher
8
+ class Date < BaseAnalyzer
9
+ TYPE = :date
10
+ CLASS = :date
11
+ WEIGHT = 3
12
+
13
+ RE = Regexp.new(/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/)
14
+
15
+ class << self
16
+ def analyze(val)
17
+ val && RE.match(val)
18
+ end
19
+
20
+ def convert(val)
21
+ val.to_i
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -9,12 +9,12 @@ module Csv2Psql
9
9
  TYPE = :decimal
10
10
  CLASS = :numeric
11
11
  WEIGHT = 3
12
- RE = /^[-+]?[0-9]*[.,]?[0-9]+([eE][-+]?[0-9]+)?$/
12
+ RE = Regexp.new(/^[-+]?[0-9]*[.,]?[0-9]+([eE][-+]?[0-9]+)?$/)
13
13
 
14
14
  class << self
15
15
  def analyze(val)
16
16
  return true if val.is_a?(Float)
17
- res = val && val.match(RE)
17
+ res = val && RE.match(val)
18
18
  !res.nil?
19
19
  end
20
20
 
@@ -12,7 +12,7 @@ module Csv2Psql
12
12
 
13
13
  class << self
14
14
  def analyze(val)
15
- val.is_a?(::String)
15
+ val.is_a?(::String) && !val.empty?
16
16
  end
17
17
  end
18
18
  end
@@ -0,0 +1,26 @@
1
+ # encoding: UTF-8
2
+
3
+ require_relative 'base_analyzer'
4
+
5
+ module Csv2Psql
6
+ module Analyzers
7
+ # Bigint value matcher
8
+ class Time < BaseAnalyzer
9
+ TYPE = :time
10
+ CLASS = :date
11
+ WEIGHT = 3
12
+
13
+ RE = Regexp.new(/^[0-9]{2}:[0-9]{2}(:[0-9]{2})?$/)
14
+
15
+ class << self
16
+ def analyze(val)
17
+ val && RE.match(val)
18
+ end
19
+
20
+ def convert(val)
21
+ val.to_i
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -10,14 +10,11 @@ module Csv2Psql
10
10
  CLASS = :special
11
11
  WEIGHT = 5
12
12
 
13
- RE = /^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}$/ # rubocop:disable Metrics/LineLength
13
+ RE = Regexp.new(/^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}$/) # rubocop:disable Metrics/LineLength
14
14
 
15
15
  class << self
16
16
  def analyze(val)
17
- return false
18
-
19
- match = val && val.match(RE)
20
- !match.nil?
17
+ val && val.match(RE)
21
18
  end
22
19
  end
23
20
  end
@@ -8,7 +8,7 @@ require_relative '../../convert/convert'
8
8
  require_relative '../../helpers/erb_helper'
9
9
  require_relative '../../processor/processor'
10
10
 
11
- BASE_DIR = File.join(File.dirname(__FILE__), '..', '..', '..', '..')
11
+ BASE_DIR = File.join(File.dirname(__FILE__), '..', '..')
12
12
  TEMPLATE_DIR = File.join(BASE_DIR, 'templates')
13
13
  SCHEMA_TEMPLATE = File.join(TEMPLATE_DIR, 'schema.sql.erb')
14
14
 
@@ -10,7 +10,7 @@ require_relative '../helpers/erb_helper'
10
10
  module Csv2Psql
11
11
  # SQL Code generator
12
12
  class Generator
13
- BASE_DIR = File.join(File.dirname(__FILE__), '..', '..', '..')
13
+ BASE_DIR = File.join(File.dirname(__FILE__), '..')
14
14
  TEMPLATE_DIR = File.join(BASE_DIR, 'templates')
15
15
  CREATE_TABLE_TEMPLATE = File.join(TEMPLATE_DIR, 'create_table.sql.erb')
16
16
  DROP_TABLE_TEMPLATE = File.join(TEMPLATE_DIR, 'drop_table.sql.erb')
@@ -70,7 +70,11 @@ module Csv2Psql
70
70
  analyzer.analyze(path, data[:row], opts)
71
71
  end
72
72
 
73
- res[path] = SchemaGenerator.generate(analyzer.files[path])
73
+ analysis = analyzer.files[path]
74
+ if analysis
75
+ res[path] = SchemaGenerator.generate(analysis)
76
+ end
77
+
74
78
  end
75
79
  res
76
80
  end
@@ -7,6 +7,7 @@ module Csv2Psql
7
7
  def select_analyzers_by_match(analyzers, match)
8
8
  null_count = analyzers['Null'][:results][:count]
9
9
  analyzers.select do |_k, v|
10
+ next if _k != 'String' && v[:results][:count] == 0
10
11
  v[:results][:count] + null_count == match
11
12
  end
12
13
  end
@@ -15,8 +16,13 @@ module Csv2Psql
15
16
  analyzers.select { |_k, v| v[:class].sql_class?(class_name) }
16
17
  end
17
18
 
18
- def select_best(analyzers, lines)
19
- analyzers = select_analyzers_by_match(analyzers, lines)
19
+ def select_best(in_analyzers, lines)
20
+ analyzers = select_analyzers_by_match(in_analyzers, lines)
21
+
22
+ # matched_analyzers = analyzers.select do |name, analyzer|
23
+ # analyzer[:results][:count] === lines
24
+ # end
25
+
20
26
  sorted = analyzers.sort do |a, b|
21
27
  a[1][:class].weight <=> b[1][:class].weight
22
28
  end
@@ -2,5 +2,5 @@
2
2
 
3
3
  # Csv2Psql module
4
4
  module Csv2Psql
5
- VERSION = '0.0.15'
5
+ VERSION = '0.0.16'
6
6
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: csv2psql
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.15
4
+ version: 0.0.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tomas Korcak
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-05 00:00:00.000000000 Z
11
+ date: 2015-11-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gli
@@ -289,9 +289,11 @@ files:
289
289
  - lib/csv2psql/analyzer/types/bigint.rb
290
290
  - lib/csv2psql/analyzer/types/boolean.rb
291
291
  - lib/csv2psql/analyzer/types/character.rb
292
+ - lib/csv2psql/analyzer/types/date.rb
292
293
  - lib/csv2psql/analyzer/types/decimal.rb
293
294
  - lib/csv2psql/analyzer/types/null.rb
294
295
  - lib/csv2psql/analyzer/types/string.rb
296
+ - lib/csv2psql/analyzer/types/time.rb
295
297
  - lib/csv2psql/analyzer/types/uuid.rb
296
298
  - lib/csv2psql/cache/cache.rb
297
299
  - lib/csv2psql/cli/app.rb
@@ -317,6 +319,11 @@ files:
317
319
  - lib/csv2psql/output/output.rb
318
320
  - lib/csv2psql/processor/processor.rb
319
321
  - lib/csv2psql/schema/schema_generator.rb
322
+ - lib/csv2psql/templates/create_table.sql.erb
323
+ - lib/csv2psql/templates/drop_table.sql.erb
324
+ - lib/csv2psql/templates/header.sql.erb
325
+ - lib/csv2psql/templates/schema.sql.erb
326
+ - lib/csv2psql/templates/truncate_table.sql.erb
320
327
  - lib/csv2psql/version.rb
321
328
  - spec/cli/app_spec.rb
322
329
  - spec/cli/cmd/analyze_cmd_spec.rb
@@ -324,11 +331,6 @@ files:
324
331
  - spec/cli/cmd/version_cmd_spec.rb
325
332
  - spec/helpers/cli_helper.rb
326
333
  - spec/spec_helper.rb
327
- - templates/create_table.sql.erb
328
- - templates/drop_table.sql.erb
329
- - templates/header.sql.erb
330
- - templates/schema.sql.erb
331
- - templates/truncate_table.sql.erb
332
334
  homepage: https://github.com/korczis/csv2psql
333
335
  licenses:
334
336
  - MIT