]> source.dussan.org Git - redmine.git/commitdiff
Enforced unicity of relations between 2 issues with a database index (#9685).
authorEtienne Massip <etienne.massip@gmail.com>
Sat, 3 Dec 2011 12:12:53 +0000 (12:12 +0000)
committerEtienne Massip <etienne.massip@gmail.com>
Sat, 3 Dec 2011 12:12:53 +0000 (12:12 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@8041 e93f8b46-1217-0410-a6f0-8f06a7374b81

db/migrate/20111201201315_add_unique_index_to_issue_relations.rb [new file with mode: 0644]

diff --git a/db/migrate/20111201201315_add_unique_index_to_issue_relations.rb b/db/migrate/20111201201315_add_unique_index_to_issue_relations.rb
new file mode 100644 (file)
index 0000000..2ee9adb
--- /dev/null
@@ -0,0 +1,16 @@
+class AddUniqueIndexToIssueRelations < ActiveRecord::Migration\r
+  def self.up\r
+\r
+    # Remove duplicates\r
+    IssueRelation.connection.select_values("SELECT r.id FROM #{IssueRelation.table_name} r" +\r
+      " WHERE r.id > (SELECT min(r1.id) FROM #{IssueRelation.table_name} r1 WHERE r1.issue_from_id = r.issue_from_id AND r1.issue_to_id = r.issue_to_id)").each do |i|\r
+        IssueRelation.delete_all(["id = ?", i])\r
+    end\r
+\r
+    add_index :issue_relations, [:issue_from_id, :issue_to_id], :unique => true\r
+  end\r
+\r
+  def self.down\r
+    remove_index :issue_relations, :column => [:issue_from_id, :issue_to_id]\r
+  end\r
+end\r