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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5b35f73c6f0ad696286c181ec46e0b8cc00334b6
4
- data.tar.gz: 5666a2358e00501877413c17783d6dc4de2d1246
3
+ metadata.gz: 874a0a632ea28fb994d76931bf16ca5ae51c8d95
4
+ data.tar.gz: a08b75cbaab59bda7d5f2bf4a207e7b37cfecae2
5
5
  SHA512:
6
- metadata.gz: c72a504a6946cff11319fb0ca0825ff345d6717c782daf6662a9717f399ca9ed5af9a231ae339713e2072eb6a73ca89197b687322529d119f73d2a42808ba0b2
7
- data.tar.gz: 9e20be8acc80d4892237b6c57c6b8d373a852300ee42884ae8e9ae2139a66acb0340c15f41572812fdb772b7ee58753042bf3a82d1e4427481e58c4fd91b911f
6
+ metadata.gz: f84fb1c6dfbc32074607d4637ad35666d105a5129f159c66d95a7eb9c7a85126fc3429437159f5e86a422ba4a4575c04e49bf69f44e65c7e56ed04fb6736241a
7
+ data.tar.gz: 8a4020a4f9e6e3ac1087a2e790a472e7a9e8fdb52525abf0b21b46597533dc7a11e8b2c9519e7ed95089a92954bdf7ec4959c0a1ba11f14ef38a6b8ba9703f4e
@@ -1,3 +1,3 @@
1
1
  module BulkImporter
2
- VERSION = "0.2.2"
2
+ VERSION = "0.2.3"
3
3
  end
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
- #ActiveRecord::Base.connection.execute "DROP TABLE IF EXISTS #{temp_name}"
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 << "IN (#{self.keys_to_list(keys.values, 'd')})"
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
- #"CREATE TEMPORARY TABLE #{name} (#{columns.join(',')})"
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.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bulk_importer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Abel M. Osorio