split_node_tags: Implement key constraints.
This commit is contained in:
parent
71e390bf31
commit
ba01b66242
2 changed files with 51 additions and 0 deletions
41
db/migrate/015_key_constraints.rb
Normal file
41
db/migrate/015_key_constraints.rb
Normal file
|
@ -0,0 +1,41 @@
|
|||
class KeyConstraints < ActiveRecord::Migration
|
||||
def self.up
|
||||
# Primary keys
|
||||
add_primary_key :current_node_tags, [:id, :k]
|
||||
add_primary_key :current_way_tags, [:id, :k]
|
||||
add_primary_key :current_relation_tags, [:id, :k]
|
||||
|
||||
add_primary_key :node_tags, [:id, :version, :k]
|
||||
add_primary_key :way_tags, [:id, :version, :k]
|
||||
add_primary_key :relation_tags, [:id, :version, :k]
|
||||
|
||||
add_primary_key :nodes, [:id, :version]
|
||||
|
||||
# Foreign keys (between ways, way_tags, way_nodes, etc.)
|
||||
add_foreign_key :current_node_tags, [:id], :current_nodes
|
||||
add_foreign_key :node_tags, [:id, :version], :nodes
|
||||
|
||||
add_foreign_key :current_way_tags, [:id], :current_ways
|
||||
add_foreign_key :current_way_nodes, [:id], :current_ways
|
||||
add_foreign_key :way_tags, [:id, :version], :ways
|
||||
add_foreign_key :way_nodes, [:id, :version], :ways
|
||||
|
||||
add_foreign_key :current_relation_tags, [:id], :current_relations
|
||||
add_foreign_key :current_relation_members, [:id], :current_relations
|
||||
add_foreign_key :relation_tags, [:id, :version], :relations
|
||||
add_foreign_key :relation_members, [:id, :version], :relations
|
||||
|
||||
# Foreign keys (between different types of primitives)
|
||||
add_foreign_key :current_way_nodes, [:node_id], :current_nodes, [:id]
|
||||
|
||||
# FIXME: We don't have foreign keys for relation members since the id
|
||||
# might point to a different table depending on the `type' column.
|
||||
# We'd probably need different current_relation_member_nodes,
|
||||
# current_relation_member_ways and current_relation_member_relations
|
||||
# tables for this to work cleanly.
|
||||
end
|
||||
|
||||
def self.down
|
||||
raise IrreversibleMigration.new
|
||||
end
|
||||
end
|
|
@ -1,6 +1,10 @@
|
|||
module ActiveRecord
|
||||
module ConnectionAdapters
|
||||
module SchemaStatements
|
||||
def quote_column_names(column_name)
|
||||
Array(column_name).map { |e| quote_column_name(e) }.join(", ")
|
||||
end
|
||||
|
||||
def add_primary_key(table_name, column_name, options = {})
|
||||
column_names = Array(column_name)
|
||||
quoted_column_names = column_names.map { |e| quote_column_name(e) }.join(", ")
|
||||
|
@ -11,6 +15,12 @@ module ActiveRecord
|
|||
execute "ALTER TABLE #{table_name} DROP PRIMARY KEY"
|
||||
end
|
||||
|
||||
def add_foreign_key(table_name, column_name, reftbl, refcol = nil)
|
||||
execute "ALTER TABLE #{table_name} ADD " +
|
||||
"FOREIGN KEY (#{quote_column_names(column_name)}) " +
|
||||
"REFERENCES #{reftbl} (#{quote_column_names(refcol || column_name)})"
|
||||
end
|
||||
|
||||
alias_method :old_options_include_default?, :options_include_default?
|
||||
|
||||
def options_include_default?(options)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue