create method
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);');
}
}