renderCreateTable method
Implementation
@override
List<String> renderCreateTable(
TableBlueprint blueprint, {
bool ifNotExists = false,
}) {
final statements = <String>[];
final required = <String>[];
final properties = <String, dynamic>{};
for (final col in blueprint.columns) {
properties[col.name] = _mongoBsonSchema(col);
if (!col.nullable) required.add(col.name);
}
final validator = <String, dynamic>{
'\$jsonSchema': {
'bsonType': 'object',
if (required.isNotEmpty) 'required': required,
'properties': properties,
},
};
statements.add(
jsonEncode({
'_vania_migration': 'createCollection',
'name': blueprint.tableName,
'options': {'validator': validator},
}),
);
for (final idx in blueprint.indexes) {
statements.add(
jsonEncode({
'_vania_migration': 'createIndex',
'collection': blueprint.tableName,
'keys': {for (final c in idx.columns) c: 1},
'options': {
'name': idx.name,
if (idx.type == ColumnIndex.unique) 'unique': true,
},
}),
);
}
for (final uc in blueprint.uniqueConstraints) {
statements.add(
jsonEncode({
'_vania_migration': 'createIndex',
'collection': blueprint.tableName,
'keys': {for (final c in uc.columns) c: 1},
'options': {'name': uc.name, 'unique': true},
}),
);
}
for (final fk in blueprint.foreignKeys) {
statements.add(
jsonEncode({
'_vania_migration': 'createIndex',
'collection': blueprint.tableName,
'keys': {fk.columnName: 1},
'options': {'name': 'idx_fk_${fk.columnName}'},
}),
);
}
return statements;
}