csv2sql 0.2.070313 → 0.2.070529155119
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|