From 5e90a93f9da76186650cd05302064e020c2da7f7 Mon Sep 17 00:00:00 2001 From: Sebastian Serth Date: Thu, 22 Sep 2022 10:17:48 +0200 Subject: [PATCH] Add script to migrate duplicated study groups --- db/scripts/migrate_study_group.sql | 43 ++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 db/scripts/migrate_study_group.sql diff --git a/db/scripts/migrate_study_group.sql b/db/scripts/migrate_study_group.sql new file mode 100644 index 00000000..ada76c8f --- /dev/null +++ b/db/scripts/migrate_study_group.sql @@ -0,0 +1,43 @@ +CREATE OR REPLACE FUNCTION migrate_study_group(target_study_group int, duplicated_study_group int) + RETURNS VOID + LANGUAGE plpgsql +AS +$$ +DECLARE + +BEGIN + IF target_study_group = duplicated_study_group THEN + RETURN; + END IF; + + UPDATE community_solution_contributions SET study_group_id = target_study_group WHERE study_group_id = duplicated_study_group; + UPDATE remote_evaluation_mappings SET study_group_id = target_study_group WHERE study_group_id = duplicated_study_group; + UPDATE authentication_tokens SET study_group_id = target_study_group WHERE study_group_id = duplicated_study_group; + UPDATE subscriptions SET study_group_id = target_study_group WHERE study_group_id = duplicated_study_group; + UPDATE submissions SET study_group_id = target_study_group WHERE study_group_id = duplicated_study_group; + + -- Preventing duplicated entries in exercises_proxy_exercises + -- The same proxy exercise should not have two entries for the same exercise it proxies. + DELETE + FROM study_group_memberships + WHERE study_group_id = duplicated_study_group + AND id IN (SELECT duplicated.id + FROM study_group_memberships AS target, + study_group_memberships AS duplicated + WHERE target.study_group_id = target_study_group + AND duplicated.study_group_id = duplicated_study_group + AND target.user_id = duplicated.user_id + AND target.user_type = duplicated.user_type); + UPDATE study_group_memberships SET study_group_id = target_study_group where study_group_id = duplicated_study_group; + + DELETE FROM study_groups WHERE id = duplicated_study_group; +END; +$$; + +/* Execute migration +do $$ +begin + perform migrate_study_group(target_study_group := 237, duplicated_study_group := 695); +end +$$; +*/