MT#55881 Provide split_autoprov_firmware_data procedure for upgrades

In git rev a9c1cf4cb we had to take care of adjusting the offset
variable to support MariaDB >=10.6 in the existing diff/15301.up script.
So that also existing installations receive that change during upgrade,
let's provide the according script which re-creates the
split_autoprov_firmware_data stored procedure.

Change-Id: Iae9634b39bda9f1ad63b2b6093f2e6095f68fc45
Thanks: Kirill Solomko <ksolomko@sipwise.com>
mr11.2
Michael Prokop 3 years ago
parent a9c1cf4cba
commit 1631573453

@ -0,0 +1,58 @@
USE provisioning;
SET autocommit=0;
CREATE TABLE `autoprov_firmwares_data` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
fw_id int(11) unsigned NOT NULL,
`data` longblob NOT NULL,
PRIMARY KEY (`id`),
KEY `afd_fw_id_idx` (`fw_id`),
CONSTRAINT `fk_fw_idx` FOREIGN KEY (`fw_id`) REFERENCES `autoprov_firmwares` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB;
DROP PROCEDURE split_autoprov_firmware_data;
DELIMITER ;;
CREATE PROCEDURE split_autoprov_firmware_data()
BEGIN
DECLARE n_fw_id, chunk_size, off_set int;
DECLARE chunk longblob;
DECLARE done int DEFAULT FALSE;
DECLARE x CURSOR FOR SELECT id FROM autoprov_firmwares ORDER BY id ASC;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
SET chunk_size = 10485760;
SET off_set = 1;
OPEN x;
x_main: LOOP
FETCH x INTO n_fw_id;
IF done THEN
LEAVE x_main;
END IF;
SET off_set = 1;
x_chunk: LOOP
SELECT substr(data, off_set, chunk_size) INTO chunk
FROM autoprov_firmwares
WHERE id = n_fw_id;
IF LENGTH(chunk) > 0 THEN
INSERT INTO autoprov_firmwares_data (fw_id, data)
VALUES (n_fw_id, chunk);
SET off_set = off_set+chunk_size;
ELSE
LEAVE x_chunk;
END IF;
END LOOP;
END LOOP;
CLOSE x;
END;;
DELIMITER ;
CALL split_autoprov_firmware_data;
DROP PROCEDURE split_autoprov_firmware_data;
ALTER TABLE autoprov_firmwares DROP data;
COMMIT;
Loading…
Cancel
Save