29 lines
831 B
Ruby
29 lines
831 B
Ruby
|
# 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
|