diff --git a/sql/triggers.mysql b/sql/triggers.mysql index d4f4f76aabc694f28c28eee742eab531746655f0..b5c6a2d42ff8150d2cd6ec2607187b6edcc7e0ca 100644 --- a/sql/triggers.mysql +++ b/sql/triggers.mysql @@ -9,6 +9,7 @@ FOR EACH ROW status = (CASE WHEN status!='BLOCKED' THEN 'LOADING' ELSE 'BLOCKED' END) WHERE analysis_id = NEW.analysis_id; + CREATE TRIGGER delete_job AFTER DELETE ON job FOR EACH ROW UPDATE analysis_stats SET @@ -22,20 +23,22 @@ DELIMITER $$ CREATE TRIGGER update_job AFTER UPDATE ON job FOR EACH ROW -BEGIN - UPDATE analysis_stats SET - total_job_count = total_job_count - 1, - unclaimed_job_count = unclaimed_job_count - (CASE WHEN (OLD.status = 'READY' AND OLD.semaphore_count <= 0) THEN 1 ELSE 0 END), - done_job_count = done_job_count - (CASE OLD.status WHEN 'DONE' THEN 1 WHEN 'PASSED_ON' THEN 1 ELSE 0 END), - failed_job_count = failed_job_count - (CASE OLD.status WHEN 'FAILED' THEN 1 ELSE 0 END) - WHERE analysis_id = OLD.analysis_id; - UPDATE analysis_stats SET - total_job_count = total_job_count + 1, - unclaimed_job_count = unclaimed_job_count + (CASE WHEN (NEW.status = 'READY' AND NEW.semaphore_count <= 0) THEN 1 ELSE 0 END), - done_job_count = done_job_count + (CASE NEW.status WHEN 'DONE' THEN 1 WHEN 'PASSED_ON' THEN 1 ELSE 0 END), - failed_job_count = failed_job_count + (CASE NEW.status WHEN 'FAILED' THEN 1 ELSE 0 END) - WHERE analysis_id = NEW.analysis_id; -END$$ + CASE WHEN (OLD.status<>NEW.status OR OLD.analysis_id<>NEW.analysis_id) THEN + BEGIN + UPDATE analysis_stats SET + total_job_count = total_job_count - 1, + unclaimed_job_count = unclaimed_job_count - (CASE WHEN (OLD.status = 'READY' AND OLD.semaphore_count <= 0) THEN 1 ELSE 0 END), + done_job_count = done_job_count - (CASE OLD.status WHEN 'DONE' THEN 1 WHEN 'PASSED_ON' THEN 1 ELSE 0 END), + failed_job_count = failed_job_count - (CASE OLD.status WHEN 'FAILED' THEN 1 ELSE 0 END) + WHERE analysis_id = OLD.analysis_id; + UPDATE analysis_stats SET + total_job_count = total_job_count + 1, + unclaimed_job_count = unclaimed_job_count + (CASE WHEN (NEW.status = 'READY' AND NEW.semaphore_count <= 0) THEN 1 ELSE 0 END), + done_job_count = done_job_count + (CASE NEW.status WHEN 'DONE' THEN 1 WHEN 'PASSED_ON' THEN 1 ELSE 0 END), + failed_job_count = failed_job_count + (CASE NEW.status WHEN 'FAILED' THEN 1 ELSE 0 END) + WHERE analysis_id = NEW.analysis_id; + END; + END CASE$$ DELIMITER ;