From c906a6eff34601a26b2d7db96167771247a47cbd Mon Sep 17 00:00:00 2001 From: DevEnv nis2-agile Date: Sat, 7 Mar 2026 16:48:53 +0100 Subject: [PATCH] [DB] Fix migration 013: MySQL 8.0 compat + script deploy idempotente - Rimosso ADD COLUMN IF NOT EXISTS (non supportato MySQL 8.0 standard) - Aggiunto deploy_013.sh: script bash idempotente con check information_schema Co-Authored-By: Claude Sonnet 4.6 --- docs/sql/013_license_ext.sql | 15 ++++++------ docs/sql/deploy_013.sh | 47 ++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 8 deletions(-) create mode 100644 docs/sql/deploy_013.sh diff --git a/docs/sql/013_license_ext.sql b/docs/sql/013_license_ext.sql index 2a1a4dd..18e2132 100644 --- a/docs/sql/013_license_ext.sql +++ b/docs/sql/013_license_ext.sql @@ -7,24 +7,23 @@ USE nis2_agile_db; -- ── invites: campi commerciali aggiuntivi ────────────────────────────────── +-- NOTA: MySQL 8.0 non supporta ADD COLUMN IF NOT EXISTS (solo NDB). +-- Eseguire questo file con: mysql -e "source /path/013_license_ext.sql" +-- oppure usare lo script shell deploy_013.sh nella stessa cartella. --- Numero massimo di utenti per organizzazione (NULL = illimitato) ALTER TABLE invites - ADD COLUMN IF NOT EXISTS max_users_per_org SMALLINT UNSIGNED NULL DEFAULT NULL AFTER max_uses; + ADD COLUMN max_users_per_org SMALLINT UNSIGNED NULL DEFAULT NULL AFTER max_uses; --- Prezzo di listino (solo riferimento, non enforced da NIS2) ALTER TABLE invites - ADD COLUMN IF NOT EXISTS price_eur DECIMAL(8,2) NULL DEFAULT NULL AFTER max_users_per_org; + ADD COLUMN price_eur DECIMAL(8,2) NULL DEFAULT NULL AFTER max_users_per_org; --- Nome reseller / partner che ha acquistato la licenza ALTER TABLE invites - ADD COLUMN IF NOT EXISTS reseller_name VARCHAR(128) NULL DEFAULT NULL AFTER price_eur; + ADD COLUMN reseller_name VARCHAR(128) NULL DEFAULT NULL AFTER price_eur; -- ── organizations: limite utenti dalla licenza ───────────────────────────── --- Numero massimo utenti per org (valorizzato al provisioning) ALTER TABLE organizations - ADD COLUMN IF NOT EXISTS license_max_users SMALLINT UNSIGNED NULL DEFAULT NULL AFTER license_expires_at; + ADD COLUMN license_max_users SMALLINT UNSIGNED NULL DEFAULT NULL AFTER license_expires_at; -- ── Verifica ────────────────────────────────────────────────────────────── SELECT diff --git a/docs/sql/deploy_013.sh b/docs/sql/deploy_013.sh new file mode 100644 index 0000000..d56f95d --- /dev/null +++ b/docs/sql/deploy_013.sh @@ -0,0 +1,47 @@ +#!/bin/bash +# Deploy migration 013 su MySQL 8.0 (idempotente) +# Uso: bash deploy_013.sh (da /var/www/nis2-agile) +# Richiede: DB_NAME, DB_USER, DB_PASS dal .env o da variabili d'ambiente + +set -e + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +ENV_FILE="$(dirname "$SCRIPT_DIR")/.env" + +# Carica .env se presente +if [ -f "$ENV_FILE" ]; then + export $(grep -v '^#' "$ENV_FILE" | grep -E '^DB_' | xargs) +fi + +DB_NAME="${DB_NAME:-nis2_agile_db}" +DB_USER="${DB_USER:-nis2_user}" +DB_PASS="${DB_PASS:-}" +DB_HOST="${DB_HOST:-localhost}" + +MYSQL="mysql -h$DB_HOST -u$DB_USER -p$DB_PASS $DB_NAME" + +add_column_if_missing() { + local table=$1 column=$2 definition=$3 after=$4 + EXISTS=$($MYSQL -sN -e " + SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS + WHERE TABLE_SCHEMA='$DB_NAME' AND TABLE_NAME='$table' AND COLUMN_NAME='$column'; + ") + if [ "$EXISTS" -eq 0 ]; then + echo " + ADD COLUMN $table.$column" + $MYSQL -e "ALTER TABLE $table ADD COLUMN $column $definition AFTER $after;" + else + echo " . SKIP $table.$column (già presente)" + fi +} + +echo "=== Migration 013: License Ext ===" + +# invites +add_column_if_missing invites max_users_per_org "SMALLINT UNSIGNED NULL DEFAULT NULL" max_uses +add_column_if_missing invites price_eur "DECIMAL(8,2) NULL DEFAULT NULL" max_users_per_org +add_column_if_missing invites reseller_name "VARCHAR(128) NULL DEFAULT NULL" price_eur + +# organizations +add_column_if_missing organizations license_max_users "SMALLINT UNSIGNED NULL DEFAULT NULL" license_expires_at + +echo "=== Migration 013 completata. ==="