| 143 | | === `trg_check_ticket_availability` |
| 144 | | |
| 145 | | Овој тригер служи како безбедносен механизам кој пред секое купување проверува дали билетот е навистина слободен. Доколку билетот е веќе продаден, тригерот ја блокира трансакцијата и фрла грешка, со што се спречува конфликт на податоци. |
| 146 | | |
| 147 | | {{{ |
| 148 | | |
| 149 | | CREATE OR REPLACE FUNCTION trg_check_ticket_availability() |
| 150 | | RETURNS TRIGGER AS $$ |
| 151 | | BEGIN |
| 152 | | IF (SELECT is_available FROM "Ticket" WHERE ticket_id = NEW.ticket_id) = FALSE THEN |
| 153 | | RAISE EXCEPTION 'Ticket is already sold or unavailable.'; |
| 154 | | END IF; |
| 155 | | RETURN NEW; |
| 156 | | END; |
| 157 | | $$ LANGUAGE plpgsql; |
| 158 | | |
| 159 | | CREATE TRIGGER check_ticket_availability_before_buy |
| 160 | | BEFORE INSERT ON "Ticket_Purchase" |
| 161 | | FOR EACH ROW EXECUTE FUNCTION trg_check_ticket_availability(); |
| 162 | | |
| 163 | | }}} |
| 164 | | |