37338-vm/db/migrations/036_process_versioning.php
2026-03-02 07:38:53 +00:00

58 lines
2.1 KiB
PHP

<?php
function migrate_036($pdo) {
echo "Starting migration 036 (Process Versioning)...
";
// 1. Process Definitions
$stmt = $pdo->query("SHOW INDEX FROM process_definitions WHERE Key_name = 'code'");
if ($stmt->fetch()) {
$pdo->exec("ALTER TABLE process_definitions DROP INDEX `code`");
echo "Dropped unique index on process_definitions.code.
";
}
$stmt = $pdo->query("SHOW COLUMNS FROM process_definitions LIKE 'supersedes_definition_id'");
if (!$stmt->fetch()) {
$pdo->exec("ALTER TABLE process_definitions ADD COLUMN supersedes_definition_id INT(11) UNSIGNED NULL AFTER version");
echo "Added supersedes_definition_id to process_definitions.
";
}
$stmt = $pdo->query("SHOW COLUMNS FROM process_definitions LIKE 'is_latest'");
if (!$stmt->fetch()) {
$pdo->exec("ALTER TABLE process_definitions ADD COLUMN is_latest TINYINT(1) NOT NULL DEFAULT 1 AFTER supersedes_definition_id");
echo "Added is_latest to process_definitions.
";
}
$stmt = $pdo->query("SHOW INDEX FROM process_definitions WHERE Key_name = 'idx_code_latest_active'");
if (!$stmt->fetch()) {
$pdo->exec("ALTER TABLE process_definitions ADD INDEX idx_code_latest_active (code, is_latest, is_active)");
echo "Added index idx_code_latest_active on process_definitions.
";
}
// Ensure existing rows are marked as latest properly (all existing should be latest)
// Nothing needed, default is 1.
// 2. Process Instances
$stmt = $pdo->query("SHOW INDEX FROM process_instances WHERE Key_name = 'person_process'");
if ($stmt->fetch()) {
$pdo->exec("ALTER TABLE process_instances DROP INDEX `person_process`");
echo "Dropped unique index on process_instances.person_process.
";
}
$stmt = $pdo->query("SHOW INDEX FROM process_instances WHERE Key_name = 'idx_person_definition'");
if (!$stmt->fetch()) {
$pdo->exec("ALTER TABLE process_instances ADD INDEX idx_person_definition (person_id, process_definition_id)");
echo "Added index idx_person_definition on process_instances.
";
}
echo "Migration 036 completed.
";
}