Поддержка SQLite

Как Rowcast Schema обрабатывает ограниченные DDL-возможности SQLite.

Содержание

Проблема

SQLite имеет очень ограниченную поддержку ALTER TABLE. Нельзя:

  • Изменить тип колонки или ограничения
  • Удалить колонку (до SQLite 3.35.0)
  • Добавить или удалить FK у существующей таблицы

Rebuild Pipeline

Rowcast Schema решает это автоматическим rebuild pipeline. При обнаружении неподдерживаемой DDL-операции, MigrationRunner делегирует её SqliteTableRebuilder:

  1. Читает текущую структуру таблицы через PRAGMA.
  2. Создаёт временную таблицу с новой структурой.
  3. Копирует данные из оригинальной таблицы.
  4. Удаляет оригинальную таблицу.
  5. Переименовывает временную таблицу.
  6. Пересоздаёт валидные индексы.

Поддерживаемые операции

Операция Описание
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 сохраняет их, но не вычисляет выражения.