renderAlterAddColumns method

  1. @override
List<String> renderAlterAddColumns(
  1. String table,
  2. TableBlueprint changes, {
  3. String afterColumn = '',
  4. String beforeColumn = '',
})
override

Implementation

@override
List<String> renderAlterAddColumns(
  String table,
  TableBlueprint changes, {
  String afterColumn = '',
  String beforeColumn = '',
}) {
  final statements = <String>[];

  for (final col in changes.columns) {
    statements.add(
      'ALTER TABLE "$table" ADD COLUMN ${_renderColumn(col, false)}',
    );
  }

  statements.addAll(_columnComments(table, changes.columns));

  if (changes.primaryKey != null) {
    statements.add(
      'ALTER TABLE "$table" ADD PRIMARY KEY ("${changes.primaryKey}")',
    );
  }

  for (final uc in changes.uniqueConstraints) {
    final cols = uc.columns.map((c) => '"$c"').join(', ');
    statements.add(
      'ALTER TABLE "$table" ADD CONSTRAINT "${uc.name}" UNIQUE ($cols)',
    );
  }

  for (final idx in changes.indexes) {
    statements.addAll(renderAddIndex(table, idx));
  }

  for (final fk in changes.foreignKeys) {
    final constraint = fk.constrained
        ? 'CONSTRAINT "FK_${table}_${fk.referencesTable}" '
        : '';
    statements.add(
      'ALTER TABLE "$table" ADD ${constraint}FOREIGN KEY ("${fk.columnName}") '
      'REFERENCES "${fk.referencesTable}" ("${fk.referencesColumn}") '
      'ON UPDATE ${fk.onUpdate} ON DELETE ${fk.onDelete}',
    );
  }

  return statements;
}