Skip to content

Commit 447a007

Browse files
committed
Fix migration
1 parent 42102a1 commit 447a007

File tree

2 files changed

+57
-41
lines changed

2 files changed

+57
-41
lines changed

db/migrate/20230306071028_add_discription_to_contest.rb renamed to db/migrate/20230306071028_add_description_to_contest.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
class AddDiscriptionToContest < ActiveRecord::Migration[7.0]
1+
class AddDescriptionToContest < ActiveRecord::Migration[7.0]
22
def change
33
add_column :contests, :description_before_contest, :mediumtext
44
Contest.update_all("description_before_contest = description")
Lines changed: 56 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,64 @@
11
class MigrateOldResults < ActiveRecord::Migration[7.0]
2-
def up
3-
Submission.where(contest_id: nil).where.not(old_result: nil).find_in_batches do |lst|
4-
data = lst.map {|s|
5-
{
6-
submission_id: s.id,
7-
problem_id: s.problem_id,
8-
result: s.old_result,
9-
score: s.old_score,
10-
time: s.old_time,
11-
memory: s.old_memory,
12-
}
13-
}
14-
OldSubmission.import(data)
15-
end
16-
mp = OldSubmission.pluck(:submission_id, :id).to_h
17-
mp.values.each_slice(256).each {|lst|
18-
data = SubmissionTask.where(submission_id: lst).where.not(old_result: nil).map { |s|
19-
{
20-
old_submission_id: mp[s.submission_id],
21-
position: s.position,
22-
result: s.old_result,
23-
score: s.old_score,
24-
time: s.old_time,
25-
memory: s.old_memory,
26-
}
27-
}
28-
OldSubmissionTask.import(data)
29-
}
30-
31-
add_index :old_submissions, [:problem_id, :result]
2+
def change
323
remove_index :submissions, [:contest_id, :new_rejudged, :result]
334
remove_index :submissions, [:contest_id, :new_rejudged, :id]
345
remove_index :submissions, [:contest_id, :user_id, :problem_id, :old_result], name: :index_submissions_old_user_query
356
remove_index :submissions, [:contest_id, :user_id, :result, :old_result], name: :index_submissions_old_user_result
367
remove_index :submissions, [:contest_id, :user_id, :result, :old_result, :problem_id], name: :index_submissions_old_user_problem_result
37-
remove_column :submission_tasks, :old_result
38-
remove_column :submission_tasks, :old_score
39-
remove_column :submission_tasks, :old_time
40-
remove_column :submission_tasks, :old_memory
41-
remove_column :submissions, :old_result
42-
remove_column :submissions, :old_score
43-
remove_column :submissions, :old_time
44-
remove_column :submissions, :old_memory
45-
remove_column :submissions, :new_rejudged
46-
remove_column :problems, :old_pid
8+
9+
reversible do |direction|
10+
direction.up do
11+
execute %{
12+
INSERT INTO old_submissions
13+
(submission_id, problem_id, result, score, time, memory, created_at, updated_at)
14+
SELECT id, problem_id, old_result, old_score, old_time, old_memory, NOW(), NOW()
15+
FROM submissions
16+
WHERE contest_id IS NULL AND old_result IS NOT NULL
17+
}
18+
execute %{
19+
INSERT INTO old_submission_tasks
20+
(old_submission_id, position, result, score, time, memory, created_at, updated_at)
21+
SELECT old_submissions.id, submission_tasks.position, submission_tasks.old_result,
22+
submission_tasks.old_score, submission_tasks.old_time, submission_tasks.old_memory, NOW(), NOW()
23+
FROM submission_tasks
24+
INNER JOIN old_submissions ON submission_tasks.submission_id = old_submissions.submission_id
25+
WHERE submission_tasks.old_result IS NOT NULL
26+
}
27+
end
28+
direction.down do
29+
execute %{
30+
UPDATE submissions,
31+
(SELECT submission_id, result, score, time, memory FROM old_submissions) AS t
32+
SET submissions.old_result = t.result, submissions.old_score = t.score,
33+
submissions.old_time = t.time, submissions.old_memory = t.memory
34+
WHERE submissions.id = t.submission_id
35+
}
36+
execute %{
37+
UPDATE submission_tasks,
38+
(SELECT old_submissions.submission_id, old_submission_tasks.position,
39+
old_submission_tasks.result, old_submission_tasks.score,
40+
old_submission_tasks.time, old_submission_tasks.memory
41+
FROM old_submission_tasks
42+
INNER JOIN old_submissions ON old_submissions.id = old_submission_tasks.old_submission_id
43+
) AS t
44+
SET submission_tasks.old_result = t.result, submission_tasks.old_score = t.score,
45+
submission_tasks.old_time = t.time, submission_tasks.old_memory = t.memory
46+
WHERE submission_tasks.submission_id = t.submission_id AND
47+
submission_tasks.position = t.position
48+
}
49+
end
50+
end
51+
52+
add_index :old_submissions, [:problem_id, :result]
53+
remove_column :submission_tasks, :old_result, :string
54+
remove_column :submission_tasks, :old_score, :decimal, precision: 18, scale: 6
55+
remove_column :submission_tasks, :old_time, :integer
56+
remove_column :submission_tasks, :old_memory, :integer
57+
remove_column :submissions, :old_result, :string
58+
remove_column :submissions, :old_score, :decimal, precision: 18, scale: 6
59+
remove_column :submissions, :old_time, :integer
60+
remove_column :submissions, :old_memory, :integer
61+
remove_column :submissions, :new_rejudged, :boolean
62+
remove_column :problems, :old_pid, :integer
4763
end
4864
end

0 commit comments

Comments
 (0)