diff --git a/server/migrations/002_channel_betas.sql b/server/migrations/002_channel_betas.sql index 891f03d..4d826db 100644 --- a/server/migrations/002_channel_betas.sql +++ b/server/migrations/002_channel_betas.sql @@ -3,14 +3,47 @@ -- * channel : nom du manifest à servir (NULL = default = manifest/versions.json) -- * can_see_betas : autorise la license à voir les versions taggées isBeta=true -- --- À jouer après 001_init.sql. Idempotent grâce à IF NOT EXISTS (MariaDB 10.4+). --- Pour MySQL/MariaDB plus ancien sans IF NOT EXISTS sur ALTER, voir variante en --- bas (mais OVH mutualisé tourne en MariaDB récent, on devrait être bon). +-- À jouer après 001_init.sql. +-- +-- IDEMPOTENCE : OVH mutualisé peut tourner sur MariaDB pré-10.0.2 où +-- ALTER TABLE ... IF NOT EXISTS n'existe pas. On contourne avec une PROCEDURE +-- temporaire qui consulte INFORMATION_SCHEMA avant chaque ALTER. Comme ça la +-- migration peut être re-jouée sans erreur sur n'importe quelle version +-- MariaDB / MySQL 5.5+. -ALTER TABLE licenses - ADD COLUMN IF NOT EXISTS channel VARCHAR(64) NULL AFTER max_machines, - ADD COLUMN IF NOT EXISTS can_see_betas TINYINT(1) NOT NULL DEFAULT 0 AFTER channel, - ADD INDEX IF NOT EXISTS idx_channel (channel); +DROP PROCEDURE IF EXISTS ps_launcher_migrate_002; + +DELIMITER $$ +CREATE PROCEDURE ps_launcher_migrate_002() +BEGIN + -- channel + IF NOT EXISTS ( + SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS + WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'licenses' AND COLUMN_NAME = 'channel' + ) THEN + ALTER TABLE licenses ADD COLUMN channel VARCHAR(64) NULL AFTER max_machines; + END IF; + + -- can_see_betas + IF NOT EXISTS ( + SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS + WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'licenses' AND COLUMN_NAME = 'can_see_betas' + ) THEN + ALTER TABLE licenses ADD COLUMN can_see_betas TINYINT(1) NOT NULL DEFAULT 0 AFTER channel; + END IF; + + -- index sur channel (une simple recherche bénéficie peu mais c'est pas cher) + IF NOT EXISTS ( + SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS + WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'licenses' AND INDEX_NAME = 'idx_channel' + ) THEN + ALTER TABLE licenses ADD INDEX idx_channel (channel); + END IF; +END $$ +DELIMITER ; + +CALL ps_launcher_migrate_002(); +DROP PROCEDURE ps_launcher_migrate_002; -- Note : pas de migration de data. Les licenses existantes gardent -- channel = NULL (= manifest default) et can_see_betas = 0 (= pas d'accès aux betas).