summaryrefslogtreecommitdiff
path: root/lib/gitlab/database/partitioning_migration_helpers/partitioned_foreign_key_validator.rb
blob: 089cf2b8931747defc8be68f085292606bd1068e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# frozen_string_literal: true

module Gitlab
  module Database
    module PartitioningMigrationHelpers
      class PartitionedForeignKeyValidator < ActiveModel::Validator
        def validate(record)
          validate_key_part(record, :from_table, :from_column)
          validate_key_part(record, :to_table, :to_column)
        end

        private

        def validate_key_part(record, table_field, column_field)
          if !connection.table_exists?(record[table_field])
            record.errors.add(table_field, 'must be a valid table')
          elsif !connection.column_exists?(record[table_field], record[column_field])
            record.errors.add(column_field, 'must be a valid column')
          end
        end

        def connection
          ActiveRecord::Base.connection
        end
      end
    end
  end
end