class XMigra::DeclarativeSupport::Table::ForeignKey

Constants

IDENTIFIER
IMPLICIT_PREFIX

Attributes

delete_rule[RW]
referent[RW]
update_rule[RW]

Public Class Methods

new(name, constr_spec) click to toggle source
# File lib/xmigra/declarative_support/table.rb, line 227
def initialize(name, constr_spec)
  super(name, constr_spec)
  @referent = constr_spec['link to'] || Constraint.bad_spec(
    %Q{Foreign key constraint #{@name} does not specify "link to" (referent)}
  )
  @update_rule = constr_spec['on update'].tap {|v| break v.upcase if v}
  @delete_rule = constr_spec['on delete'].tap {|v| break v.upcase if v}
end

Public Instance Methods

constrained_colnames() click to toggle source
# File lib/xmigra/declarative_support/table.rb, line 238
def constrained_colnames
  columns.keys
end
creation_sql() click to toggle source
# File lib/xmigra/declarative_support/table.rb, line 246
def creation_sql
  "".tap do |result|
    result << creation_name_sql
    result << "FOREIGN KEY (#{constrained_colnames.join(', ')})"
    result << "\n    REFERENCES #{referent} (#{referenced_colnames.join(', ')})"
    if update_rule
      result << "\n    ON UPDATE #{update_rule}"
    end
    if delete_rule
      result << "\n    ON DELETE #{delete_rule}"
    end
  end
end
referenced_colnames() click to toggle source
# File lib/xmigra/declarative_support/table.rb, line 242
def referenced_colnames
  columns.values
end

Protected Instance Methods

get_and_validate_columns(constr_spec) click to toggle source
# File lib/xmigra/declarative_support/table.rb, line 261
def get_and_validate_columns(constr_spec)
  (constr_spec.raw_item('columns') || Constraint.bad_spec(
    %Q{#{self.class::IDENTIFIER} constraint #{name} must specify columns}
  )).tap do |cols|
    unless cols.kind_of? Hash
      Constraint.bad_spec(
        %Q{Foreign key constraint #{@name} expected "columns" to be a mapping (Hash) referrer -> referent}
      )
    end
  end
end