/// <summary> /// Visit a parse tree produced by <see cref="SqlParser.select_core"/>. /// <para> /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/> /// on <paramref name="context"/>. /// </para> /// </summary> /// <param name="context">The parse tree.</param> /// <return>The visitor result.</return> public virtual Result VisitSelect_core([NotNull] SqlParser.Select_coreContext context) { return(VisitChildren(context)); }
public override object VisitSelect_core([NotNull] SqlParser.Select_coreContext context) { SelectStatement select = null; select = new SelectStatement(); if (context.table_or_subquery() != null) { if (context.table_or_subquery().Length > 1) { select.Table = (TableName)VisitTable_or_subquery(context.table_or_subquery(0)); select.IsJoin = true; select.JoinTables = new List <JoinTable>(); for (int i = 1; i < context.table_or_subquery().Length; i++) { select.JoinTables.Add((new JoinTable() { JoinType = JoinType.Unknown, Table = (TableName)VisitTable_or_subquery(context.table_or_subquery(i)) })); } } else if (context.table_or_subquery().Length == 1) { select.Table = (TableName)VisitTable_or_subquery(context.table_or_subquery(0)); } } if (context.join_clause() != null) { select.IsJoin = true; select.Table = (TableName)VisitTable_or_subquery(context.join_clause().table_or_subquery()); var noAlias = false;; if (select.Table.Alias.ToUpper() == "INNER" || select.Table.Alias.ToUpper() == "CROSS") { noAlias = true; } select.JoinTables = new List <JoinTable>(); foreach (var item in context.join_clause().join_right()) { var joinTable = (JoinTable)VisitJoin_right(item); if (noAlias) { joinTable.JoinType = select.Table.Alias.ToUpper() == "INNER" ? JoinType.Inner : JoinType.Cross; select.Table.Alias = ""; } select.JoinTables.Add(joinTable); } } if (context.result_column() != null) { select.Columns = new List <ColumnExpression>(); foreach (var item in context.result_column()) { select.Columns.Add((ColumnExpression)VisitResult_column(item)); } } if (context.where_clause() != null) { select.Where = (IExpression)VisitWhere_clause(context.where_clause()); if (select.Where is LiteralValueExpression) { throw new SQLParseException($"Incorrect syntax near '{context.where_clause().GetChild(0)}'"); } } if (context.groupby_clause() != null) { select.Groupby = (GroupbyClause)VisitGroupby_clause(context.groupby_clause()); } return(select); }