mirror of
				https://github.com/redmine/redmine.git
				synced 2025-10-30 18:06:30 +01:00 
			
		
		
		
	Adds a unique index on members (#6826).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@4369 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
		
							
								
								
									
										20
									
								
								db/migrate/20101104182107_add_unique_index_on_members.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								db/migrate/20101104182107_add_unique_index_on_members.rb
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | |||||||
|  | class AddUniqueIndexOnMembers < ActiveRecord::Migration | ||||||
|  |   def self.up | ||||||
|  |     # Reassign MemberRole rows if needed | ||||||
|  |     MemberRole.update_all("member_id =" + | ||||||
|  |       " (SELECT min(m2.id) FROM #{Member.table_name} m1, #{Member.table_name} m2" + | ||||||
|  |       " WHERE m1.user_id = m2.user_id AND m1.project_id = m2.project_id" + | ||||||
|  |       " AND m1.id = #{MemberRole.table_name}.member_id)") | ||||||
|  |     # Remove duplicates | ||||||
|  |     Member.connection.select_values("SELECT m.id FROM #{Member.table_name} m" + | ||||||
|  |       " WHERE m.id > (SELECT min(m1.id) FROM #{Member.table_name} m1 WHERE m1.user_id = m.user_id AND m1.project_id = m.project_id)").each do |i| | ||||||
|  |         Member.delete_all(["id = ?", i]) | ||||||
|  |       end | ||||||
|  |      | ||||||
|  |     # Then add a unique index | ||||||
|  |     add_index :members, [:user_id, :project_id], :unique => true | ||||||
|  |   end | ||||||
|  |  | ||||||
|  |   def self.down | ||||||
|  |   end | ||||||
|  | end | ||||||
		Reference in New Issue
	
	Block a user