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;
}