1 # frozen_string_literal: true
 
   3 class AddRelations < ActiveRecord::Migration[4.2]
 
   5     # enums work like strings but are more efficient
 
   6     create_enum :nwr_enum, %w[Node Way Relation]
 
   8     # a relation can have members much like a way can have nodes.
 
  10     # way: only nodes / relation: any kind of member
 
  11     # way: ordered sequence of nodes / relation: free-form "role" string
 
  12     create_table "current_relation_members", :id => false do |t|
 
  13       t.column "id",          :bigint, :null => false
 
  14       t.column "member_type", :nwr_enum, :null => false
 
  15       t.column "member_id",   :bigint, :null => false
 
  16       t.column "member_role", :string
 
  19     add_primary_key "current_relation_members", %w[id member_type member_id member_role]
 
  20     add_index "current_relation_members", %w[member_type member_id], :name => "current_relation_members_member_idx"
 
  21     # the following is obsolete given the primary key, is it not?
 
  22     # add_index "current_relation_members", ["id"], :name => "current_relation_members_id_idx"
 
  23     create_table "current_relation_tags", :id => false do |t|
 
  24       t.column "id", :bigint, :null => false
 
  25       t.column "k",  :string, :default => "", :null => false
 
  26       t.column "v",  :string, :default => "", :null => false
 
  29     add_index "current_relation_tags", ["id"], :name => "current_relation_tags_id_idx"
 
  30     add_index "current_relation_tags", "v", :name => "current_relation_tags_v_idx"
 
  32     create_table "current_relations", :id => false do |t|
 
  33       t.column "id",        :bigserial, :primary_key => true, :null => false
 
  34       t.column "user_id",   :bigint, :null => false
 
  35       t.column "timestamp", :datetime, :null => false
 
  36       t.column "visible",   :boolean, :null => false
 
  39     create_table "relation_members", :id => false do |t|
 
  40       t.column "id",          :bigint, :default => 0, :null => false
 
  41       t.column "member_type", :nwr_enum, :null => false
 
  42       t.column "member_id",   :bigint, :null => false
 
  43       t.column "member_role", :string
 
  44       t.column "version",     :bigint, :default => 0, :null => false
 
  47     add_primary_key "relation_members", %w[id version member_type member_id member_role]
 
  48     add_index "relation_members", %w[member_type member_id], :name => "relation_members_member_idx"
 
  50     create_table "relation_tags", :id => false do |t|
 
  51       t.column "id",      :bigint, :default => 0, :null => false
 
  52       t.column "k",       :string, :null => false, :default => ""
 
  53       t.column "v",       :string, :null => false, :default => ""
 
  54       t.column "version", :bigint, :null => false
 
  57     add_index "relation_tags", %w[id version], :name => "relation_tags_id_version_idx"
 
  59     create_table "relations", :id => false do |t|
 
  60       t.column "id",        :bigint, :null => false, :default => 0
 
  61       t.column "user_id",   :bigint, :null => false
 
  62       t.column "timestamp", :datetime, :null => false
 
  63       t.column "version",   :bigint, :null => false
 
  64       t.column "visible",   :boolean, :null => false, :default => true
 
  67     add_primary_key "relations", %w[id version]
 
  68     add_index "relations", ["timestamp"], :name => "relations_timestamp_idx"
 
  73     drop_table :current_relations
 
  74     drop_table :relation_tags
 
  75     drop_table :current_relation_tags
 
  76     drop_table :relation_members
 
  77     drop_table :current_relation_members
 
  78     drop_enumeration :nwr_enum