| | 202 | === trg_check_venue_schedule |
| | 203 | |
| | 204 | Овој тригер спречува преклопување на два настани во ист објект и во исто време. Пред секој внес или измена во распоредот, базата проверува дали терминот е веќе резервиран за таа локација. |
| | 205 | |
| | 206 | {{{ |
| | 207 | |
| | 208 | CREATE OR REPLACE FUNCTION trg_check_venue_schedule() |
| | 209 | RETURNS TRIGGER AS $$ |
| | 210 | BEGIN |
| | 211 | IF EXISTS ( |
| | 212 | SELECT 1 FROM "Event_Happening" |
| | 213 | WHERE venue_id = NEW.venue_id |
| | 214 | AND event_time = NEW.event_time |
| | 215 | AND event_happening_id <> NEW.event_happening_id |
| | 216 | ) THEN |
| | 217 | RAISE EXCEPTION 'Venue is already occupied at this time.'; |
| | 218 | END IF; |
| | 219 | RETURN NEW; |
| | 220 | END; |
| | 221 | $$ LANGUAGE plpgsql; |
| | 222 | |
| | 223 | CREATE TRIGGER check_venue_before_insert_update |
| | 224 | BEFORE INSERT OR UPDATE ON "Event_Happening" |
| | 225 | FOR EACH ROW EXECUTE FUNCTION trg_check_venue_schedule(); |
| | 226 | |
| | 227 | }}} |
| | 228 | |
| | 229 | === trg_check_performer_availability |
| | 230 | |
| | 231 | Овој тригер гарантира дека еден изведувач не може да биде на две места истовремено. Со поврзување на табелите за изведувачи и настани, системот автоматски го блокира секој обид за дуплирање на ангажманот во ист термин. |
| | 232 | |
| | 233 | {{{ |
| | 234 | |
| | 235 | CREATE OR REPLACE FUNCTION trg_check_performer_availability() |
| | 236 | RETURNS TRIGGER AS $$ |
| | 237 | DECLARE |
| | 238 | v_new_event_time TIMESTAMP; |
| | 239 | BEGIN |
| | 240 | SELECT event_time INTO v_new_event_time |
| | 241 | FROM "Event_Happening" |
| | 242 | WHERE event_happening_id = NEW.event_happening_id; |
| | 243 | |
| | 244 | IF EXISTS ( |
| | 245 | SELECT 1 |
| | 246 | FROM "Event_Happening_Performer" ehp |
| | 247 | JOIN "Event_Happening" eh ON ehp.event_happening_id = eh.event_happening_id |
| | 248 | WHERE ehp.performer_id = NEW.performer_id |
| | 249 | AND eh.event_time = v_new_event_time |
| | 250 | AND ehp.event_happening_id <> NEW.event_happening_id |
| | 251 | ) THEN |
| | 252 | RAISE EXCEPTION 'Performer is already booked for another event at this time.'; |
| | 253 | END IF; |
| | 254 | RETURN NEW; |
| | 255 | END; |
| | 256 | $$ LANGUAGE plpgsql; |
| | 257 | |
| | 258 | CREATE TRIGGER check_performer_before_assign |
| | 259 | BEFORE INSERT OR UPDATE ON "Event_Happening_Performer" |
| | 260 | FOR EACH ROW EXECUTE FUNCTION trg_check_performer_availability(); |
| | 261 | |
| | 262 | }}} |
| | 263 | |