Skip to content
Snippets Groups Projects

Cleanup leftovers in packages_dependencies table

Compare and
9 files
+ 129
0
Compare changes
  • Side-by-side
  • Inline
Files
9
# frozen_string_literal: true
class Packages::Dependency < ApplicationRecord
include EachBatch
has_many :dependency_links, class_name: 'Packages::DependencyLink'
validates :name, :version_pattern, presence: true
@@ -9,6 +11,7 @@ class Packages::Dependency < ApplicationRecord
NAME_VERSION_PATTERN_TUPLE_MATCHING = '(name, version_pattern) = (?, ?)'
MAX_STRING_LENGTH = 255
MAX_CHUNKED_QUERIES_COUNT = 10
BATCH_SIZE = 3000
def self.ids_for_package_names_and_version_patterns(names_and_version_patterns = {}, chunk_size = 50, max_rows_limit = 200)
names_and_version_patterns.reject! { |key, value| key.size > MAX_STRING_LENGTH || value.size > MAX_STRING_LENGTH }
@@ -41,6 +44,17 @@ def self.pluck_ids_and_names
pluck(:id, :name)
end
def self.orphaned
subquery = Packages::DependencyLink.where(Packages::DependencyLink[:dependency_id].eq(Packages::Dependency[:id]))
where_not_exists(subquery)
end
def self.delete_orphaned_in_batches(batch_size: BATCH_SIZE)
orphaned.each_batch(of: batch_size) do |relation| # rubocop:disable Style/SymbolProc
relation.delete_all
end
end
def orphaned?
self.dependency_links.empty?
end
Loading