csv2sql 0.2.070313 → 0.2.070529155119
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.
- data/lib/csv2sql.rb +23 -26
- data/tests/files/gmclient.csv +11 -0
- data/tests/instant.rb +13 -0
- data/tests/test.rb +16 -0
- metadata +6 -2
data/lib/csv2sql.rb
CHANGED
@@ -27,9 +27,15 @@ require 'pathname'
|
|
27
27
|
# puts Csv2sql.new("account_balances.csv").to_updates([nil, 'balance'], :table => 'accounts')
|
28
28
|
#
|
29
29
|
class Csv2sql
|
30
|
-
|
30
|
+
|
31
|
+
@@defaults = {
|
32
|
+
:before => "", # can be changed to "start transaction;\n"
|
33
|
+
:after => ";\n" # can be changes to "commit;\n"
|
34
|
+
}
|
35
|
+
|
31
36
|
def self.default_value_filter(v, i, j, k)
|
32
|
-
return 'null' if v.
|
37
|
+
return 'null' if v.to_s == ''
|
38
|
+
return v.to_s if v.is_a? Float or v.is_a? Fixnum
|
33
39
|
v.gsub!(/"/, '\\"')
|
34
40
|
"\"#{v}\""
|
35
41
|
end
|
@@ -40,27 +46,32 @@ class Csv2sql
|
|
40
46
|
|
41
47
|
# Sql inserts
|
42
48
|
#
|
49
|
+
# Please note that you can set table name with values :table => 'my_table(id, col1, col2...)'
|
50
|
+
# to make inserts into specific columns only.
|
51
|
+
#
|
43
52
|
# Optional named args:
|
53
|
+
# :ignore - true/false, if true uses INSERT IGNORE ...
|
44
54
|
# :bulk - if true, bulk insert (see cluster size in your sql server to make big bulks to avoid server gone away!)
|
45
55
|
# :table - default based on filename
|
46
|
-
# :before - default to
|
47
|
-
# :after - default to
|
56
|
+
# :before - default to blank
|
57
|
+
# :after - default to ;
|
48
58
|
# ...see Csv2sql#to_any for the rest
|
49
59
|
#
|
50
60
|
def to_inserts(args={})
|
51
61
|
args[:table] ||= Pathname.new(@filename).basename.to_s.downcase.gsub(/\W/, '_')
|
62
|
+
args[:before] ||= @@defaults[:before]
|
63
|
+
args[:after] ||= @@defaults[:after]
|
64
|
+
insert_sql = args[:ignore] ? 'insert ignore' : 'insert'
|
52
65
|
if args[:bulk]
|
53
|
-
args[:before]
|
66
|
+
args[:before] += "#{insert_sql} into #{args[:table]} values"
|
54
67
|
args[:values_glue] ||= ", "
|
55
68
|
args[:row_format] ||= " (%s)"
|
56
69
|
args[:row_glue] ||= ",\n"
|
57
|
-
args[:after] ||= ";\ncommit;\n"
|
58
70
|
else
|
59
|
-
args[:before] ||= "
|
71
|
+
args[:before] ||= ""
|
60
72
|
args[:values_glue] ||= ", "
|
61
|
-
args[:row_format] ||= "
|
73
|
+
args[:row_format] ||= "#{insert_sql} into #{args[:table]} values(%s)"
|
62
74
|
args[:row_glue] ||= ";\n"
|
63
|
-
args[:after] ||= ";\ncommit;\n"
|
64
75
|
end
|
65
76
|
to_any args
|
66
77
|
end
|
@@ -75,7 +86,8 @@ class Csv2sql
|
|
75
86
|
def to_updates(set_columns, args={})
|
76
87
|
args[:pk] ||= [0, 'id']
|
77
88
|
args[:table] ||= Pathname.new(@filename).basename.to_s.downcase.gsub(/\W/, '_')
|
78
|
-
args[:before] ||=
|
89
|
+
args[:before] ||= @@defaults[:before]
|
90
|
+
args[:after] ||= @@defaults[:after]
|
79
91
|
args[:values_glue] ||= ", "
|
80
92
|
args[:row_format] ||= lambda do |values|
|
81
93
|
r = []
|
@@ -83,7 +95,6 @@ class Csv2sql
|
|
83
95
|
"update #{args[:table]} set #{r.join(', ')} where #{args[:pk][1]} = #{values[args[:pk][0]]}"
|
84
96
|
end
|
85
97
|
args[:row_glue] ||= ";\n"
|
86
|
-
args[:after] ||= ";\ncommit;\n"
|
87
98
|
to_any args
|
88
99
|
end
|
89
100
|
|
@@ -138,7 +149,7 @@ class Csv2sql
|
|
138
149
|
|
139
150
|
if values
|
140
151
|
|
141
|
-
if args[:value_filter] # LOOK OUT! value_filter for single value
|
152
|
+
if args[:value_filter] # LOOK OUT! value_filter is for single value
|
142
153
|
k = -1
|
143
154
|
values = values.map do |value|
|
144
155
|
k += 1
|
@@ -155,17 +166,3 @@ class Csv2sql
|
|
155
166
|
end
|
156
167
|
|
157
168
|
end
|
158
|
-
|
159
|
-
# Test
|
160
|
-
if $0 == __FILE__
|
161
|
-
|
162
|
-
csv2sql = Csv2sql.new("GMCLIENT.TXT")
|
163
|
-
#~ puts csv2sql.to_inserts(:bulk => true)
|
164
|
-
|
165
|
-
#~ puts csv2sql.to_inserts()
|
166
|
-
#~ puts csv2sql.to_updates([nil, 'balance'], :table => 'accounts')
|
167
|
-
|
168
|
-
PROPERSYS_ROOT = 'c:/Users/Mirek/Ringley/PROPERSYS2'
|
169
|
-
puts Csv2sql.new("#{PROPERSYS_ROOT}/GMTENANT.TXT").to_updates([nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 'balance'], :table => 'accounts')
|
170
|
-
|
171
|
-
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
0321S, 0, 0, 335.48, 230,W ,30/06/07
|
2
|
+
0442S, 2234.72, -234.12, 1325.34, 450,M ,31/02/07
|
3
|
+
0034S, 3421.44, 9254.98, 2357.39, 1520,E ,31/01/07
|
4
|
+
0248S, 12326.82, 26246.48, 5436.61, 1234,W ,30/05/07
|
5
|
+
,,,,,,
|
6
|
+
0052S, 12349.32, 12435.67, 1249.2, 340,W ,
|
7
|
+
0342S, -2243.84, 32134.37, 1123439, 2450,L ,31/04/07
|
8
|
+
|
9
|
+
0042S, 1249.32, 345.4, 0, 1234,J ,31/05/07
|
10
|
+
0024S, -12346.12, 23562.54, 2345.55, 450,W ,31/06/07
|
11
|
+
wrong, number, of, values
|
data/tests/instant.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
|
2
|
+
require '../lib/csv2sql.rb'
|
3
|
+
|
4
|
+
@files_dir = File.dirname(__FILE__) + '/files'
|
5
|
+
@gmclient_file = "#{@files_dir}/gmclient.csv"
|
6
|
+
|
7
|
+
puts Csv2sql.new(@gmclient_file).to_inserts(
|
8
|
+
:values_filter => lambda do |values, i, j|
|
9
|
+
return [values[0]]
|
10
|
+
end,
|
11
|
+
:table => "estates(id)",
|
12
|
+
:ignore => true
|
13
|
+
)
|
data/tests/test.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
|
2
|
+
require 'test/unit'
|
3
|
+
require '../lib/csv2sql'
|
4
|
+
|
5
|
+
class Csv2sqlTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def setup
|
8
|
+
@files_dir = File.dirname(__FILE__) + '/files'
|
9
|
+
@gmclient_file = "#{@files_dir}/gmclient.csv"
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_to_inserts()
|
13
|
+
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
|
|
3
3
|
specification_version: 1
|
4
4
|
name: csv2sql
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.2.
|
7
|
-
date: 2007-
|
6
|
+
version: 0.2.070529155119
|
7
|
+
date: 2007-05-29 00:00:00 +01:00
|
8
8
|
summary: Csv2sql provides an easy way to convert comma separated files to sql
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -29,6 +29,10 @@ post_install_message:
|
|
29
29
|
authors:
|
30
30
|
- Mirek Rusin
|
31
31
|
files:
|
32
|
+
- tests/files
|
33
|
+
- tests/instant.rb
|
34
|
+
- tests/test.rb
|
35
|
+
- tests/files/gmclient.csv
|
32
36
|
- lib/csv2sql.rb
|
33
37
|
- README
|
34
38
|
test_files: []
|