public override SqlObject VisitOrder_by_clause(AntlrSqlParser.Order_by_clauseContext context) { Contract.Requires(context != null); List <SqlOrderByItem> orderByItems = new List <SqlOrderByItem>(); foreach (AntlrSqlParser.Order_by_itemContext orderByItemContext in context.order_by_items().order_by_item()) { SqlScalarExpression expression = (SqlScalarExpression)this.Visit(orderByItemContext.scalar_expression()); bool isDescending = false; if (orderByItemContext.sort_order() != null) { if (orderByItemContext.sort_order().K_ASC() != null) { isDescending = false; } else if (orderByItemContext.sort_order().K_DESC() != null) { isDescending = true; } else { throw new ArgumentOutOfRangeException($"Unknown sort order : {orderByItemContext.sort_order()}."); } } SqlOrderByItem orderByItem = SqlOrderByItem.Create(expression, isDescending); orderByItems.Add(orderByItem); } return(SqlOrderbyClause.Create(orderByItems)); }
/// <summary> /// Visit a parse tree produced by <see cref="AntlrSqlParser.order_by_clause"/>. /// <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 VisitOrder_by_clause([NotNull] AntlrSqlParser.Order_by_clauseContext context) { return(VisitChildren(context)); }