renderCreateTable method
Implementation
@override
List<String> renderCreateTable(
TableBlueprint blueprint, {
bool ifNotExists = false,
}) {
final buf = StringBuffer();
final createClause = ifNotExists
? 'CREATE TABLE IF NOT EXISTS'
: 'CREATE TABLE';
buf.writeln('$createClause `${blueprint.tableName}` (');
final parts = <String>[];
for (final col in blueprint.columns) {
parts.add(' ${_renderColumn(col)}');
}
if (blueprint.primaryKey != null) {
final algo = blueprint.primaryAlgorithm.isNotEmpty
? ' USING ${blueprint.primaryAlgorithm}'
: '';
parts.add(' PRIMARY KEY (`${blueprint.primaryKey}`)$algo');
}
for (final uc in blueprint.uniqueConstraints) {
final cols = uc.columns.map((c) => '`$c`').join(', ');
parts.add(' CONSTRAINT `${uc.name}` UNIQUE ($cols)');
}
for (final idx in blueprint.indexes) {
final cols = idx.columns.map((c) => '`$c`').join(', ');
if (idx.type == ColumnIndex.indexKey) {
parts.add(' INDEX `${idx.name}` ($cols)');
} else {
parts.add(
' ${idx.type.name.toUpperCase()} INDEX `${idx.name}` ($cols)',
);
}
}
for (final fk in blueprint.foreignKeys) {
final constraint = fk.constrained
? 'CONSTRAINT `FK_${blueprint.tableName}_${fk.referencesTable}` '
: '';
parts.add(
' ${constraint}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)');
return [buf.toString()];
}