Example #1
0
        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));
        }
Example #2
0
 /// <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));
 }