diff --git a/lib/classes/patch/380a3.php b/lib/classes/patch/380a3.php index dd16158130..6f125c4cd5 100644 --- a/lib/classes/patch/380a3.php +++ b/lib/classes/patch/380a3.php @@ -58,71 +58,70 @@ class patch_380a3 implements patchInterface { $conn = $databox->get_connection(); - try { - $removeProc = "DROP PROCEDURE IF EXISTS explode_log_table"; + $removeProc = "DROP PROCEDURE IF EXISTS explode_log_table"; - $stmt = $conn->prepare($removeProc); - $stmt->execute(); - $stmt->closeCursor(); - unset($stmt); + $stmt = $conn->prepare($removeProc); + $stmt->execute(); + $stmt->closeCursor(); + unset($stmt); - $procedure = " - CREATE PROCEDURE explode_log_table(bound VARCHAR(255)) - BEGIN - DECLARE l_log_id INT UNSIGNED DEFAULT 0; - DECLARE l_coll_list TEXT; - DECLARE occurance INT DEFAULT 0; - DECLARE i INT DEFAULT 0; - DECLARE dest_coll_id INT; - DECLARE done INT DEFAULT 0; - DECLARE result_set CURSOR FOR - SELECT l.id, l.coll_list - FROM log l - LEFT JOIN log_colls lc ON (lc.log_id = l.id) - WHERE (lc.log_id IS NULL) AND coll_list != ''; - DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; - OPEN result_set; - read_loop: LOOP - FETCH result_set INTO l_log_id, l_coll_list; - IF done THEN - LEAVE read_loop; - END IF; - SET occurance = (SELECT LENGTH(l_coll_list) - LENGTH(REPLACE(l_coll_list, bound, ''))+1); - SET i=1; - START TRANSACTION; - WHILE i <= occurance DO - SET dest_coll_id = (SELECT REPLACE( - SUBSTRING( - SUBSTRING_INDEX(l_coll_list, bound, i), - LENGTH(SUBSTRING_INDEX(l_coll_list, bound, i - 1)) + 1 - ), - ',', - '' - )); - IF dest_coll_id > 0 THEN - INSERT INTO log_colls VALUES (null, l_log_id, dest_coll_id); - END IF; - SET i = i + 1; - END WHILE; - COMMIT; - END LOOP; - CLOSE result_set; - END;"; + $procedure = " + CREATE PROCEDURE explode_log_table(bound VARCHAR(255)) + BEGIN + DECLARE l_log_id INT UNSIGNED DEFAULT 0; + DECLARE l_coll_list TEXT; + DECLARE occurance INT DEFAULT 0; + DECLARE i INT DEFAULT 0; + DECLARE dest_coll_id INT; + DECLARE done INT DEFAULT 0; + DECLARE result_set CURSOR FOR + SELECT l.id, l.coll_list + FROM log l + LEFT JOIN log_colls lc ON (lc.log_id = l.id) + WHERE (lc.log_id IS NULL) AND coll_list != ''; + DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; + OPEN result_set; + read_loop: LOOP + FETCH result_set INTO l_log_id, l_coll_list; + IF done THEN + LEAVE read_loop; + END IF; + SET occurance = (SELECT LENGTH(l_coll_list) - LENGTH(REPLACE(l_coll_list, bound, ''))+1); + SET i=1; + START TRANSACTION; + WHILE i <= occurance DO + SET dest_coll_id = (SELECT REPLACE( + SUBSTRING( + SUBSTRING_INDEX(l_coll_list, bound, i), + LENGTH(SUBSTRING_INDEX(l_coll_list, bound, i - 1)) + 1 + ), + ',', + '' + )); + IF dest_coll_id > 0 THEN + INSERT INTO log_colls VALUES (null, l_log_id, dest_coll_id); + END IF; + SET i = i + 1; + END WHILE; + COMMIT; + END LOOP; + CLOSE result_set; + END;"; - $stmt = $conn->prepare($procedure); - $stmt->execute(); - $stmt->closeCursor(); - unset($stmt); + $stmt = $conn->prepare($procedure); + $stmt->execute(); + $stmt->closeCursor(); - $sql = "CALL explode_log_table(',')"; - $stmt = $conn->prepare($sql); - $stmt->execute(); - $stmt->closeCursor(); - unset($stmt); - } catch (\PDOEXception $e) { - return false; - } + $sql = "CALL explode_log_table(',')"; + $stmt = $conn->prepare($sql); + $stmt->execute(); + $stmt->closeCursor(); + + $stmt = $conn->prepare($removeProc); + $stmt->execute(); + $stmt->closeCursor(); + return true; } }