From cd09f904e25efd260ac56988df36d98f7c4d75a9 Mon Sep 17 00:00:00 2001 From: Julian Brost Date: Thu, 13 Nov 2025 10:28:08 +0100 Subject: [PATCH] Merge schema upgrade files for v0.2.0 This gives a single file that can be applied during the upgrade more easily, having it in individual files was mostly to avoid merge conflicts during development. The combined files were created with the following command: cat 0.2.0-external-uuid.sql <(echo) 0.2.0-source-rules.sql <(echo) 0.2.0-schedule-timezone.sql <(echo) 0.2.0-source-username.sql > 0.2.0.sql The order of files matches the order in which the PRs that added them were merged (though the order shouldn't really matter as there are no dependencies between the individual files): - https://github.com/Icinga/icinga-notifications/pull/216 - https://github.com/Icinga/icinga-notifications/pull/324 - https://github.com/Icinga/icinga-notifications/pull/344 - https://github.com/Icinga/icinga-notifications/pull/338 --- schema/mysql/upgrades/0.2.0-external-uuid.sql | 15 ------ .../upgrades/0.2.0-schedule-timezone.sql | 12 ----- schema/mysql/upgrades/0.2.0-source-rules.sql | 19 ------- .../mysql/upgrades/0.2.0-source-username.sql | 5 -- schema/mysql/upgrades/0.2.0.sql | 54 +++++++++++++++++++ schema/pgsql/upgrades/0.2.0-external-uuid.sql | 15 ------ .../upgrades/0.2.0-schedule-timezone.sql | 12 ----- schema/pgsql/upgrades/0.2.0-source-rules.sql | 19 ------- .../pgsql/upgrades/0.2.0-source-username.sql | 5 -- schema/pgsql/upgrades/0.2.0.sql | 54 +++++++++++++++++++ 10 files changed, 108 insertions(+), 102 deletions(-) delete mode 100644 schema/mysql/upgrades/0.2.0-external-uuid.sql delete mode 100644 schema/mysql/upgrades/0.2.0-schedule-timezone.sql delete mode 100644 schema/mysql/upgrades/0.2.0-source-rules.sql delete mode 100644 schema/mysql/upgrades/0.2.0-source-username.sql create mode 100644 schema/mysql/upgrades/0.2.0.sql delete mode 100644 schema/pgsql/upgrades/0.2.0-external-uuid.sql delete mode 100644 schema/pgsql/upgrades/0.2.0-schedule-timezone.sql delete mode 100644 schema/pgsql/upgrades/0.2.0-source-rules.sql delete mode 100644 schema/pgsql/upgrades/0.2.0-source-username.sql create mode 100644 schema/pgsql/upgrades/0.2.0.sql diff --git a/schema/mysql/upgrades/0.2.0-external-uuid.sql b/schema/mysql/upgrades/0.2.0-external-uuid.sql deleted file mode 100644 index 750bdd4e..00000000 --- a/schema/mysql/upgrades/0.2.0-external-uuid.sql +++ /dev/null @@ -1,15 +0,0 @@ -ALTER TABLE contact ADD COLUMN external_uuid char(36) AFTER id; -ALTER TABLE contactgroup ADD COLUMN external_uuid char(36) AFTER id; -ALTER TABLE channel ADD COLUMN external_uuid char(36) AFTER id; - -UPDATE contact SET external_uuid = UUID() WHERE external_uuid IS NULL; -UPDATE contactgroup SET external_uuid = UUID() WHERE external_uuid IS NULL; -UPDATE channel SET external_uuid = UUID() WHERE external_uuid IS NULL; - -ALTER TABLE contact MODIFY COLUMN external_uuid char(36) NOT NULL; -ALTER TABLE contactgroup MODIFY COLUMN external_uuid char(36) NOT NULL; -ALTER TABLE channel MODIFY COLUMN external_uuid char(36) NOT NULL; - -ALTER TABLE contact ADD CONSTRAINT uk_contact_external_uuid UNIQUE (external_uuid); -ALTER TABLE contactgroup ADD CONSTRAINT uk_contactgroup_external_uuid UNIQUE (external_uuid); -ALTER TABLE channel ADD CONSTRAINT uk_channel_external_uuid UNIQUE (external_uuid); diff --git a/schema/mysql/upgrades/0.2.0-schedule-timezone.sql b/schema/mysql/upgrades/0.2.0-schedule-timezone.sql deleted file mode 100644 index b1e6c3c1..00000000 --- a/schema/mysql/upgrades/0.2.0-schedule-timezone.sql +++ /dev/null @@ -1,12 +0,0 @@ -ALTER TABLE schedule ADD COLUMN timezone text AFTER name; -UPDATE schedule SET timezone = ( - SELECT entry.timezone - FROM timeperiod_entry entry - INNER JOIN timeperiod ON timeperiod.id = entry.timeperiod_id - INNER JOIN rotation ON rotation.id = timeperiod.owned_by_rotation_id - WHERE rotation.schedule_id = schedule.id - ORDER BY entry.id - LIMIT 1 -); -UPDATE schedule SET timezone = 'UTC' WHERE timezone IS NULL; -ALTER TABLE schedule MODIFY COLUMN timezone text NOT NULL; diff --git a/schema/mysql/upgrades/0.2.0-source-rules.sql b/schema/mysql/upgrades/0.2.0-source-rules.sql deleted file mode 100644 index ae7074dc..00000000 --- a/schema/mysql/upgrades/0.2.0-source-rules.sql +++ /dev/null @@ -1,19 +0,0 @@ -ALTER TABLE source - DROP CONSTRAINT ck_source_icinga2_has_config, - DROP CONSTRAINT ck_source_bcrypt_listener_password_hash; -ALTER TABLE source - DROP COLUMN icinga2_base_url, - DROP COLUMN icinga2_auth_user, - DROP COLUMN icinga2_auth_pass, - DROP COLUMN icinga2_ca_pem, - DROP COLUMN icinga2_common_name, - DROP COLUMN icinga2_insecure_tls, - ADD CONSTRAINT ck_source_bcrypt_listener_password_hash CHECK ( - listener_password_hash IS NULL OR listener_password_hash LIKE '$2_$%'); - -ALTER TABLE rule - ADD COLUMN source_id bigint DEFAULT NULL AFTER timeperiod_id, - ADD CONSTRAINT fk_rule_source FOREIGN KEY (source_id) REFERENCES source(id); - -UPDATE rule SET source_id = (SELECT id FROM source WHERE type = 'icinga2'); -ALTER TABLE rule MODIFY COLUMN source_id bigint NOT NULL; diff --git a/schema/mysql/upgrades/0.2.0-source-username.sql b/schema/mysql/upgrades/0.2.0-source-username.sql deleted file mode 100644 index 1f93080a..00000000 --- a/schema/mysql/upgrades/0.2.0-source-username.sql +++ /dev/null @@ -1,5 +0,0 @@ -ALTER TABLE source ADD COLUMN listener_username varchar(255) AFTER name; -UPDATE source SET listener_username = CONCAT('source-', source.id) WHERE deleted = 'n'; -ALTER TABLE source - ADD CONSTRAINT uk_source_listener_username UNIQUE (listener_username), - ADD CONSTRAINT ck_source_listener_username_or_deleted CHECK (deleted = 'y' OR listener_username IS NOT NULL); diff --git a/schema/mysql/upgrades/0.2.0.sql b/schema/mysql/upgrades/0.2.0.sql new file mode 100644 index 00000000..707b8fd9 --- /dev/null +++ b/schema/mysql/upgrades/0.2.0.sql @@ -0,0 +1,54 @@ +ALTER TABLE contact ADD COLUMN external_uuid char(36) AFTER id; +ALTER TABLE contactgroup ADD COLUMN external_uuid char(36) AFTER id; +ALTER TABLE channel ADD COLUMN external_uuid char(36) AFTER id; + +UPDATE contact SET external_uuid = UUID() WHERE external_uuid IS NULL; +UPDATE contactgroup SET external_uuid = UUID() WHERE external_uuid IS NULL; +UPDATE channel SET external_uuid = UUID() WHERE external_uuid IS NULL; + +ALTER TABLE contact MODIFY COLUMN external_uuid char(36) NOT NULL; +ALTER TABLE contactgroup MODIFY COLUMN external_uuid char(36) NOT NULL; +ALTER TABLE channel MODIFY COLUMN external_uuid char(36) NOT NULL; + +ALTER TABLE contact ADD CONSTRAINT uk_contact_external_uuid UNIQUE (external_uuid); +ALTER TABLE contactgroup ADD CONSTRAINT uk_contactgroup_external_uuid UNIQUE (external_uuid); +ALTER TABLE channel ADD CONSTRAINT uk_channel_external_uuid UNIQUE (external_uuid); + +ALTER TABLE source + DROP CONSTRAINT ck_source_icinga2_has_config, + DROP CONSTRAINT ck_source_bcrypt_listener_password_hash; +ALTER TABLE source + DROP COLUMN icinga2_base_url, + DROP COLUMN icinga2_auth_user, + DROP COLUMN icinga2_auth_pass, + DROP COLUMN icinga2_ca_pem, + DROP COLUMN icinga2_common_name, + DROP COLUMN icinga2_insecure_tls, + ADD CONSTRAINT ck_source_bcrypt_listener_password_hash CHECK ( + listener_password_hash IS NULL OR listener_password_hash LIKE '$2_$%'); + +ALTER TABLE rule + ADD COLUMN source_id bigint DEFAULT NULL AFTER timeperiod_id, + ADD CONSTRAINT fk_rule_source FOREIGN KEY (source_id) REFERENCES source(id); + +UPDATE rule SET source_id = (SELECT id FROM source WHERE type = 'icinga2'); +ALTER TABLE rule MODIFY COLUMN source_id bigint NOT NULL; + +ALTER TABLE schedule ADD COLUMN timezone text AFTER name; +UPDATE schedule SET timezone = ( + SELECT entry.timezone + FROM timeperiod_entry entry + INNER JOIN timeperiod ON timeperiod.id = entry.timeperiod_id + INNER JOIN rotation ON rotation.id = timeperiod.owned_by_rotation_id + WHERE rotation.schedule_id = schedule.id + ORDER BY entry.id + LIMIT 1 +); +UPDATE schedule SET timezone = 'UTC' WHERE timezone IS NULL; +ALTER TABLE schedule MODIFY COLUMN timezone text NOT NULL; + +ALTER TABLE source ADD COLUMN listener_username varchar(255) AFTER name; +UPDATE source SET listener_username = CONCAT('source-', source.id) WHERE deleted = 'n'; +ALTER TABLE source + ADD CONSTRAINT uk_source_listener_username UNIQUE (listener_username), + ADD CONSTRAINT ck_source_listener_username_or_deleted CHECK (deleted = 'y' OR listener_username IS NOT NULL); diff --git a/schema/pgsql/upgrades/0.2.0-external-uuid.sql b/schema/pgsql/upgrades/0.2.0-external-uuid.sql deleted file mode 100644 index a79192cf..00000000 --- a/schema/pgsql/upgrades/0.2.0-external-uuid.sql +++ /dev/null @@ -1,15 +0,0 @@ -CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; - -ALTER TABLE contact ADD COLUMN external_uuid uuid CONSTRAINT uk_contact_external_uuid UNIQUE; -ALTER TABLE contactgroup ADD COLUMN external_uuid uuid CONSTRAINT uk_contactgroup_external_uuid UNIQUE; -ALTER TABLE channel ADD COLUMN external_uuid uuid CONSTRAINT uk_channel_external_uuid UNIQUE; - -UPDATE contact SET external_uuid = uuid_generate_v4() WHERE external_uuid IS NULL; -UPDATE contactgroup SET external_uuid = uuid_generate_v4() WHERE external_uuid IS NULL; -UPDATE channel SET external_uuid = uuid_generate_v4() WHERE external_uuid IS NULL; - -ALTER TABLE contact ALTER COLUMN external_uuid SET NOT NULL; -ALTER TABLE contactgroup ALTER COLUMN external_uuid SET NOT NULL; -ALTER TABLE channel ALTER COLUMN external_uuid SET NOT NULL; - -DROP EXTENSION "uuid-ossp"; diff --git a/schema/pgsql/upgrades/0.2.0-schedule-timezone.sql b/schema/pgsql/upgrades/0.2.0-schedule-timezone.sql deleted file mode 100644 index 7e41e81b..00000000 --- a/schema/pgsql/upgrades/0.2.0-schedule-timezone.sql +++ /dev/null @@ -1,12 +0,0 @@ -ALTER TABLE schedule ADD COLUMN timezone text; -UPDATE schedule SET timezone = ( - SELECT entry.timezone - FROM timeperiod_entry entry - INNER JOIN timeperiod ON timeperiod.id = entry.timeperiod_id - INNER JOIN rotation ON rotation.id = timeperiod.owned_by_rotation_id - WHERE rotation.schedule_id = schedule.id - ORDER BY entry.id - LIMIT 1 -); -UPDATE schedule SET timezone = 'UTC' WHERE timezone IS NULL; -ALTER TABLE schedule ALTER COLUMN timezone SET NOT NULL; diff --git a/schema/pgsql/upgrades/0.2.0-source-rules.sql b/schema/pgsql/upgrades/0.2.0-source-rules.sql deleted file mode 100644 index 8b092ca1..00000000 --- a/schema/pgsql/upgrades/0.2.0-source-rules.sql +++ /dev/null @@ -1,19 +0,0 @@ -ALTER TABLE source - DROP CONSTRAINT ck_source_icinga2_has_config, - DROP CONSTRAINT ck_source_bcrypt_listener_password_hash; -ALTER TABLE source - DROP COLUMN icinga2_base_url, - DROP COLUMN icinga2_auth_user, - DROP COLUMN icinga2_auth_pass, - DROP COLUMN icinga2_ca_pem, - DROP COLUMN icinga2_common_name, - DROP COLUMN icinga2_insecure_tls, - ADD CONSTRAINT ck_source_bcrypt_listener_password_hash CHECK ( - listener_password_hash IS NULL OR listener_password_hash LIKE '$2_$%'); - -ALTER TABLE rule - ADD COLUMN source_id bigint DEFAULT NULL, - ADD CONSTRAINT fk_rule_source FOREIGN KEY (source_id) REFERENCES source(id); - -UPDATE rule SET source_id = (SELECT id FROM source WHERE type = 'icinga2'); -ALTER TABLE rule ALTER COLUMN source_id SET NOT NULL; diff --git a/schema/pgsql/upgrades/0.2.0-source-username.sql b/schema/pgsql/upgrades/0.2.0-source-username.sql deleted file mode 100644 index 2cb025db..00000000 --- a/schema/pgsql/upgrades/0.2.0-source-username.sql +++ /dev/null @@ -1,5 +0,0 @@ -ALTER TABLE source ADD COLUMN listener_username varchar(255); -UPDATE source SET listener_username = CONCAT('source-', source.id) WHERE deleted = 'n'; -ALTER TABLE source - ADD CONSTRAINT uk_source_listener_username UNIQUE (listener_username), - ADD CONSTRAINT ck_source_listener_username_or_deleted CHECK (deleted = 'y' OR listener_username IS NOT NULL); diff --git a/schema/pgsql/upgrades/0.2.0.sql b/schema/pgsql/upgrades/0.2.0.sql new file mode 100644 index 00000000..b17657bd --- /dev/null +++ b/schema/pgsql/upgrades/0.2.0.sql @@ -0,0 +1,54 @@ +CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; + +ALTER TABLE contact ADD COLUMN external_uuid uuid CONSTRAINT uk_contact_external_uuid UNIQUE; +ALTER TABLE contactgroup ADD COLUMN external_uuid uuid CONSTRAINT uk_contactgroup_external_uuid UNIQUE; +ALTER TABLE channel ADD COLUMN external_uuid uuid CONSTRAINT uk_channel_external_uuid UNIQUE; + +UPDATE contact SET external_uuid = uuid_generate_v4() WHERE external_uuid IS NULL; +UPDATE contactgroup SET external_uuid = uuid_generate_v4() WHERE external_uuid IS NULL; +UPDATE channel SET external_uuid = uuid_generate_v4() WHERE external_uuid IS NULL; + +ALTER TABLE contact ALTER COLUMN external_uuid SET NOT NULL; +ALTER TABLE contactgroup ALTER COLUMN external_uuid SET NOT NULL; +ALTER TABLE channel ALTER COLUMN external_uuid SET NOT NULL; + +DROP EXTENSION "uuid-ossp"; + +ALTER TABLE source + DROP CONSTRAINT ck_source_icinga2_has_config, + DROP CONSTRAINT ck_source_bcrypt_listener_password_hash; +ALTER TABLE source + DROP COLUMN icinga2_base_url, + DROP COLUMN icinga2_auth_user, + DROP COLUMN icinga2_auth_pass, + DROP COLUMN icinga2_ca_pem, + DROP COLUMN icinga2_common_name, + DROP COLUMN icinga2_insecure_tls, + ADD CONSTRAINT ck_source_bcrypt_listener_password_hash CHECK ( + listener_password_hash IS NULL OR listener_password_hash LIKE '$2_$%'); + +ALTER TABLE rule + ADD COLUMN source_id bigint DEFAULT NULL, + ADD CONSTRAINT fk_rule_source FOREIGN KEY (source_id) REFERENCES source(id); + +UPDATE rule SET source_id = (SELECT id FROM source WHERE type = 'icinga2'); +ALTER TABLE rule ALTER COLUMN source_id SET NOT NULL; + +ALTER TABLE schedule ADD COLUMN timezone text; +UPDATE schedule SET timezone = ( + SELECT entry.timezone + FROM timeperiod_entry entry + INNER JOIN timeperiod ON timeperiod.id = entry.timeperiod_id + INNER JOIN rotation ON rotation.id = timeperiod.owned_by_rotation_id + WHERE rotation.schedule_id = schedule.id + ORDER BY entry.id + LIMIT 1 +); +UPDATE schedule SET timezone = 'UTC' WHERE timezone IS NULL; +ALTER TABLE schedule ALTER COLUMN timezone SET NOT NULL; + +ALTER TABLE source ADD COLUMN listener_username varchar(255); +UPDATE source SET listener_username = CONCAT('source-', source.id) WHERE deleted = 'n'; +ALTER TABLE source + ADD CONSTRAINT uk_source_listener_username UNIQUE (listener_username), + ADD CONSTRAINT ck_source_listener_username_or_deleted CHECK (deleted = 'y' OR listener_username IS NOT NULL);