public StringBuilder Visit(ForeignKeyClauseNode foreignKeyClauseNode) { var sb = new StringBuilder("REFERENCES "); sb.Append(foreignKeyClauseNode.TableName); sb.Append(" "); if (foreignKeyClauseNode.FieldList != null) { sb.Append("("); sb.Append(string.Join(", ", foreignKeyClauseNode.FieldList)); sb.Append(")"); } if (foreignKeyClauseNode.ForeignOnDelete != null) { foreach (var delete in foreignKeyClauseNode.ForeignOnDelete) { sb.Append(" "); sb.Append(delete.Accept(this)); } } if (foreignKeyClauseNode.ForeignOnUpdate != null) { foreach (var update in foreignKeyClauseNode.ForeignOnUpdate) { sb.Append(" "); sb.Append(update.Accept(this)); } } if (foreignKeyClauseNode.ForeignMatch != null) { foreach (var match in foreignKeyClauseNode.ForeignMatch) { sb.Append(" "); sb.Append(match.Accept(this)); } } if (foreignKeyClauseNode.ForeignDeferrable != null) { sb.Append(" "); sb.Append(foreignKeyClauseNode.ForeignDeferrable.Accept(this)); } return(sb); }
public override SQLiteParseTreeNode VisitForeign_key_clause(SQLiteParserSimpleParser.Foreign_key_clauseContext context) { var ret = new ForeignKeyClauseNode(context) { TableName = context.table_name().GetText() }; if (context.foreign_key_clause__parens_field_list() != null) { ret.FieldList = context.foreign_key_clause__parens_field_list().foreign_key_clause__column_list().id().Select(i => i.GetText()).ToList(); } if (!context.foreign_key_clause__on_delete().IsNullOrEmpty()) { ret.ForeignOnDelete = context.foreign_key_clause__on_delete().Select(i => i.Accept(this) as ForeignOnDeleteNode).ToList(); } if (!context.foreign_key_clause__match().IsNullOrEmpty()) { ret.ForeignMatch = context.foreign_key_clause__match().Select(i => i.Accept(this) as ForeignMatchNode).ToList(); } if (!context.foreign_key_clause__on_update().IsNullOrEmpty()) { ret.ForeignOnUpdate = context.foreign_key_clause__on_update().Select(i => i.Accept(this) as ForeignOnUpdateNode).ToList(); } if (context.foreign_key_clause__deferrable() != null) { ret.ForeignDeferrable = context.foreign_key_clause__deferrable().Accept(this) as ForeignDeferrableNode; } return(ret); }