Поддержка SQLite
Как Rowcast Schema обрабатывает ограниченные DDL-возможности SQLite.
Проблема
SQLite имеет очень ограниченную поддержку ALTER TABLE. Нельзя:
- Изменить тип колонки или ограничения
- Удалить колонку (до SQLite 3.35.0)
- Добавить или удалить FK у существующей таблицы
Rebuild Pipeline
Rowcast Schema решает это автоматическим rebuild pipeline. При обнаружении неподдерживаемой DDL-операции, MigrationRunner делегирует её SqliteTableRebuilder:
- Читает текущую структуру таблицы через
PRAGMA. - Создаёт временную таблицу с новой структурой.
- Копирует данные из оригинальной таблицы.
- Удаляет оригинальную таблицу.
- Переименовывает временную таблицу.
- Пересоздаёт валидные индексы.
Поддерживаемые операции
| Операция | Описание |
|---|---|
AlterColumn |
Изменение типа, nullable, default и т.д. |
DropColumn |
Удаление колонки с сохранением данных |
AddForeignKey |
Добавление FK |
DropForeignKey |
Удаление FK |
Безопасность FK
Во время rebuild проверки FK временно отключаются:
PRAGMA foreign_keys = OFF;
-- ... rebuild ...
PRAGMA foreign_keys = ON;
Ограничения
- Переименования — не детектируются автоматически; rename = drop + create (данные теряются).
- Сложные defaults — SQLite хранит значения по умолчанию as-is; rebuilder сохраняет их, но не вычисляет выражения.