35 lines
804 B
MySQL
35 lines
804 B
MySQL
|
DELIMITER $$
|
||
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`travel_doRecalc`()
|
||
|
proc: BEGIN
|
||
|
/**
|
||
|
* Recounts the number of entries of changed travels.
|
||
|
*/
|
||
|
DECLARE vTravelFk INT;
|
||
|
|
||
|
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
||
|
BEGIN
|
||
|
DO RELEASE_LOCK('vn.ticket_doRecalc');
|
||
|
END;
|
||
|
|
||
|
IF !GET_LOCK('vn.travel_doRecalc', 0) THEN
|
||
|
LEAVE proc;
|
||
|
END IF;
|
||
|
|
||
|
CREATE OR REPLACE TEMPORARY TABLE tTravel
|
||
|
ENGINE = MEMORY
|
||
|
SELECT travelFk FROM travelRecalc;
|
||
|
|
||
|
UPDATE travel t
|
||
|
JOIN tTravel tt ON tt.travelFk = t.id
|
||
|
SET t.totalEntries = (
|
||
|
SELECT COUNT(e.id)
|
||
|
FROM entry e
|
||
|
WHERE e.travelFk = t.id
|
||
|
);
|
||
|
|
||
|
DELETE tr FROM travelRecalc tr JOIN tTravel t ON tr.travelFk = t.travelFk;
|
||
|
DROP TEMPORARY TABLE tTravel;
|
||
|
DO RELEASE_LOCK('vn.travel_doRecalc');
|
||
|
END$$
|
||
|
DELIMITER ;
|