bulk_importer 0.2.2 → 0.2.3
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 +4 -4
- data/lib/bulk_importer/version.rb +1 -1
- data/lib/bulk_importer.rb +16 -7
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 874a0a632ea28fb994d76931bf16ca5ae51c8d95
|
|
4
|
+
data.tar.gz: a08b75cbaab59bda7d5f2bf4a207e7b37cfecae2
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f84fb1c6dfbc32074607d4637ad35666d105a5129f159c66d95a7eb9c7a85126fc3429437159f5e86a422ba4a4575c04e49bf69f44e65c7e56ed04fb6736241a
|
|
7
|
+
data.tar.gz: 8a4020a4f9e6e3ac1087a2e790a472e7a9e8fdb52525abf0b21b46597533dc7a11e8b2c9519e7ed95089a92954bdf7ec4959c0a1ba11f14ef38a6b8ba9703f4e
|
data/lib/bulk_importer.rb
CHANGED
|
@@ -71,7 +71,7 @@ module BulkImporter
|
|
|
71
71
|
return -1
|
|
72
72
|
ensure
|
|
73
73
|
# Drop temporary table (if exists)
|
|
74
|
-
|
|
74
|
+
ActiveRecord::Base.connection.execute "DROP TABLE IF EXISTS #{temp_name}"
|
|
75
75
|
end
|
|
76
76
|
end
|
|
77
77
|
|
|
@@ -171,7 +171,7 @@ module BulkImporter
|
|
|
171
171
|
sql << "SELECT #{self.keys_to_list(columns.keys, 'o', types)}"
|
|
172
172
|
sql << "FROM #{origin} o"
|
|
173
173
|
sql << "LEFT JOIN #{destination} d"
|
|
174
|
-
sql << "ON (#{self.keys_to_list(keys.keys, 'o')}) = "
|
|
174
|
+
sql << "ON (#{self.keys_to_list(keys.keys, 'o', types)}) = "
|
|
175
175
|
sql << "(#{self.keys_to_list(keys.values, 'd')})"
|
|
176
176
|
sql << "WHERE (#{self.keys_to_list(keys.values, 'd')}) is null"
|
|
177
177
|
|
|
@@ -200,15 +200,25 @@ module BulkImporter
|
|
|
200
200
|
pg_types = PostgresqlModule.get_column_types destination
|
|
201
201
|
columns.values.each { |i| types[columns.invert[i]] = pg_types[i] }
|
|
202
202
|
|
|
203
|
+
o_columns_without_keys = columns.keys.delete_if { |i| keys.has_key? i }
|
|
204
|
+
d_columns_without_keys = columns.values.delete_if { |i| keys.has_value? i }
|
|
205
|
+
|
|
206
|
+
sql << "WITH #{origin}_prexistent_modified AS ("
|
|
207
|
+
sql << "SELECT o.* FROM #{origin} o JOIN #{destination} d"
|
|
208
|
+
sql << "ON (#{self.keys_to_list(keys.keys, 'o', types)}) = "
|
|
209
|
+
sql << "(#{self.keys_to_list(keys.values, 'd')}) AND "
|
|
210
|
+
sql << "(#{self.keys_to_list(o_columns_without_keys, 'o', types)}) != "
|
|
211
|
+
sql << "(#{self.keys_to_list(d_columns_without_keys, 'd')})"
|
|
212
|
+
sql << ")"
|
|
203
213
|
sql << "UPDATE #{destination} d SET"
|
|
204
214
|
set = []
|
|
205
215
|
columns.delete_if { |item| columns[item].nil? }.keys.each do |column|
|
|
206
216
|
set << "#{columns[column]} = o.#{column}::#{types[column]}"
|
|
207
217
|
end
|
|
208
218
|
sql << set.join(',')
|
|
209
|
-
sql << "FROM #{origin} o"
|
|
210
|
-
sql << "WHERE (#{self.keys_to_list(keys.keys, 'o')})"
|
|
211
|
-
sql << "
|
|
219
|
+
sql << "FROM #{origin}_prexistent_modified o"
|
|
220
|
+
sql << "WHERE (#{self.keys_to_list(keys.keys, 'o', types)}) = "
|
|
221
|
+
sql << "(#{self.keys_to_list(keys.values, 'd')})"
|
|
212
222
|
|
|
213
223
|
q << sql.join(' ')
|
|
214
224
|
|
|
@@ -250,8 +260,7 @@ module BulkImporter
|
|
|
250
260
|
#
|
|
251
261
|
def self.make_create_temp_table_sql(name, columns)
|
|
252
262
|
columns = columns.map { |i| i + ' text' }
|
|
253
|
-
|
|
254
|
-
"CREATE TABLE #{name} (#{columns.join(',')})"
|
|
263
|
+
"CREATE TEMPORARY TABLE #{name} (#{columns.join(',')})"
|
|
255
264
|
end
|
|
256
265
|
|
|
257
266
|
# Translate an array of keys in a list with an optional prefix.
|