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 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: []