DELIMITER $$
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`route_doRecalc`()
proc: BEGIN
/**
 * Recalculates modified route.
 */
	
	DECLARE vDone BOOL;
	DECLARE vRouteFk INT;

	DECLARE cCur CURSOR FOR
		SELECT routeFk FROM routeRecalc;

	DECLARE CONTINUE HANDLER FOR NOT FOUND
		SET vDone = TRUE;
        
	DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
    BEGIN
		DO RELEASE_LOCK('vn.route_doRecalc');
		ROLLBACK;
        RESIGNAL;
	END;

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

	OPEN cCur;

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

		IF vDone THEN
			LEAVE myLoop;
		END IF;

		START TRANSACTION;
        CALL route_updateM3(vRouteFk);
        COMMIT;

		DELETE FROM routeRecalc WHERE routeFk = vRouteFk;
	END LOOP;

	CLOSE cCur;
	DO RELEASE_LOCK('vn.route_doRecalc');
END$$
DELIMITER ;
