ensureHistoryTable method

void ensureHistoryTable(
  1. Database database
)

Ensures the migration history table exists and contains all known columns.

Implementation

void ensureHistoryTable(sqlite.Database database) {
  database.execute('''
    CREATE TABLE IF NOT EXISTS "$historyTableName" (
      name TEXT PRIMARY KEY,
      applied_at TEXT NOT NULL,
      statement_count INTEGER NOT NULL,
      kind TEXT NOT NULL DEFAULT 'apply',
      target_name TEXT,
      provider TEXT,
      checksum TEXT,
      before_schema TEXT,
      after_schema TEXT,
      warnings TEXT,
      rebuild_required INTEGER NOT NULL DEFAULT 0
    )
  ''');

  final columns = database
      .select('PRAGMA table_info("$historyTableName")')
      .map((row) => row['name'] as String)
      .toSet();

  if (!columns.contains('kind')) {
    database.execute(
      'ALTER TABLE "$historyTableName" '
      'ADD COLUMN kind TEXT NOT NULL DEFAULT \'apply\'',
    );
  }
  if (!columns.contains('target_name')) {
    database.execute(
      'ALTER TABLE "$historyTableName" ADD COLUMN target_name TEXT',
    );
  }
  if (!columns.contains('provider')) {
    database.execute(
      'ALTER TABLE "$historyTableName" ADD COLUMN provider TEXT',
    );
  }
  if (!columns.contains('checksum')) {
    database.execute(
      'ALTER TABLE "$historyTableName" ADD COLUMN checksum TEXT',
    );
  }
  if (!columns.contains('before_schema')) {
    database.execute(
      'ALTER TABLE "$historyTableName" ADD COLUMN before_schema TEXT',
    );
  }
  if (!columns.contains('after_schema')) {
    database.execute(
      'ALTER TABLE "$historyTableName" ADD COLUMN after_schema TEXT',
    );
  }
  if (!columns.contains('warnings')) {
    database.execute(
      'ALTER TABLE "$historyTableName" ADD COLUMN warnings TEXT',
    );
  }
  if (!columns.contains('rebuild_required')) {
    database.execute(
      'ALTER TABLE "$historyTableName" '
      'ADD COLUMN rebuild_required INTEGER NOT NULL DEFAULT 0',
    );
  }
}