private SqlOrderbyClause Substitute(SqlSelectSpec spec, SqlIdentifier inputParam, SqlOrderbyClause orderByClause) { if (orderByClause == null) { return(null); } if (spec is SqlSelectStarSpec) { return(orderByClause); } SqlSelectValueSpec selValue = spec as SqlSelectValueSpec; if (selValue != null) { SqlScalarExpression replaced = selValue.Expression; SqlOrderByItem[] substitutedItems = new SqlOrderByItem[orderByClause.OrderbyItems.Count]; for (int i = 0; i < substitutedItems.Length; ++i) { SqlScalarExpression substituted = SqlExpressionManipulation.Substitute(replaced, inputParam, orderByClause.OrderbyItems[i].Expression); substitutedItems[i] = SqlOrderByItem.Create(substituted, orderByClause.OrderbyItems[i].IsDescending); } SqlOrderbyClause result = SqlOrderbyClause.Create(substitutedItems); return(result); } throw new DocumentQueryException("Unexpected SQL select clause type: " + spec.Kind); }
public override SqlObject VisitOrder_by_clause([NotNull] sqlParser.Order_by_clauseContext context) { Contract.Requires(context != null); List <SqlOrderByItem> orderByItems = new List <SqlOrderByItem>(); foreach (sqlParser.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)); }
public override SqlObject Visit(SqlOrderbyClause sqlOrderByClause) { SqlOrderByItem[] items = new SqlOrderByItem[sqlOrderByClause.OrderbyItems.Length]; for (int i = 0; i < sqlOrderByClause.OrderbyItems.Length; i++) { items[i] = sqlOrderByClause.OrderbyItems[i].Accept(this) as SqlOrderByItem; } return(SqlOrderbyClause.Create(items)); }
public override SqlObject VisitOrder_by_clause([NotNull] sqlParser.Order_by_clauseContext context) { Contract.Requires(context != null); List <SqlOrderByItem> orderByItems = new List <SqlOrderByItem>(); foreach (sqlParser.Order_by_itemContext orderByItemContext in context.order_by_items().order_by_item()) { SqlOrderByItem orderByItem = (SqlOrderByItem)this.VisitOrder_by_item(orderByItemContext); orderByItems.Add(orderByItem); } return(SqlOrderbyClause.Create(orderByItems)); }
public QueryUnderConstruction UpdateOrderByClause(SqlOrderbyClause thenBy, TranslationContext context) { List <SqlOrderByItem> items = new List <SqlOrderByItem>(context.currentQuery.orderByClause.OrderbyItems); items.AddRange(thenBy.OrderbyItems); context.currentQuery.orderByClause = SqlOrderbyClause.Create(items); foreach (Binding binding in context.CurrentSubqueryBinding.TakeBindings()) { context.currentQuery.AddBinding(binding); } return(context.currentQuery); }