= Тригери == 1. Тригер за спречување на преклопени договори по оглас * Тригер за забрана на преклопени договори (Lease) за ист оглас (Listing) ]. Целта е да се спречи креирање на изнајмувања со ранг на датуми кои се преклопуваат за ист Listing. Доколку новото (или изменетото) изнајмување се поклопува со постоечко, операцијата ќе биде одбиена со RAISE EXCEPTION. {{{ CREATE OR REPLACE FUNCTION domify.f_lease_no_overlap() RETURNS TRIGGER AS $$ DECLARE cnt INT; BEGIN SELECT COUNT(*) INTO cnt FROM domify."lease" WHERE listing_id = NEW.listing_id AND id <> COALESCE(NEW.id, -1) AND daterange(start_date, end_date, '[]') && daterange(NEW.start_date, NEW.end_date, '[]'); IF cnt > 0 THEN RAISE EXCEPTION 'Listing % веќе има договор кој се преклопува со периодот %–%', NEW.listing_id, NEW.start_date, NEW.end_date; END IF; RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE TRIGGER t_lease_no_overlap BEFORE INSERT OR UPDATE ON domify."lease" FOR EACH ROW EXECUTE FUNCTION domify.f_lease_no_overlap(); }}}