summaryrefslogtreecommitdiff
path: root/lib/gitlab/database/schema_validation/inconsistency_filter.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab/database/schema_validation/inconsistency_filter.rb')
-rw-r--r--lib/gitlab/database/schema_validation/inconsistency_filter.rb43
1 files changed, 43 insertions, 0 deletions
diff --git a/lib/gitlab/database/schema_validation/inconsistency_filter.rb b/lib/gitlab/database/schema_validation/inconsistency_filter.rb
new file mode 100644
index 00000000000..aa3a71c0edb
--- /dev/null
+++ b/lib/gitlab/database/schema_validation/inconsistency_filter.rb
@@ -0,0 +1,43 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Database
+ module SchemaValidation
+ class InconsistencyFilter
+ def initialize(tables, triggers)
+ @tables = tables
+ @triggers = triggers
+ end
+
+ def to_proc
+ proc do |inconsistency|
+ inconsistency unless ignored?(inconsistency)
+ end
+ end
+
+ private
+
+ attr_reader :tables, :triggers
+
+ def ignored?(inconsistency)
+ case inconsistency.type
+ in 'extra_tables' | 'missing_tables'
+ ignored_table?(inconsistency.table_name)
+ in 'extra_triggers' | 'missing_triggers'
+ ignored_trigger?(inconsistency.object_name)
+ else
+ false
+ end
+ end
+
+ def ignored_table?(name)
+ tables.include?(name)
+ end
+
+ def ignored_trigger?(name)
+ triggers.any? { |ignored_object| name.to_s.include?(ignored_object) }
+ end
+ end
+ end
+ end
+end