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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6cc809556aa24a68e132b8b18c5107452d98a7659594c8ae60807d4a41192941
|
4
|
+
data.tar.gz: e21b344baed301a3b8732d9b8b6d517fa38353de1169eb3842f752d1aec31be9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
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
|
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
|
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))
|