From 85a90f90fd0f8ae85aefea7b7f46715cf5d9d98f Mon Sep 17 00:00:00 2001 From: "matthias.lotz" Date: Sun, 18 Jan 2026 14:23:46 +0100 Subject: [PATCH] fix(dokuwiki): Verbessertes Pre-Migration-Script mit robuster Fehlerbehandlung MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Explizite Commits nach jeder ALTER TABLE Operation - Besseres Logging mit Statusmeldungen - Verifizierung nach Migration - Fehlerbehandlung mit detaillierten Fehlermeldungen - Prüfung ob maintenance_equipment Tabelle existiert --- .../migrations/18.0.2.1.0/pre-migration.py | 116 +++++++++++++----- 1 file changed, 84 insertions(+), 32 deletions(-) diff --git a/open_workshop_dokuwiki/migrations/18.0.2.1.0/pre-migration.py b/open_workshop_dokuwiki/migrations/18.0.2.1.0/pre-migration.py index 49fa5f0..80b3acc 100644 --- a/open_workshop_dokuwiki/migrations/18.0.2.1.0/pre-migration.py +++ b/open_workshop_dokuwiki/migrations/18.0.2.1.0/pre-migration.py @@ -1,11 +1,11 @@ # -*- coding: utf-8 -*- """ -Pre-Migration Script für open_workshop_dokuwiki 18.0.2.0.0 +Pre-Migration Script für open_workshop_dokuwiki 18.0.2.1.0 Fügt die neuen Felder wiki_status_id und wiki_doku_id zur Datenbank hinzu, BEVOR die Views validiert werden. -Dieses Script wird automatisch vor dem Upgrade ausgeführt. +Dieses Script wird automatisch vor dem Upgrade von 18.0.2.0.0 auf 18.0.2.1.0 ausgeführt. """ import logging @@ -18,39 +18,91 @@ def migrate(cr, version): Args: cr: Database cursor - version: Aktuelle Version vor dem Upgrade + version: Aktuelle Version vor dem Upgrade (sollte 18.0.2.0.0 sein) """ - _logger.info("=== Pre-Migration: Füge wiki_status_id und wiki_doku_id Felder hinzu ===") + _logger.info("=" * 80) + _logger.info("PRE-MIGRATION SCRIPT: open_workshop_dokuwiki 18.0.2.1.0") + _logger.info("Aktuelle Version: %s", version) + _logger.info("=" * 80) - # Prüfe ob die Felder bereits existieren - cr.execute(""" - SELECT column_name - FROM information_schema.columns - WHERE table_name = 'maintenance_equipment' - AND column_name IN ('wiki_status_id', 'wiki_doku_id') - """) - existing_fields = [row[0] for row in cr.fetchall()] - - # Füge wiki_status_id hinzu falls nicht vorhanden - if 'wiki_status_id' not in existing_fields: - _logger.info("Füge Spalte wiki_status_id hinzu...") + try: + # Prüfe ob die Tabelle maintenance_equipment existiert cr.execute(""" - ALTER TABLE maintenance_equipment - ADD COLUMN wiki_status_id VARCHAR + SELECT EXISTS ( + SELECT FROM information_schema.tables + WHERE table_schema = 'public' + AND table_name = 'maintenance_equipment' + ) """) - _logger.info("✓ wiki_status_id hinzugefügt") - else: - _logger.info("wiki_status_id existiert bereits") - - # Füge wiki_doku_id hinzu falls nicht vorhanden - if 'wiki_doku_id' not in existing_fields: - _logger.info("Füge Spalte wiki_doku_id hinzu...") + table_exists = cr.fetchone()[0] + + if not table_exists: + _logger.warning("Tabelle maintenance_equipment existiert nicht - überspringe Migration") + return + + _logger.info("Tabelle maintenance_equipment gefunden") + + # Prüfe ob die Felder bereits existieren cr.execute(""" - ALTER TABLE maintenance_equipment - ADD COLUMN wiki_doku_id VARCHAR + SELECT column_name + FROM information_schema.columns + WHERE table_schema = 'public' + AND table_name = 'maintenance_equipment' + AND column_name IN ('wiki_status_id', 'wiki_doku_id') """) - _logger.info("✓ wiki_doku_id hinzugefügt") - else: - _logger.info("wiki_doku_id existiert bereits") - - _logger.info("=== Pre-Migration abgeschlossen ===") + existing_fields = [row[0] for row in cr.fetchall()] + _logger.info("Bereits existierende Felder: %s", existing_fields) + + # Füge wiki_status_id hinzu falls nicht vorhanden + if 'wiki_status_id' not in existing_fields: + _logger.info("Füge Spalte wiki_status_id hinzu...") + cr.execute(""" + ALTER TABLE maintenance_equipment + ADD COLUMN wiki_status_id VARCHAR + """) + cr.commit() # Wichtig: Commit nach jeder Änderung + _logger.info("✓ Spalte wiki_status_id erfolgreich hinzugefügt") + else: + _logger.info("→ Spalte wiki_status_id existiert bereits, überspringe") + + # Füge wiki_doku_id hinzu falls nicht vorhanden + if 'wiki_doku_id' not in existing_fields: + _logger.info("Füge Spalte wiki_doku_id hinzu...") + cr.execute(""" + ALTER TABLE maintenance_equipment + ADD COLUMN wiki_doku_id VARCHAR + """) + cr.commit() # Wichtig: Commit nach jeder Änderung + _logger.info("✓ Spalte wiki_doku_id erfolgreich hinzugefügt") + else: + _logger.info("→ Spalte wiki_doku_id existiert bereits, überspringe") + + # Verifiziere dass beide Felder jetzt existieren + cr.execute(""" + SELECT column_name + FROM information_schema.columns + WHERE table_schema = 'public' + AND table_name = 'maintenance_equipment' + AND column_name IN ('wiki_status_id', 'wiki_doku_id') + ORDER BY column_name + """) + final_fields = [row[0] for row in cr.fetchall()] + _logger.info("Felder nach Migration: %s", final_fields) + + if len(final_fields) == 2: + _logger.info("=" * 80) + _logger.info("✓ PRE-MIGRATION ERFOLGREICH ABGESCHLOSSEN") + _logger.info("=" * 80) + else: + _logger.error("!" * 80) + _logger.error("FEHLER: Nicht alle Felder wurden hinzugefügt!") + _logger.error("Erwartet: ['wiki_doku_id', 'wiki_status_id']") + _logger.error("Gefunden: %s", final_fields) + _logger.error("!" * 80) + + except Exception as e: + _logger.error("!" * 80) + _logger.error("FEHLER IM PRE-MIGRATION SCRIPT!") + _logger.error("Exception: %s", str(e)) + _logger.error("!" * 80) + raise