From d2f07f99ba5dbb047722e43d29b8d552a768726e Mon Sep 17 00:00:00 2001 From: Anton Bagliy <taccessviolation@gmail.com> Date: Fri, 19 Apr 2019 16:13:44 +0300 Subject: [PATCH] ADD: discipline_clear and discipline_delete functions #416 --- db/postgresql/issue416_delete_discipline.sql | 95 ++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 db/postgresql/issue416_delete_discipline.sql diff --git a/db/postgresql/issue416_delete_discipline.sql b/db/postgresql/issue416_delete_discipline.sql new file mode 100644 index 000000000..14efd6b7d --- /dev/null +++ b/db/postgresql/issue416_delete_discipline.sql @@ -0,0 +1,95 @@ +DROP FUNCTION IF EXISTS public.discipline_clear(pauthorteacherid integer, pdisciplineid integer); +CREATE OR REPLACE FUNCTION public.discipline_clear(pauthorteacherid integer, pdisciplineid integer) + RETURNS integer + LANGUAGE plpgsql +AS $function$ +declare vRow int; +BEGIN + if NOT InternalIsTeacherAuthor(pAuthorTeacherID, pDisciplineID) THEN + RETURN -1; + END if; + + + -- clear logs + DELETE FROM logs_rating + WHERE logs_rating.SubmoduleID IN + (SELECT view_roadmap.SubmoduleID + FROM view_roadmap + WHERE view_roadmap.DisciplineID = pDisciplineID); + + -- clear rating + DELETE FROM rating_table + WHERE rating_table.SubmoduleID IN + (SELECT view_roadmap.SubmoduleID + FROM view_roadmap + WHERE view_roadmap.DisciplineID = pDisciplineID); + + -- clear exam_period_options + DELETE FROM exam_period_options + WHERE exam_period_options.SubmoduleID IN + (SELECT view_roadmap.SubmoduleID + FROM view_roadmap + WHERE view_roadmap.DisciplineID = pDisciplineID); + + -- unlock discipline + UPDATE disciplines + SET IsLocked = 0 + WHERE ID = pDisciplineID; + --LIMIT 1; + get diagnostics vRow=ROW_COUNT; + RETURN vRow-1; +END +$function$; + +DROP FUNCTION IF EXISTS public.discipline_delete(pdisciplineid integer); +CREATE OR REPLACE FUNCTION public.discipline_delete(pdisciplineid integer) + RETURNS integer + LANGUAGE plpgsql +AS $function$ +declare pauthorid int; +declare vTemp int; +begin +-- select public.discipline_delete( +-- :pdisciplineid -- put the pdisciplineid parameter value instead of 'pdisciplineid' (int4) +--); + + select authorid into pauthorid from disciplines where id=pdisciplineid; + select discipline_clear(pauthorid, pdisciplineid) into vTemp; + + -- delete roadmap + DELETE FROM submodules + WHERE submodules.moduleID in ( + select modules.id FROM modules + WHERE modules.DisciplineID = pDisciplineID + ); + + DELETE FROM modules + WHERE modules.DisciplineID = pDisciplineID; + + -- detach all entities from discipline + DELETE FROM disciplines_teachers + WHERE disciplines_teachers.DisciplineID = pDisciplineID; + DELETE FROM disciplines_students + WHERE disciplines_students.DisciplineID = pDisciplineID; + DELETE FROM disciplines_groups + WHERE disciplines_groups.DisciplineID = pDisciplineID; + + DELETE FROM logs_binds_groups + WHERE logs_binds_groups.DisciplineID = pDisciplineID; + DELETE FROM logs_binds_students + WHERE logs_binds_students.DisciplineID = pDisciplineID; + + --new logs to delete + delete from logs_discipline_forms + where logs_discipline_forms.discipline_id = pDisciplineID; + delete from logs_form_export + where logs_form_export.discipline_id = pDisciplineID; + + -- delete discipline + DELETE FROM disciplines + WHERE disciplines.ID = pDisciplineID; + --LIMIT 1; + + RETURN 0; +END; +$function$; \ No newline at end of file -- GitLab