From e3c92c36440deb7c5301f35ae06796a66df812a6 Mon Sep 17 00:00:00 2001 From: guillermo Date: Wed, 18 Sep 2024 13:43:00 +0200 Subject: [PATCH] fix: refs #6421 worker_getHierarchy infinite loop --- db/routines/vn/procedures/worker_getHierarchy.sql | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/db/routines/vn/procedures/worker_getHierarchy.sql b/db/routines/vn/procedures/worker_getHierarchy.sql index a858c5ff7..cbcdd8131 100644 --- a/db/routines/vn/procedures/worker_getHierarchy.sql +++ b/db/routines/vn/procedures/worker_getHierarchy.sql @@ -1,5 +1,7 @@ DELIMITER $$ -CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`worker_getHierarchy`(vUserFk INT) +CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`worker_getHierarchy`( + vUserFk INT +) BEGIN /** * Retorna una tabla temporal con los trabajadores que tiene @@ -12,15 +14,16 @@ BEGIN (PRIMARY KEY (workerFk)) ENGINE = MEMORY WITH RECURSIVE workerHierarchy AS ( - SELECT id workerFk, bossFk, 0 depth + SELECT id workerFk, bossFk, 0 `depth`, CAST(id AS CHAR(255)) `path` FROM vn.worker WHERE id = vUserFk UNION ALL - SELECT w.id, w.bossFk, wh.depth + 1 + SELECT w.id, w.bossFk, wh.`depth` + 1, CONCAT(wh.`path`, ',', w.id) FROM vn.worker w JOIN workerHierarchy wh ON w.bossFk = wh.workerFk + WHERE NOT FIND_IN_SET(w.id, wh.`path`) ) - SELECT * + SELECT * FROM workerHierarchy ORDER BY depth, workerFk; END$$