mirror of https://github.com/sipwise/db-schema.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.5 KiB
58 lines
1.5 KiB
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;
|
|
|
|
DELIMITER ;;
|
|
CREATE PROCEDURE split_autoprov_firmware_data()
|
|
BEGIN
|
|
|
|
DECLARE n_fw_id, chunk_size, offset 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 offset = 1;
|
|
|
|
OPEN x;
|
|
x_main: LOOP
|
|
FETCH x INTO n_fw_id;
|
|
IF done THEN
|
|
LEAVE x_main;
|
|
END IF;
|
|
SET offset = 1;
|
|
x_chunk: LOOP
|
|
SELECT substr(data, offset, 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 offset = offset+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;
|