]> git.openstreetmap.org Git - rails.git/commitdiff
Merge pull request #4300 from tomhughes/relation-members-primary-key
authorAndy Allan <git@gravitystorm.co.uk>
Thu, 26 Oct 2023 18:40:57 +0000 (19:40 +0100)
committerGitHub <noreply@github.com>
Thu, 26 Oct 2023 18:40:57 +0000 (19:40 +0100)
Simplify primary key for relation members tables

app/models/old_relation_member.rb
app/models/relation_member.rb
db/migrate/20231010194809_correct_relation_members_primary_key.rb [new file with mode: 0644]
db/structure.sql
test/controllers/api/relations_controller_test.rb
test/factories/old_relation_member.rb
test/factories/relation_member.rb

index 4264e022164d8a0acbaed1c3719f21be957c0fc3..5a11566059c94c5479018928e3a6096567805a71 100644 (file)
@@ -20,7 +20,6 @@
 
 class OldRelationMember < ApplicationRecord
   self.table_name = "relation_members"
-  self.primary_key = %w[relation_id version sequence_id]
 
   belongs_to :old_relation, :query_constraints => [:relation_id, :version], :inverse_of => :old_members
   # A bit messy, referring to the current tables, should do for the data browser for now
index 8ff825cee5e3a8105b784f0faa483638cc7361a1..2b72cd2b182595bd6f6abb2d138559c700572103 100644 (file)
@@ -19,7 +19,6 @@
 
 class RelationMember < ApplicationRecord
   self.table_name = "current_relation_members"
-  self.primary_key = %w[relation_id sequence_id]
 
   belongs_to :relation
   belongs_to :member, :polymorphic => true
diff --git a/db/migrate/20231010194809_correct_relation_members_primary_key.rb b/db/migrate/20231010194809_correct_relation_members_primary_key.rb
new file mode 100644 (file)
index 0000000..0987083
--- /dev/null
@@ -0,0 +1,11 @@
+class CorrectRelationMembersPrimaryKey < ActiveRecord::Migration[7.0]
+  def up
+    alter_primary_key :current_relation_members, [:relation_id, :sequence_id]
+    alter_primary_key :relation_members, [:relation_id, :version, :sequence_id]
+  end
+
+  def down
+    alter_primary_key :relation_members, [:relation_id, :version, :member_type, :member_id, :member_role, :sequence_id]
+    alter_primary_key :current_relation_members, [:relation_id, :member_type, :member_id, :member_role, :sequence_id]
+  end
+end
index 467d5143cc427a0a9ad45190b9c260a7c6b7ee10..17f2696667d343f796e7b9917e1278bcf4f82f18 100644 (file)
@@ -1883,7 +1883,7 @@ ALTER TABLE ONLY public.current_nodes
 --
 
 ALTER TABLE ONLY public.current_relation_members
-    ADD CONSTRAINT current_relation_members_pkey PRIMARY KEY (relation_id, member_type, member_id, member_role, sequence_id);
+    ADD CONSTRAINT current_relation_members_pkey PRIMARY KEY (relation_id, sequence_id);
 
 
 --
@@ -2107,7 +2107,7 @@ ALTER TABLE ONLY public.redactions
 --
 
 ALTER TABLE ONLY public.relation_members
-    ADD CONSTRAINT relation_members_pkey PRIMARY KEY (relation_id, version, member_type, member_id, member_role, sequence_id);
+    ADD CONSTRAINT relation_members_pkey PRIMARY KEY (relation_id, version, sequence_id);
 
 
 --
@@ -3437,6 +3437,7 @@ INSERT INTO "schema_migrations" (version) VALUES
 ('23'),
 ('22'),
 ('21'),
+('20231010194809'),
 ('20231007141103'),
 ('20230830115220'),
 ('20230830115219'),
index 7d011c17ff3678c76dce61c391cee4acf7ddaf4a..cdef1f5bac8dea5da047f9c10c6bc527cbfd2c89 100644 (file)
@@ -102,7 +102,7 @@ module Api
       second_relation = create(:relation_member, :member => node).relation
       _super_relation = create(:relation_member, :member => second_relation).relation
       # should combine multiple relation_member references into just one relation entry
-      create(:relation_member, :member => node, :relation => relation_with_node, :sequence_id => 2)
+      create(:relation_member, :member => node, :relation => relation_with_node)
       # should not include deleted relations
       deleted_relation = create(:relation, :deleted)
       create(:relation_member, :member => node, :relation => deleted_relation)
@@ -122,7 +122,7 @@ module Api
       second_relation = create(:relation_member, :member => way).relation
       _super_relation = create(:relation_member, :member => second_relation).relation
       # should combine multiple relation_member references into just one relation entry
-      create(:relation_member, :member => way, :relation => relation_with_way, :sequence_id => 2)
+      create(:relation_member, :member => way, :relation => relation_with_way)
       # should not include deleted relations
       deleted_relation = create(:relation, :deleted)
       create(:relation_member, :member => way, :relation => deleted_relation)
@@ -142,7 +142,7 @@ module Api
       second_relation = create(:relation_member, :member => relation).relation
       _super_relation = create(:relation_member, :member => second_relation).relation
       # should combine multiple relation_member references into just one relation entry
-      create(:relation_member, :member => relation, :relation => relation_with_relation, :sequence_id => 2)
+      create(:relation_member, :member => relation, :relation => relation_with_relation)
       # should not include deleted relations
       deleted_relation = create(:relation, :deleted)
       create(:relation_member, :member => relation, :relation => deleted_relation)
index 99305cd98bfff94126522bf6df200a51c15f6a72..34e0bd310f84c5f8fc5f9b0557a393b75390bb60 100644 (file)
@@ -1,5 +1,6 @@
 FactoryBot.define do
   factory :old_relation_member do
+    sequence(:sequence_id)
     member_role { "" }
 
     old_relation
index bba2e76330d93cadedf45ae41cabd613fbe98a69..f8e14905e36cd805b9eab2f86607ab81f8857c3b 100644 (file)
@@ -1,5 +1,6 @@
 FactoryBot.define do
   factory :relation_member do
+    sequence(:sequence_id)
     member_role { "" }
 
     relation