Advertisement
Guest User

Untitled

a guest
Nov 11th, 2018
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE OR REPLACE FUNCTION upd_partners_data() RETURNS TRIGGER AS $partner$
  2.     BEGIN
  3.         IF (TG_OP = 'DELETE') THEN
  4.             UPDATE partner SET couple_id = NULL WHERE id = OLD.partner1_id;
  5.             UPDATE partner SET couple_id = NULL WHERE id = OLD.partner2_id;
  6.             RETURN OLD;
  7.         ELSIF (TG_OP = 'UPDATE' OR TG_OP = 'INSERT') THEN
  8.             UPDATE partner SET name = 'partner1', level = NEW.level, club_id = NEW.club_id, couple_id = NEW.id WHERE id = NEW.partner1_id;
  9.             UPDATE partner SET name = 'partner2', level = NEW.level, club_id = NEW.club_id, couple_id = NEW.id WHERE id = NEW.partner2_id;
  10.             RETURN NEW;
  11.         END IF;
  12.         RETURN NULL; -- возвращаемое значение для триггера AFTER не имеет значения
  13.     END;
  14. $partner$ LANGUAGE plpgsql;
  15.  
  16.  
  17. CREATE TRIGGER partner
  18. AFTER INSERT OR UPDATE OR DELETE ON couples
  19.     FOR EACH ROW EXECUTE PROCEDURE upd_partners_data();
  20.  
  21.  
  22.  
  23.  
  24. CREATE OR REPLACE FUNCTION upd_clubs_data() RETURNS TRIGGER AS $couples$
  25.     BEGIN
  26.         IF (TG_OP = 'DELETE') THEN
  27.             UPDATE clubs SET couples_num = (SELECT couples_num FROM clubs WHERE id = OLD.club_id) - 1,
  28.                 couple_ids = array_remove(couple_ids, OLD.id)  WHERE id = OLD.club_id;
  29.             DELETE FROM global_raiting WHERE couple_id = OLD.id;   
  30.             RETURN OLD;
  31.         ELSIF (TG_OP = 'INSERT') THEN
  32.             UPDATE clubs SET couples_num = (SELECT couples_num FROM clubs WHERE id = NEW.club_id) + 1,
  33.                 couple_ids = array_append(couple_ids, NEW.id) WHERE id = NEW.club_id;
  34.             INSERT INTO global_raiting (couple_id, club_id, score, level) VALUES (NEW.id, NEW.club_id, 0, NEW.level);
  35.             RETURN NEW;
  36.          ELSIF (TG_OP = 'UPDATE') THEN
  37.             UPDATE clubs SET couples_num = (SELECT couples_num FROM clubs WHERE id = NEW.club_id) + 1,
  38.                 couple_ids = array_append(couple_ids, NEW.id) WHERE id = NEW.club_id;
  39.             UPDATE clubs SET couples_num = (SELECT couples_num FROM clubs WHERE id = OLD.club_id) - 1,
  40.                 couple_ids = array_remove(couple_ids, OLD.id) WHERE id = OLD.club_id;
  41.             UPDATE global_raiting SET club_id = NEW.club_id WHERE couple_id = NEW.id;
  42.             RETURN NEW;
  43.         END IF;
  44.         RETURN NULL; -- возвращаемое значение для триггера AFTER не имеет значения
  45.     END;
  46. $couples$ LANGUAGE plpgsql;
  47.  
  48.  
  49. CREATE TRIGGER couple_club_upd
  50. AFTER INSERT OR UPDATE OR DELETE ON couples
  51.     FOR EACH ROW EXECUTE PROCEDURE upd_clubs_data();
  52.  
  53.  
  54. CREATE OR REPLACE FUNCTION upd_trainer_data_for_clubs() RETURNS TRIGGER AS $trainers$
  55.     BEGIN
  56.         IF (TG_OP = 'DELETE') THEN
  57.             UPDATE clubs SET trainer_ids = array_remove(trainer_ids, OLD.id)  WHERE id = OLD.club_id;  
  58.             RETURN OLD;
  59.         ELSIF (TG_OP = 'INSERT') THEN
  60.             UPDATE clubs SET trainer_ids = array_append(trainer_ids, NEW.id)  WHERE id = NEW.club_id;
  61.             RETURN NEW;
  62.          ELSIF (TG_OP = 'UPDATE') THEN
  63.             UPDATE clubs SET trainer_ids = array_append(trainer_ids, NEW.id) WHERE id = NEW.club_id;
  64.             UPDATE clubs SET trainer_ids = array_remove(trainer_ids, OLD.id) WHERE id = OLD.club_id;
  65.             RETURN NEW;
  66.         END IF;
  67.         RETURN NULL; -- возвращаемое значение для триггера AFTER не имеет значения
  68.     END;
  69. $trainers$ LANGUAGE plpgsql;
  70.  
  71.  
  72. CREATE TRIGGER upd_trainer_data_for_clubs
  73. AFTER INSERT OR UPDATE OR DELETE ON trainers
  74.     FOR EACH ROW EXECUTE PROCEDURE upd_trainer_data_for_clubs();
  75.  
  76.  
  77.  
  78. CREATE OR REPLACE FUNCTION upd_shedule_data_for_comps() RETURNS TRIGGER AS $competition_groups_shedule$
  79.     BEGIN
  80.         IF (TG_OP = 'DELETE') THEN
  81.             UPDATE competitions_shedule SET group_shedule_ids = array_remove(group_shedule_ids, OLD.id)  WHERE id = OLD.comp_id;  
  82.             RETURN OLD;
  83.         ELSIF (TG_OP = 'INSERT') THEN
  84.             UPDATE competitions_shedule SET group_shedule_ids = array_append(group_shedule_ids, NEW.id)  WHERE id = NEW.comp_id;
  85.             RETURN NEW;
  86.          ELSIF (TG_OP = 'UPDATE') THEN
  87.             UPDATE competitions_shedule SET group_shedule_ids = array_append(group_shedule_ids, NEW.id) WHERE id = NEW.comp_id;
  88.             UPDATE competitions_shedule SET group_shedule_ids = array_remove(group_shedule_ids, OLD.id) WHERE id = OLD.comp_id;
  89.             RETURN NEW;
  90.         END IF;
  91.         RETURN NULL; -- возвращаемое значение для триггера AFTER не имеет значения
  92.     END;
  93. $competition_groups_shedule$ LANGUAGE plpgsql;
  94.  
  95. CREATE TRIGGER upd_shedule_data_for_comps
  96. AFTER INSERT OR UPDATE OR DELETE ON competition_groups_shedule
  97.     FOR EACH ROW EXECUTE PROCEDURE upd_shedule_data_for_comps();
  98.  
  99.  
  100.  
  101. CREATE OR REPLACE FUNCTION upd_results_data_for_comps() RETURNS TRIGGER AS $competition_groups_results$
  102.     BEGIN
  103.         IF (TG_OP = 'DELETE') THEN
  104.             UPDATE competitions_shedule SET group_results_ids = array_remove(group_results_ids, OLD.id)  WHERE id = OLD.comp_id;  
  105.             RETURN OLD;
  106.         ELSIF (TG_OP = 'INSERT') THEN
  107.             UPDATE competitions_shedule SET group_results_ids = array_append(group_results_ids, NEW.id)  WHERE id = NEW.comp_id;
  108.             RETURN NEW;
  109.          ELSIF (TG_OP = 'UPDATE') THEN
  110.             UPDATE competitions_shedule SET group_results_ids = array_append(group_results_ids, NEW.id) WHERE id = NEW.comp_id;
  111.             UPDATE competitions_shedule SET group_results_ids = array_remove(group_results_ids, OLD.id) WHERE id = OLD.comp_id;
  112.             RETURN NEW;
  113.         END IF;
  114.         RETURN NULL; -- возвращаемое значение для триггера AFTER не имеет значения
  115.     END;
  116. $competition_groups_results$ LANGUAGE plpgsql;
  117.  
  118. CREATE TRIGGER upd_results_data_for_comps
  119. AFTER INSERT OR UPDATE OR DELETE ON competition_groups_results
  120.     FOR EACH ROW EXECUTE PROCEDURE upd_results_data_for_comps();
  121.    
  122.  
  123. CREATE OR REPLACE FUNCTION upd_result_data_for_comp_results() RETURNS TRIGGER AS $global_comp_group_result_table$
  124.     BEGIN
  125.         IF (TG_OP = 'DELETE') THEN
  126.             UPDATE competition_groups_results SET group_results_ids = array_remove(group_results_ids, OLD.id)  WHERE id = OLD.group_results_id;  
  127.             RETURN OLD;
  128.         ELSIF (TG_OP = 'INSERT') THEN
  129.             UPDATE competition_groups_results SET group_results_ids = array_append(group_results_ids, NEW.id)  WHERE id = NEW.group_results_id;
  130.             IF (EXISTS (SELECT 1 FROM global_raiting WHERE couple_id = NEW.couple_id)) THEN
  131.                 UPDATE global_raiting SET score = (SELECT score FROM global_raiting WHERE couple_id = NEW.couple_id) + NEW.score WHERE couple_id = NEW.couple_id; -- проверить скор на нулл?
  132.             ELSE
  133.                 INSERT INTO global_raiting (couple_id, club_id, score, level) VALUES (NEW.couple_id,
  134.                     (SELECT club_id FROM couples WHERE id = NEW.couple_id),
  135.                     NEW.score,
  136.                     (SELECT level FROM couples WHERE id = NEW.couple_id)
  137.                     );
  138.             END IF;
  139.             RETURN NEW;
  140.          ELSIF (TG_OP = 'UPDATE') THEN
  141.             UPDATE competition_groups_results SET group_results_ids = array_append(group_results_ids, NEW.id) WHERE id = NEW.group_results_id;
  142.             UPDATE global_raiting SET score = (SELECT score FROM global_raiting WHERE couple_id = OLD.couple_id) - OLD.score WHERE couple_id = OLD.couple_id;
  143.             UPDATE competition_groups_results SET group_results_ids = array_remove(group_results_ids, OLD.id) WHERE id = OLD.group_results_id;
  144.             UPDATE global_raiting SET score = (SELECT score FROM global_raiting WHERE couple_id = NEW.couple_id) + NEW.score WHERE couple_id = NEW.couple_id;
  145.             RETURN NEW;
  146.         END IF;
  147.         RETURN NULL; -- возвращаемое значение для триггера AFTER не имеет значения
  148.     END;
  149. $global_comp_group_result_table$ LANGUAGE plpgsql;
  150.  
  151. CREATE TRIGGER upd_result_data_for_comp_results
  152. AFTER INSERT OR UPDATE OR DELETE ON global_comp_group_result_table
  153.     FOR EACH ROW EXECUTE PROCEDURE upd_result_data_for_comp_results();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement