create method

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

Creates a new table with the given tableName and callback.

The callback receives a Blueprint to define the table columns and constraints.

Implementation

@override
void create(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 "$tableName" ($fullSQL);');

  // Add Indexes
  for (final column in blueprint.columns) {
    if (column.isIndexed) {
      _queries.add(
        'CREATE INDEX "${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 "$name" ON "$tableName" ($cols);');
  }
}