From 71e2ffbed322a260e162ad9bf9fe56ce638e7bbc Mon Sep 17 00:00:00 2001 From: Neeraj Kashyap Date: Tue, 21 Nov 2023 10:59:17 -0800 Subject: [PATCH] Modified alembic migration to downgrade properly Previously, the downgrade was hitting a violation of the old unique constraint on leaderboard_scores if multiple versions of scores were stored for the same address. The modified downgrade only retains the score for each address on the latest publich version of each leaderboard. --- ...153_added_leaderboard_versions_table_and_.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/engineapi/alembic/versions/cc80e886e153_added_leaderboard_versions_table_and_.py b/engineapi/alembic/versions/cc80e886e153_added_leaderboard_versions_table_and_.py index 515d638c..b6dff83e 100644 --- a/engineapi/alembic/versions/cc80e886e153_added_leaderboard_versions_table_and_.py +++ b/engineapi/alembic/versions/cc80e886e153_added_leaderboard_versions_table_and_.py @@ -105,6 +105,23 @@ def upgrade(): def downgrade(): + op.execute( + """ + WITH latest_version_for_leaderboard AS ( + SELECT leaderboard_id, MAX(version_number) AS latest_version + FROM leaderboard_versions WHERE published = true + GROUP BY leaderboard_id + ) + DELETE FROM leaderboard_scores WHERE + (leaderboard_id, leaderboard_version_number) NOT IN ( + SELECT + leaderboard_id, + latest_version AS leaderboard_version_number + FROM + latest_version_for_leaderboard + ) + """ + ) # ### commands auto generated by Alembic - please adjust! ### op.drop_constraint( op.f("fk_leaderboard_scores_leaderboard_id_leaderboard_versions"),