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 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.nil? or v.strip! == ''
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 start transaction
47
- # :after - default to commit
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] ||= "start transaction;\ninsert into #{args[:table]} values"
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] ||= "start transaction;\n"
71
+ args[:before] ||= ""
60
72
  args[:values_glue] ||= ", "
61
- args[:row_format] ||= "insert into #{args[:table]} values(%s)"
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] ||= "start transaction;\n"
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.070313
7
- date: 2007-03-13 00:00:00 +00:00
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: []