renderCreateTable method
Implementation
@override
List<String> renderCreateTable(
TableBlueprint blueprint, {
bool ifNotExists = false,
}) {
final statements = <String>[];
final buf = StringBuffer();
final createClause = ifNotExists
? 'CREATE TABLE IF NOT EXISTS'
: 'CREATE TABLE';
buf.writeln('$createClause "${blueprint.tableName}" (');
final parts = <String>[];
bool hasAutoIncr = false;
for (final col in blueprint.columns) {
final isAutoIncrPrimary =
col.autoIncrement && col.name == blueprint.primaryKey;
if (isAutoIncrPrimary) hasAutoIncr = true;
parts.add(' ${_renderColumn(col, isAutoIncrPrimary)}');
}
if (blueprint.primaryKey != null && !hasAutoIncr) {
parts.add(' PRIMARY KEY ("${blueprint.primaryKey}")');
}
for (final uc in blueprint.uniqueConstraints) {
final cols = uc.columns.map((c) => '"$c"').join(', ');
parts.add(' CONSTRAINT "${uc.name}" UNIQUE ($cols)');
}
for (final fk in blueprint.foreignKeys) {
parts.add(
' FOREIGN KEY ("${fk.columnName}") '
'REFERENCES "${fk.referencesTable}" ("${fk.referencesColumn}") '
'ON UPDATE ${fk.onUpdate} ON DELETE ${fk.onDelete}',
);
}
buf.write(parts.join(',\n'));
buf.write('\n)');
statements.add(buf.toString());
for (final idx in blueprint.indexes) {
statements.addAll(renderAddIndex(blueprint.tableName, idx));
}
return statements;
}