summaryrefslogtreecommitdiffstats
path: root/schema/mysql-upgrades
diff options
context:
space:
mode:
Diffstat (limited to 'schema/mysql-upgrades')
-rw-r--r--schema/mysql-upgrades/0.10.0.sql12
-rw-r--r--schema/mysql-upgrades/0.9.1.sql9
-rw-r--r--schema/mysql-upgrades/1.0.0.sql64
3 files changed, 85 insertions, 0 deletions
diff --git a/schema/mysql-upgrades/0.10.0.sql b/schema/mysql-upgrades/0.10.0.sql
new file mode 100644
index 0000000..638135b
--- /dev/null
+++ b/schema/mysql-upgrades/0.10.0.sql
@@ -0,0 +1,12 @@
+CREATE TABLE template (
+ id int(10) unsigned NOT NULL AUTO_INCREMENT,
+ author varchar(255) NOT NULL COLLATE utf8mb4_unicode_ci,
+ name varchar(128) NOT NULL COLLATE utf8mb4_unicode_ci,
+ settings longblob NOT NULL,
+ ctime bigint(20) unsigned NOT NULL,
+ mtime bigint(20) unsigned NOT NULL,
+ PRIMARY KEY(id)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
+
+ALTER TABLE report ADD COLUMN template_id int(10) unsigned NULL DEFAULT NULL AFTER timeframe_id;
+ALTER TABLE report ADD CONSTRAINT report_template FOREIGN KEY (template_id) REFERENCES template (id);
diff --git a/schema/mysql-upgrades/0.9.1.sql b/schema/mysql-upgrades/0.9.1.sql
new file mode 100644
index 0000000..bd71b37
--- /dev/null
+++ b/schema/mysql-upgrades/0.9.1.sql
@@ -0,0 +1,9 @@
+UPDATE timeframe SET start = 'first day of January this year midnight' WHERE name = 'Current Year';
+UPDATE timeframe SET start = 'first day of January last year midnight' WHERE name = 'Last Year';
+UPDATE timeframe SET ctime = UNIX_TIMESTAMP() * 1000, mtime = UNIX_TIMESTAMP() * 1000;
+
+ALTER TABLE timeframe MODIFY COLUMN name varchar(128) NOT NULL COLLATE utf8mb4_unicode_ci;
+ALTER TABLE timeframe ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=default;
+
+ALTER TABLE report MODIFY COLUMN name varchar(128) NOT NULL COLLATE utf8mb4_unicode_ci;
+ALTER TABLE report ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=default;
diff --git a/schema/mysql-upgrades/1.0.0.sql b/schema/mysql-upgrades/1.0.0.sql
new file mode 100644
index 0000000..5b1d2b5
--- /dev/null
+++ b/schema/mysql-upgrades/1.0.0.sql
@@ -0,0 +1,64 @@
+DROP PROCEDURE IF EXISTS migrate_schedule_config;
+DELIMITER //
+CREATE PROCEDURE migrate_schedule_config()
+BEGIN
+ DECLARE session_time_zone text;
+
+ DECLARE schedule_id int;
+ DECLARE schedule_start bigint;
+ DECLARE schedule_frequency enum('minutely', 'hourly', 'daily', 'weekly', 'monthly');
+ DECLARE schedule_config text;
+
+ DECLARE frequency_json text;
+
+ DECLARE done int DEFAULT 0;
+ DECLARE schedule CURSOR FOR SELECT id, start, frequency, config FROM schedule;
+ DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
+
+ -- Determine the current session time zone name
+ SELECT IF(@@session.TIME_ZONE = 'SYSTEM', @@system_time_zone, @@session.TIME_ZONE) INTO session_time_zone;
+
+ IF session_time_zone NOT LIKE '+%:%' AND session_time_zone NOT LIKE '-%:%' AND CONVERT_TZ(FROM_UNIXTIME(1699903042), session_time_zone, '+00:00') IS NULL THEN
+ SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'required named time zone information are not populated into mysql/mariadb';
+ END IF;
+
+ OPEN schedule;
+ read_loop: LOOP
+ FETCH schedule INTO schedule_id, schedule_start, schedule_frequency, schedule_config;
+ IF done THEN
+ LEAVE read_loop;
+ END IF;
+ IF NOT INSTR(schedule_config, 'frequencyType') THEN
+ SET frequency_json = CONCAT(
+ ',"frequencyType":"\\\\ipl\\\\Scheduler\\\\Cron","frequency":"{',
+ '\\"expression\\":\\"@', schedule_frequency,
+ '\\",\\"start\\":\\"', DATE_FORMAT(CONVERT_TZ(FROM_UNIXTIME(schedule_start / 1000), session_time_zone, '+00:00'), '%Y-%m-%dT%H:%i:%s.%f UTC'),
+ '\\"}"'
+ );
+ UPDATE schedule SET config = INSERT(schedule_config, LENGTH(schedule_config), 0, frequency_json) WHERE id = schedule_id;
+ END IF;
+ END LOOP;
+ CLOSE schedule;
+END //
+DELIMITER ;
+
+CALL migrate_schedule_config();
+DROP PROCEDURE migrate_schedule_config;
+
+ALTER TABLE schedule
+ DROP COLUMN start,
+ DROP COLUMN frequency;
+
+CREATE TABLE reporting_schema (
+ id int unsigned NOT NULL AUTO_INCREMENT,
+ version varchar(64) NOT NULL,
+ timestamp bigint unsigned NOT NULL,
+ success enum ('n', 'y') DEFAULT NULL,
+ reason text DEFAULT NULL,
+
+ PRIMARY KEY (id),
+ CONSTRAINT idx_reporting_schema_version UNIQUE (version)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC;
+
+INSERT INTO reporting_schema (version, timestamp, success, reason)
+ VALUES ('1.0.0', UNIX_TIMESTAMP() * 1000, 'y', NULL);