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