Loading 03-other-functions.sql +22 −6 Original line number Diff line number Diff line Loading @@ -73,25 +73,41 @@ $func$ LANGUAGE sql; -- Trigger function that automatically updates start time and end time of jobs at phase update. -- This could be performed by business logic of each application that handles jobs but relying directly on the database ensures a better uniformity. CREATE OR REPLACE FUNCTION job_phase_inserted() RETURNS TRIGGER AS $func$ BEGIN IF new.phase = 'EXECUTING' THEN new.start_time := NOW(); ELSIF new.phase = 'COMPLETED' OR new.phase = 'ERROR' THEN new.start_time := NOW(); new.end_time := NOW(); END IF; RETURN new; END; $func$ LANGUAGE plpgsql; CREATE OR REPLACE FUNCTION job_phase_updated() RETURNS TRIGGER AS $func$ BEGIN IF new.phase != old.phase THEN IF new.phase = 'EXECUTING' THEN new.start_time := NOW(); ELSIF new.phase = 'COMPLETED' OR new.phase = 'ERROR' OR new.phase = 'ABORTED' THEN new.end_time := NOW(); END IF; END IF; RETURN new; END; $func$ LANGUAGE plpgsql; CREATE TRIGGER job_update BEFORE UPDATE OF phase ON job FOR EACH ROW EXECUTE PROCEDURE job_phase_updated(); CREATE TRIGGER job_insert BEFORE INSERT ON job FOR EACH ROW EXECUTE PROCEDURE job_phase_inserted(); CREATE TRIGGER job_update BEFORE UPDATE OF phase ON job FOR EACH ROW EXECUTE PROCEDURE job_phase_updated(); Loading
03-other-functions.sql +22 −6 Original line number Diff line number Diff line Loading @@ -73,25 +73,41 @@ $func$ LANGUAGE sql; -- Trigger function that automatically updates start time and end time of jobs at phase update. -- This could be performed by business logic of each application that handles jobs but relying directly on the database ensures a better uniformity. CREATE OR REPLACE FUNCTION job_phase_inserted() RETURNS TRIGGER AS $func$ BEGIN IF new.phase = 'EXECUTING' THEN new.start_time := NOW(); ELSIF new.phase = 'COMPLETED' OR new.phase = 'ERROR' THEN new.start_time := NOW(); new.end_time := NOW(); END IF; RETURN new; END; $func$ LANGUAGE plpgsql; CREATE OR REPLACE FUNCTION job_phase_updated() RETURNS TRIGGER AS $func$ BEGIN IF new.phase != old.phase THEN IF new.phase = 'EXECUTING' THEN new.start_time := NOW(); ELSIF new.phase = 'COMPLETED' OR new.phase = 'ERROR' OR new.phase = 'ABORTED' THEN new.end_time := NOW(); END IF; END IF; RETURN new; END; $func$ LANGUAGE plpgsql; CREATE TRIGGER job_update BEFORE UPDATE OF phase ON job FOR EACH ROW EXECUTE PROCEDURE job_phase_updated(); CREATE TRIGGER job_insert BEFORE INSERT ON job FOR EACH ROW EXECUTE PROCEDURE job_phase_inserted(); CREATE TRIGGER job_update BEFORE UPDATE OF phase ON job FOR EACH ROW EXECUTE PROCEDURE job_phase_updated();