Changes between Version 5 and Version 6 of Trigger Functions
- Timestamp:
- 05/13/26 19:57:09 (13 days ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
Trigger Functions
v5 v6 15 15 === SQL Code === 16 16 17 <pre> 18 17 {{{ 18 #!sql 19 19 CREATE OR REPLACE FUNCTION check_venue_booking_overlap() 20 20 RETURNS TRIGGER AS $$ 21 21 BEGIN 22 IF NEW.end_time <= NEW.start_time THEN 23 RAISE EXCEPTION 'Invalid venue booking interval: end_time must be after start_time.'; 24 END IF; 25 22 26 IF EXISTS ( 23 27 SELECT 1 24 FROM venue_booking 25 WHERE v enue_id = NEW.venue_id26 AND "date" = NEW."date"27 AND booking_id <> COALESCE(NEW.booking_id, -1)28 FROM venue_booking vb 29 WHERE vb.venue_id = NEW.venue_id 30 AND vb.status <> 'cancelled' 31 AND vb.booking_id <> COALESCE(NEW.booking_id, -1) 28 32 AND ( 29 NEW.start_time < end_time30 AND NEW.end_time > start_time33 (NEW."date" + NEW.start_time) < (vb."date" + vb.end_time) 34 AND (NEW."date" + NEW.end_time) > (vb."date" + vb.start_time) 31 35 ) 32 36 ) THEN 33 RAISE EXCEPTION 'Venue is already booked for this time interval.';37 RAISE EXCEPTION 'Venue is already booked for this date and time interval.'; 34 38 END IF; 35 39 … … 38 42 $$ LANGUAGE plpgsql; 39 43 44 DROP TRIGGER IF EXISTS trg_venue_booking_overlap ON venue_booking; 45 40 46 CREATE TRIGGER trg_venue_booking_overlap 41 47 BEFORE INSERT OR UPDATE ON venue_booking 42 48 FOR EACH ROW 43 49 EXECUTE FUNCTION check_venue_booking_overlap(); 44 45 </pre> 50 }}} 46 51 47 52 == 2. Photographer Booking Conflict Prevention == … … 53 58 === SQL Code === 54 59 55 <pre> 56 60 {{{ 61 #!sql 57 62 CREATE OR REPLACE FUNCTION check_photographer_booking_overlap() 58 63 RETURNS TRIGGER AS $$ 59 64 BEGIN 65 IF NEW.end_time <= NEW.start_time THEN 66 RAISE EXCEPTION 'Invalid photographer booking interval: end_time must be after start_time.'; 67 END IF; 68 60 69 IF EXISTS ( 61 70 SELECT 1 62 FROM photographer_booking 63 WHERE p hotographer_id = NEW.photographer_id64 AND "date" = NEW."date"65 AND booking_id <> COALESCE(NEW.booking_id, -1)71 FROM photographer_booking pb 72 WHERE pb.photographer_id = NEW.photographer_id 73 AND pb.status <> 'cancelled' 74 AND pb.booking_id <> COALESCE(NEW.booking_id, -1) 66 75 AND ( 67 NEW.start_time < end_time68 AND NEW.end_time > start_time76 (NEW."date" + NEW.start_time) < (pb."date" + pb.end_time) 77 AND (NEW."date" + NEW.end_time) > (pb."date" + pb.start_time) 69 78 ) 70 79 ) THEN 71 RAISE EXCEPTION 'Photographer is already booked for this time interval.';80 RAISE EXCEPTION 'Photographer is already booked for this date and time interval.'; 72 81 END IF; 73 82 … … 76 85 $$ LANGUAGE plpgsql; 77 86 87 DROP TRIGGER IF EXISTS trg_photographer_booking_overlap ON photographer_booking; 88 78 89 CREATE TRIGGER trg_photographer_booking_overlap 79 90 BEFORE INSERT OR UPDATE ON photographer_booking 80 91 FOR EACH ROW 81 92 EXECUTE FUNCTION check_photographer_booking_overlap(); 82 83 </pre> 93 }}} 84 94 85 95 == 3. Band Booking Conflict Prevention == … … 91 101 === SQL Code === 92 102 93 <pre> 94 103 {{{ 104 #!sql 95 105 CREATE OR REPLACE FUNCTION check_band_booking_overlap() 96 106 RETURNS TRIGGER AS $$ 97 107 BEGIN 108 IF NEW.end_time <= NEW.start_time THEN 109 RAISE EXCEPTION 'Invalid band booking interval: end_time must be after start_time.'; 110 END IF; 111 98 112 IF EXISTS ( 99 113 SELECT 1 100 FROM band_booking 101 WHERE b and_id = NEW.band_id102 AND "date" = NEW."date"103 AND b ooking_id <> COALESCE(NEW.booking_id, -1)114 FROM band_booking bb 115 WHERE bb.band_id = NEW.band_id 116 AND bb.status <> 'cancelled' 117 AND bb.booking_id <> COALESCE(NEW.booking_id, -1) 104 118 AND ( 105 NEW.start_time < end_time106 AND NEW.end_time > start_time119 (NEW."date" + NEW.start_time) < (bb."date" + bb.end_time) 120 AND (NEW."date" + NEW.end_time) > (bb."date" + bb.start_time) 107 121 ) 108 122 ) THEN 109 RAISE EXCEPTION 'Band is already booked for this time interval.';123 RAISE EXCEPTION 'Band is already booked for this date and time interval.'; 110 124 END IF; 111 125 … … 114 128 $$ LANGUAGE plpgsql; 115 129 130 DROP TRIGGER IF EXISTS trg_band_booking_overlap ON band_booking; 131 116 132 CREATE TRIGGER trg_band_booking_overlap 117 133 BEFORE INSERT OR UPDATE ON band_booking 118 134 FOR EACH ROW 119 135 EXECUTE FUNCTION check_band_booking_overlap(); 120 121 </pre> 136 }}} 122 137 123 138 == 4. Attendance Consistency Validation == … … 129 144 === SQL Code === 130 145 131 <pre> 132 146 {{{ 147 #!sql 133 148 CREATE OR REPLACE FUNCTION validate_attendance_consistency() 134 149 RETURNS TRIGGER AS $$ … … 151 166 $$ LANGUAGE plpgsql; 152 167 168 DROP TRIGGER IF EXISTS trg_attendance_consistency ON attendance; 169 153 170 CREATE TRIGGER trg_attendance_consistency 154 171 BEFORE INSERT OR UPDATE ON attendance 155 172 FOR EACH ROW 156 173 EXECUTE FUNCTION validate_attendance_consistency(); 157 158 </pre> 174 }}}
