Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/services/loose_foreign_keys/cleaner_service.rb')
-rw-r--r--app/services/loose_foreign_keys/cleaner_service.rb30
1 files changed, 14 insertions, 16 deletions
diff --git a/app/services/loose_foreign_keys/cleaner_service.rb b/app/services/loose_foreign_keys/cleaner_service.rb
index 8fe053e2edf..44a922aad87 100644
--- a/app/services/loose_foreign_keys/cleaner_service.rb
+++ b/app/services/loose_foreign_keys/cleaner_service.rb
@@ -6,11 +6,9 @@ module LooseForeignKeys
DELETE_LIMIT = 1000
UPDATE_LIMIT = 500
- delegate :connection, to: :model
-
- def initialize(model:, foreign_key_definition:, deleted_parent_records:, with_skip_locked: false)
- @model = model
- @foreign_key_definition = foreign_key_definition
+ def initialize(loose_foreign_key_definition:, connection:, deleted_parent_records:, with_skip_locked: false)
+ @loose_foreign_key_definition = loose_foreign_key_definition
+ @connection = connection
@deleted_parent_records = deleted_parent_records
@with_skip_locked = with_skip_locked
end
@@ -18,20 +16,20 @@ module LooseForeignKeys
def execute
result = connection.execute(build_query)
- { affected_rows: result.cmd_tuples, table: foreign_key_definition.to_table }
+ { affected_rows: result.cmd_tuples, table: loose_foreign_key_definition.from_table }
end
def async_delete?
- foreign_key_definition.on_delete == :async_delete
+ loose_foreign_key_definition.on_delete == :async_delete
end
def async_nullify?
- foreign_key_definition.on_delete == :async_nullify
+ loose_foreign_key_definition.on_delete == :async_nullify
end
private
- attr_reader :model, :foreign_key_definition, :deleted_parent_records, :with_skip_locked
+ attr_reader :loose_foreign_key_definition, :connection, :deleted_parent_records, :with_skip_locked
def build_query
query = if async_delete?
@@ -39,10 +37,10 @@ module LooseForeignKeys
elsif async_nullify?
update_query
else
- raise "Invalid on_delete argument: #{foreign_key_definition.on_delete}"
+ raise "Invalid on_delete argument: #{loose_foreign_key_definition.on_delete}"
end
- unless query.include?(%{"#{foreign_key_definition.column}" IN (})
+ unless query.include?(%{"#{loose_foreign_key_definition.column}" IN (})
raise("FATAL: foreign key condition is missing from the generated query: #{query}")
end
@@ -50,15 +48,15 @@ module LooseForeignKeys
end
def arel_table
- @arel_table ||= model.arel_table
+ @arel_table ||= Arel::Table.new(loose_foreign_key_definition.from_table)
end
def primary_keys
- @primary_keys ||= connection.primary_keys(model.table_name).map { |key| arel_table[key] }
+ @primary_keys ||= connection.primary_keys(loose_foreign_key_definition.from_table).map { |key| arel_table[key] }
end
def quoted_table_name
- @quoted_table_name ||= Arel.sql(connection.quote_table_name(model.table_name))
+ @quoted_table_name ||= Arel.sql(connection.quote_table_name(loose_foreign_key_definition.from_table))
end
def delete_query
@@ -71,7 +69,7 @@ module LooseForeignKeys
def update_query
query = Arel::UpdateManager.new
query.table(quoted_table_name)
- query.set([[arel_table[foreign_key_definition.column], nil]])
+ query.set([[arel_table[loose_foreign_key_definition.column], nil]])
add_in_query_with_limit(query, UPDATE_LIMIT)
end
@@ -88,7 +86,7 @@ module LooseForeignKeys
def in_query_with_limit(limit)
in_query = Arel::SelectManager.new
in_query.from(quoted_table_name)
- in_query.where(arel_table[foreign_key_definition.column].in(deleted_parent_records.map(&:primary_key_value)))
+ in_query.where(arel_table[loose_foreign_key_definition.column].in(deleted_parent_records.map(&:primary_key_value)))
in_query.projections = primary_keys
in_query.take(limit)
in_query.lock(Arel.sql('FOR UPDATE SKIP LOCKED')) if with_skip_locked