visitForeignKeyClause method

  1. @override
void visitForeignKeyClause(
  1. ForeignKeyClause e,
  2. void arg
)
override

Implementation

@override
void visitForeignKeyClause(ForeignKeyClause e, void arg) {
  keyword(TokenType.references);
  visit(e.foreignTable, arg);

  if (e.columnNames.isNotEmpty) {
    symbol('(');
    _join(e.columnNames, ',');
    symbol(')');
  }

  void referenceAction(ReferenceAction action) {
    switch (action) {
      case ReferenceAction.setNull:
        keyword(TokenType.set);
        keyword(TokenType.$null);
        break;
      case ReferenceAction.setDefault:
        keyword(TokenType.set);
        keyword(TokenType.$default);
        break;
      case ReferenceAction.cascade:
        keyword(TokenType.cascade);
        break;
      case ReferenceAction.restrict:
        keyword(TokenType.restrict);
        break;
      case ReferenceAction.noAction:
        keyword(TokenType.no);
        keyword(TokenType.action);
        break;
    }
  }

  if (e.onUpdate != null) {
    keyword(TokenType.on);
    keyword(TokenType.update);
    referenceAction(e.onUpdate!);
  }
  if (e.onDelete != null) {
    keyword(TokenType.on);
    keyword(TokenType.delete);
    referenceAction(e.onDelete!);
  }

  visitNullable(e.deferrable, arg);
}