bulk_dependency_eraser 4.2.2 → 4.3.0

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
  SHA256:
3
- metadata.gz: 8efe5bca3c57d245dc00fcb0d04a57bab5dc9eb19d81e55be43a56e6adb7752c
4
- data.tar.gz: b6b2d2bf30e7dd964d5032bd61ed1e57f820bec667dd3435c79567e24d6a0265
3
+ metadata.gz: 6cc809556aa24a68e132b8b18c5107452d98a7659594c8ae60807d4a41192941
4
+ data.tar.gz: e21b344baed301a3b8732d9b8b6d517fa38353de1169eb3842f752d1aec31be9
5
5
  SHA512:
6
- metadata.gz: b7981de1665f8c6c7f7c2054c446a09edaa6add210481e091d2034f086eb9703bd619b23de29d03777bb8445b9fc7902329af8ce262204510e0e7695ebe380be
7
- data.tar.gz: 42cfbfdb8ad934d9b4d1a806e9da158e82a2ddb2b38cbee790423c5ff046aa3517370f12bd6e5cad00f6ec7db57fb6ee3082bbcb6faefadc866f6332919a6143
6
+ metadata.gz: 3715bf4c61448253a260e6b968c68bd4f27350f2fe960787c58c60023cade1a62af66ad611c1bf50d7c9c261c9d5f847d9fe28ebb3f31975a4dbe0122de5e56e
7
+ data.tar.gz: 38dc0a80a042241fbb5964f8da4c0228e4f978cbaba9ebb328b6bd25d78133519c5573b453120cabbc899f8e8b1a041511579e9c5f946a5b65b49a2350761e92
@@ -192,12 +192,16 @@ module BulkDependencyEraser
192
192
  # If the query has a limit, then we don't want to clobber with batching.
193
193
  if batching_disabled? || !query.where({}).limit_value.nil?
194
194
  # query without batching
195
- query_results = query.pluck(*columns)
195
+ # query_results = query.pluck(*columns)
196
+ query_results = query.pluck(*columns.collect{ |c| "#{query.klass.table_name}.#{c}"})
196
197
  elsif opts_c.disable_batch_ordering || opts_c.disable_batch_ordering_for_klasses.include?(current_klass_name)
197
198
  # query with orderless batching
198
199
  offset = 0
199
200
  loop do
200
- new_query_results = query.offset(offset).limit(batch_size).pluck(*columns)
201
+ # This use-case didn't work. Rails converts the query filter to a left_outer_join, and can't then pull the CTID column in some use-cases
202
+ # new_query_results = query.offset(offset).limit(batch_size).pluck(*columns)
203
+ # This implementation does work. Prevents rails ORM from converting to a join
204
+ new_query_results = query.offset(offset).limit(batch_size).pluck(*columns.collect{ |c| "#{query.klass.table_name}.#{c}"})
201
205
  query_results += new_query_results
202
206
 
203
207
  break if new_query_results.size < batch_size
@@ -208,7 +212,8 @@ module BulkDependencyEraser
208
212
  else
209
213
  # query with ordered batching
210
214
  query.in_batches(of: batch_size) do |subset_query|
211
- query_results += subset_query.pluck(*columns)
215
+ # query_results += subset_query.pluck(*columns)
216
+ query_results += subset_query.pluck(*columns.collect{ |c| "#{query.klass.table_name}.#{c}"})
212
217
  end
213
218
  end
214
219
  end
@@ -54,6 +54,7 @@ module BulkDependencyEraser
54
54
  # Applied to deletion queries
55
55
  # - 1st priority of scopes
56
56
  deletion_proc_scopes_per_class_name: {},
57
+ use_ctid_over_primary_key: false,
57
58
  }.freeze
58
59
 
59
60
  def initialize class_names_and_ids: {}, additional_identifiers_by_id: {}, opts: {}
@@ -140,7 +141,13 @@ module BulkDependencyEraser
140
141
  # Get column-names/keys of any additional identifer columns
141
142
  detected_additional_identifier_columns = additional_identifiers&.values&.flat_map(&:keys)&.uniq || []
142
143
  delete_in_db do
143
- deletion_query = query.where(id: ids)
144
+ deletion_query = query
145
+ if opts_c.use_ctid_over_primary_key && detected_additional_identifier_columns.include?('ctid')
146
+ # Do nothing, query will be deleted via ctid
147
+ else
148
+ deletion_query = deletion_query.where(id: ids)
149
+ end
150
+
144
151
  # Apply any additional query identifiers (i.e. :ctid column)
145
152
  detected_additional_identifier_columns.each do |column|
146
153
  deletion_query = deletion_query.where(column => additional_identifiers.values.pluck(column))
@@ -160,7 +167,13 @@ module BulkDependencyEraser
160
167
  # Get column-names/keys of any additional identifer columns
161
168
  detected_additional_identifier_columns = additional_identifiers_subset&.values&.flat_map(&:keys)&.uniq || []
162
169
  delete_in_db do
163
- deletion_query = query.where(id: ids_subset)
170
+ deletion_query = query
171
+ if opts_c.use_ctid_over_primary_key && detected_additional_identifier_columns.include?('ctid')
172
+ # Do nothing, query will be deleted via ctid
173
+ else
174
+ deletion_query = deletion_query.where(id: ids_subset)
175
+ end
176
+
164
177
  # Apply any additional query identifiers (i.e. :ctid column)
165
178
  detected_additional_identifier_columns.each do |column|
166
179
  deletion_query = deletion_query.where(column => additional_identifiers_subset.values.pluck(column))
@@ -1,3 +1,3 @@
1
1
  module BulkDependencyEraser
2
- VERSION = "4.2.2".freeze
2
+ VERSION = "4.3.0".freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bulk_dependency_eraser
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.2.2
4
+ version: 4.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - benjamin.dana.software.dev@gmail.com