createIfNotExists method

  1. @override
void createIfNotExists(
  1. String tableName,
  2. void callback(
    1. Blueprint table
    )
)
override

Creates the table if it does not exist already.

Implementation

@override
void createIfNotExists(
  String tableName,
  void Function(Blueprint table) callback,
) {
  final blueprint = Blueprint(tableName);
  callback(blueprint);

  final columnSQLs = blueprint.columns.map(_columnToSQL).toList();
  final constraints = _generateTableConstraints(blueprint, tableName);

  final fullSQL = [
    ...columnSQLs,
    ...constraints,
  ].join(', ');

  _queries.add('CREATE TABLE IF NOT EXISTS "$tableName" ($fullSQL);');

  // Add Indexes
  for (final column in blueprint.columns) {
    if (column.isIndexed) {
      _queries.add(
        'CREATE INDEX IF NOT EXISTS "${tableName}_${column.name}_index" ON "$tableName" ("${column.name}");',
      );
    }
  }

  for (final idx in blueprint.indexes) {
    final name = idx.name ?? '${tableName}_${idx.columns.join('_')}_index';
    final cols = idx.columns.map((c) => '"$c"').join(', ');
    _queries
        .add('CREATE INDEX IF NOT EXISTS "$name" ON "$tableName" ($cols);');
  }
}