DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticket_doRecalc`()
proc: BEGIN
/**
 * Recalculates modified ticket.
 */
	DECLARE vDone BOOL;
	DECLARE vTicketFk INT;

	DECLARE cCur CURSOR FOR
		SELECT DISTINCT ticketFk FROM tTicket;

	DECLARE CONTINUE HANDLER FOR NOT FOUND
		SET vDone = TRUE;

	DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
	BEGIN
		DO RELEASE_LOCK('vn.ticket_doRecalc');
		ROLLBACK;
		RESIGNAL;
	END;

	IF !GET_LOCK('vn.ticket_doRecalc', 0) THEN
		LEAVE proc;
	END IF;

	DROP TEMPORARY TABLE IF EXISTS tTicket;
	CREATE TEMPORARY TABLE tTicket
		ENGINE = MEMORY
		SELECT id, ticketFk FROM ticketRecalc;

	OPEN cCur;

	myLoop: LOOP
		SET vDone = FALSE;
		FETCH cCur INTO vTicketFk;

		IF vDone THEN
			LEAVE myLoop;
		END IF;

		CALL ticket_recalc(vTicketFk, NULL);
	END LOOP;

	CLOSE cCur;

	DELETE tr FROM ticketRecalc tr JOIN tTicket t ON tr.id = t.id;

	DROP TEMPORARY TABLE tTicket;

	DO RELEASE_LOCK('vn.ticket_doRecalc');
END$$
DELIMITER ;