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:
authorPeter Leitzen <pleitzen@gitlab.com>2019-09-11 19:23:42 +0300
committerDouglas Barbosa Alexandre <dbalexandre@gmail.com>2019-09-11 19:23:42 +0300
commit50c647af51ae733abb96b84a5169d40b3c8c59be (patch)
tree13e059a9af8ddad9d1c5d8e312be17629367c9cb /lib/gitlab/database
parent0abc902576a755355b1daf75e19d1f37c6ffb5ff (diff)
Add rake task `db:obsolete_ignored_columns`
Show a list of obsolete `ignored_columns`
Diffstat (limited to 'lib/gitlab/database')
-rw-r--r--lib/gitlab/database/obsolete_ignored_columns.rb38
1 files changed, 38 insertions, 0 deletions
diff --git a/lib/gitlab/database/obsolete_ignored_columns.rb b/lib/gitlab/database/obsolete_ignored_columns.rb
new file mode 100644
index 00000000000..6266b6a4b65
--- /dev/null
+++ b/lib/gitlab/database/obsolete_ignored_columns.rb
@@ -0,0 +1,38 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Database
+ # Checks which `ignored_columns` can be safely removed by scanning
+ # the current schema for all `ApplicationRecord` descendants.
+ class ObsoleteIgnoredColumns
+ def initialize(base = ApplicationRecord)
+ @base = base
+ end
+
+ def execute
+ @base.descendants.map do |klass|
+ next if klass.abstract_class?
+
+ safe_to_remove = ignored_columns_safe_to_remove_for(klass)
+ next if safe_to_remove.empty?
+
+ [klass.name, safe_to_remove]
+ end.compact.sort_by(&:first)
+ end
+
+ private
+
+ def ignored_columns_safe_to_remove_for(klass)
+ ignored = klass.ignored_columns.map(&:to_s)
+
+ return [] if ignored.empty?
+
+ schema = klass.connection.schema_cache.columns_hash(klass.table_name)
+ existing = schema.values.map(&:name)
+
+ used = ignored & existing
+ ignored - used
+ end
+ end
+ end
+end