You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
educoder/db/migrate/20190620015912_modify_colla...

52 lines
3.9 KiB

class ModifyCollaIndex < ActiveRecord::Migration[5.2]
def change
remove_index :exercise_users, [:user_id, :exercise_id] if index_exists?(:exercise_users, [:user_id, :exercise_id])
remove_index :exercise_users, [:exercise_id, :user_id] if index_exists?(:exercise_users, [:exercise_id, :user_id])
sql = %Q(delete from exercise_users where (user_id, exercise_id) in
(select * from (select user_id, exercise_id from exercise_users group by user_id, exercise_id having count(*) > 1) a)
and id not in (select * from (select min(id) from exercise_users group by user_id, exercise_id having count(*) > 1 order by id) b))
ActiveRecord::Base.connection.execute sql
add_index :exercise_users, [:exercise_id, :user_id], unique: true, name: "index_on_exercise_id_user_id"
remove_index :exercise_shixun_answers, :user_id
remove_index :student_works, [:user_id, :homework_common_id] if index_exists?(:student_works, [:user_id, :homework_common_id])
remove_index :student_works, [:homework_common_id, :user_id] if index_exists?(:student_works, [:homework_common_id, :user_id])
sql = %Q(delete from student_works where (user_id, homework_common_id) in
(select * from (select user_id, homework_common_id from student_works group by user_id, homework_common_id having count(*) > 1) a)
and id not in (select * from (select min(id) from student_works group by user_id, homework_common_id having count(*) > 1 order by id) b))
ActiveRecord::Base.connection.execute sql
add_index :student_works, [:homework_common_id, :user_id], unique: true, name: "index_on_homework_common_id_user_id"
remove_index :poll_users, [:user_id, :poll_id] if index_exists?(:poll_users, [:user_id, :poll_id])
remove_index :poll_users, [:poll_id, :user_id] if index_exists?(:poll_users, [:poll_id, :user_id])
sql = %Q(delete from poll_users where (user_id, poll_id) in
(select * from (select user_id, poll_id from poll_users group by user_id, poll_id having count(*) > 1) a) and
id not in (select * from (select min(id) from poll_users group by user_id, poll_id having count(*) > 1 order by id) b))
ActiveRecord::Base.connection.execute sql
add_index :poll_users, [:poll_id, :user_id], unique: true, name: "index_poll_id_and_user_id"
remove_index :graduation_works, [:user_id, :graduation_task_id] if index_exists?(:graduation_works, [:user_id, :graduation_task_id])
remove_index :graduation_works, [:graduation_task_id, :user_id] if index_exists?(:graduation_works, [:graduation_task_id, :user_id])
sql = %Q(delete from graduation_works where (user_id, graduation_task_id) in
(select * from (select user_id, graduation_task_id from graduation_works group by user_id, graduation_task_id having count(*) > 1) a) and
id not in (select * from (select min(id) from graduation_works group by user_id, graduation_task_id having count(*) > 1 order by id) b))
ActiveRecord::Base.connection.execute sql
add_index :graduation_works, [:graduation_task_id, :user_id], unique: true, name: "index_graduation_task_id_and_user_id"
remove_index :course_members, [:user_id, :course_id, :role] if index_exists?(:course_members, [:user_id, :course_id, :role])
remove_index :course_members, :course_id if index_exists?(:course_members, :course_id)
remove_index :course_members, :user_id if index_exists?(:course_members, :user_id)
sql = %Q(delete from course_members where (course_id, user_id, role) in
(select * from (select course_id, user_id, role from course_members group by course_id, user_id, role having count(*) > 1) a)
and id not in (select * from (select min(id) from course_members group by course_id, user_id, role having count(*) > 1 order by id) b))
ActiveRecord::Base.connection.execute sql
add_index :course_members, [:course_id, :user_id, :role], unique: true, name: "index_course_id_user_id_role"
end
end