Merge 12304:14009 from trunk.
This commit is contained in:
commit
c8ee135104
36 changed files with 174 additions and 130 deletions
33
db/migrate/024_order_relation_members.rb
Normal file
33
db/migrate/024_order_relation_members.rb
Normal file
|
@ -0,0 +1,33 @@
|
|||
class OrderRelationMembers < ActiveRecord::Migration
|
||||
def self.up
|
||||
# add sequence column. rails won't let us define an ordering here,
|
||||
# as defaults must be constant.
|
||||
add_column(:relation_members, :sequence_id, :integer,
|
||||
:default => 0, :null => false)
|
||||
|
||||
# update the sequence column with default (partial) ordering by
|
||||
# element ID. the sequence ID is a smaller int type, so we can't
|
||||
# just copy the member_id.
|
||||
execute("update relation_members set sequence_id = mod(member_id, 16384)")
|
||||
|
||||
# need to update the primary key to include the sequence number,
|
||||
# otherwise the primary key will barf when we have repeated members.
|
||||
# mysql barfs on this anyway, so we need a single command. this may
|
||||
# not work in postgres... needs testing.
|
||||
alter_primary_key("relation_members", [:id, :version, :member_type, :member_id, :member_role, :sequence_id])
|
||||
|
||||
# do the same for the current tables
|
||||
add_column(:current_relation_members, :sequence_id, :integer,
|
||||
:default => 0, :null => false)
|
||||
execute("update current_relation_members set sequence_id = mod(member_id, 16384)")
|
||||
alter_primary_key("current_relation_members", [:id, :member_type, :member_id, :member_role, :sequence_id])
|
||||
end
|
||||
|
||||
def self.down
|
||||
alter_primary_key("current_relation_members", [:id, :member_type, :member_id, :member_role])
|
||||
remove_column :relation_members, :sequence_id
|
||||
|
||||
alter_primary_key("relation_members", [:id, :version, :member_type, :member_id, :member_role])
|
||||
remove_column :current_relation_members, :sequence_id
|
||||
end
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue