constraintsAsAlterTable method

List<AlterTableSQL> constraintsAsAlterTable({
  1. bool recursive = true,
  2. bool onlyDependents = true,
})

Converts the constraints to AlterTableSQL. This helps to execute the dependente constraints.

Implementation

List<AlterTableSQL> constraintsAsAlterTable({
  bool recursive = true,
  bool onlyDependents = true,
}) {
  var constraints = this.constraints;

  if (onlyDependents) {
    constraints =
        constraints
            .where((c) => c.referenceTables?.any((t) => t != table) ?? false)
            .toList();
  }

  var alterTablesConstraint = <AlterTableSQL>[];

  for (var c in constraints) {
    var e = SQLEntry(
      'ADD',
      'ADD ${c.sql}',
      comment: c.comment,
      tables: c.tables,
      columns: c.columns,
      referenceTables: c.referenceTables,
    );
    var alterTable = AlterTableSQL(
      dialect,
      table,
      [e],
      q: q,
      parentTable: table,
    );
    alterTablesConstraint.add(alterTable);
  }

  entries.removeAll(constraints);

  _disposeCache();

  var alterTables = this.alterTables ??= <AlterTableSQL>[];
  alterTables.addAll(alterTablesConstraint);

  if (recursive) {
    var extraSQLs = allSQLBuilders.whereType<CreateTableSQL>().where(
      (e) => !identical(e, this),
    );
    for (var e in extraSQLs) {
      e.constraintsAsAlterTable(recursive: false);
    }
  }

  return alterTablesConstraint;
}