fix(dokuwiki): Verbessertes Pre-Migration-Script mit robuster Fehlerbehandlung

- 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
This commit is contained in:
Matthias Lotz 2026-01-18 14:23:46 +01:00
parent 0d27ca36b0
commit 85a90f90fd

View File

@ -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