fix(migrations): apply table prefix to Phinx metadata#318
Conversation
|
Сразу скажу — в текущем виде PR вливать нельзя. Сам фикс правильный, но без переименования существующей таблицы он создаёт критический риск для всех установок с непустым Что произойдёт без RENAMEСценарий апгрейда на одной из существующих установок с
Что произойдёт по миграциям:
В худшем случае: дубли seed-данных, ошибки на UNIQUE constraints, частичное применение, и Phinx запишет «всё применено», хотя реально часть прошла с ошибкой. Восстановление руками. Плюс старая таблица Что должен сделать PRRENAME TABLE перед стартом Phinx-флоу. Логика: Самое простое место — прямо в if ($dbConfig['table_prefix'] !== '') {
$prefix = $dbConfig['table_prefix'];
$hasOld = (bool) $modx->pdo->query("SHOW TABLES LIKE 'ms3_migrations'")?->fetch();
$hasNew = (bool) $modx->pdo->query("SHOW TABLES LIKE '{$prefix}ms3_migrations'")?->fetch();
if ($hasOld && !$hasNew) {
$modx->pdo->exec("RENAME TABLE `ms3_migrations` TO `{$prefix}ms3_migrations`");
$modx->log(
\MODX\Revolution\modX::LOG_LEVEL_INFO,
'[MiniShop3] Renamed legacy Phinx metadata table ms3_migrations -> ' . $prefix . 'ms3_migrations'
);
}
}Fix self-contained, всё в одном файле, рядом с источником конфига. Альтернатива — то же самое в Тест нужно расширитьТекущий тест проверяет только новое имя таблицы. Нужны ещё кейсы (через мок PDO в том же anonymous-class паттерне):
Что нужно для мержа
После этого — мержим без оговорок. Сам фикс точечный и правильный, проблема только в migration-path для существующих установок. |
e5c0c82 to
0d33782
Compare
|
Закрыто всё:
Мелкий побочный момент — Мержим. |
Описание
Исправляет создание служебной таблицы Phinx для миграций MiniShop3: теперь
default_migration_tableучитывает MODXtable_prefix, как и остальные таблицы компонента.Без этого на установках с префиксом таблиц Phinx создавал
ms3_migrationsбез префикса, что описано в issue #313.Тип изменений
Связанные Issues
Closes #313
Как это было протестировано?
Добавлен статический регрессионный тест
PhinxMigrationTablePrefixTest.php, который загружаетphinx.phpс фейковым MODX-объектом и проверяет оба сценария: сtable_prefixи без него.Конфигурация тестирования:
betaПроверки:
Скриншоты (если применимо)
Не применимо.
Чеклист
Дополнительные заметки
Лексиконы, ESLint и скриншоты не применимы: изменение затрагивает только PHP-конфиг Phinx и статический PHP-тест. CHANGELOG не обновлялся, так как записи в проекте добавляются при подготовке релиза.
PHPStan и PHPCS не запускались. IDE показывает существующие диагностики в
phinx.php, не связанные с этой правкой: Intelephense не распознаётmodX, PHPCS ругается на формат заголовка файла.