| | 210 | ---- |
| | 211 | |
| | 212 | |
| | 213 | = Triggers = |
| | 214 | |
| | 215 | == 1. Update free seats based on ticket purchase == |
| | 216 | |
| | 217 | This trigger calculates the number of available tickets after purchasing a ticket and can be tested via the application, by trying to buy new tickets. |
| | 218 | |
| | 219 | {{{ |
| | 220 | -- TRIGGER TO UPDATE FREE SEATS |
| | 221 | CREATE OR REPLACE FUNCTION update_free_seats() |
| | 222 | RETURNS TRIGGER AS $$ |
| | 223 | BEGIN |
| | 224 | IF TG_OP = 'INSERT' THEN |
| | 225 | UPDATE trip |
| | 226 | SET free_seats = free_seats - 1 |
| | 227 | WHERE trip_id = NEW.trip_id; |
| | 228 | RETURN NEW; |
| | 229 | ELSIF TG_OP = 'DELETE' THEN |
| | 230 | UPDATE trip |
| | 231 | SET free_seats = free_seats + 1 |
| | 232 | WHERE trip_id = OLD.trip_id; |
| | 233 | RETURN OLD; |
| | 234 | END IF; |
| | 235 | RETURN NULL; |
| | 236 | END; |
| | 237 | $$ LANGUAGE plpgsql; |
| | 238 | |
| | 239 | CREATE TRIGGER ticket_insert_update_seats |
| | 240 | AFTER INSERT ON ticket |
| | 241 | FOR EACH ROW |
| | 242 | EXECUTE FUNCTION update_free_seats(); |
| | 243 | |
| | 244 | CREATE TRIGGER ticket_delete_update_seats |
| | 245 | AFTER DELETE ON ticket |
| | 246 | FOR EACH ROW |
| | 247 | EXECUTE FUNCTION update_free_seats(); |
| | 248 | }}} |
| | 249 | |
| | 250 | |
| | 251 | |