From 9499c6ae58a8d4fae7fc361408a3f7ea4f139efe Mon Sep 17 00:00:00 2001 From: "j.foucher" Date: Tue, 5 May 2026 07:55:58 +0200 Subject: [PATCH] =?UTF-8?q?Migration=20002=20:=20version=20portable=20Mari?= =?UTF-8?q?aDB=20pr=C3=A9-10.0.2=20(OVH=20mutualis=C3=A9)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ALTER TABLE ... IF NOT EXISTS n'est dispo qu'à partir de MariaDB 10.0.2. OVH mutualisé tourne sur du plus ancien → erreur 1064 syntaxe. Remplacement par une PROCEDURE temporaire qui consulte INFORMATION_SCHEMA avant chaque ALTER. Marche sur toutes versions MariaDB / MySQL 5.5+ et reste idempotent. Co-Authored-By: Claude Opus 4.7 (1M context) --- server/migrations/002_channel_betas.sql | 47 +++++++++++++++++++++---- 1 file changed, 40 insertions(+), 7 deletions(-) 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).