def create_relationship_constraint(relationship)
return false unless valid_relationship_for_constraint?(relationship)
source_model = relationship.source_model
source_table = source_model.storage_name(name)
source_key = relationship.source_key
constraint_name = constraint_name(source_table, relationship.name)
return false if constraint_exists?(source_table, constraint_name)
constraint_type = case relationship.inverse.constraint
when :protect then 'NO ACTION'
when :destroy, :destroy! then 'CASCADE'
when :set_nil then 'SET NULL'
end
return false if constraint_type.nil?
storage_name = relationship.source_model.storage_name(name)
reference_storage_name = relationship.target_model.storage_name(name)
foreign_keys = relationship.source_key.map { |p| property_to_column_name(p, false) }
reference_keys = relationship.target_key.map { |p| property_to_column_name(p, false) }
execute(create_constraints_statement(storage_name, constraint_name, constraint_type, foreign_keys, reference_storage_name, reference_keys))
end