Exemplo n.º 1
0
        protected override Expression VisitOrdering(OrderingExpression orderingExpression)
        {
            Check.NotNull(orderingExpression, nameof(orderingExpression));

            var expression = (SqlExpression)Visit(orderingExpression.Expression);

            return(orderingExpression.Update(expression));
        }
Exemplo n.º 2
0
 protected override Expression VisitOrdering(OrderingExpression orderingExpression)
 {
     if (orderingExpression.Expression is SqlConstantExpression ||
         orderingExpression.Expression is SqlParameterExpression ||
         (orderingExpression.Expression is SqlFragmentExpression sqlFragment && sqlFragment.Sql.Equals("(SELECT 1)", StringComparison.Ordinal)))
     {
         Sql.Append("(SELECT 1");
         GeneratePseudoFromClause();
         Sql.Append(")");
     }
        protected override Expression VisitOrdering(OrderingExpression orderingExpression)
        {
            // Jet uses the value -1 as True, so ordering by a boolean expression will first list the True values
            // before the False values, which is the opposite of what .NET and other DBMS do, which are using 1 as True.

            if (orderingExpression.Expression.TypeMapping == _boolTypeMapping)
            {
                orderingExpression = new OrderingExpression(
                    orderingExpression.Expression,
                    !orderingExpression.IsAscending);
            }

            return(base.VisitOrdering(orderingExpression));
        }
Exemplo n.º 4
0
        /// <summary>
        ///     This is an internal API that supports the Entity Framework Core infrastructure and not subject to
        ///     the same compatibility standards as public APIs. It may be changed or removed without notice in
        ///     any release. You should only use it directly in your code with extreme caution and knowing that
        ///     doing so can result in application failures when updating to a new Entity Framework Core release.
        /// </summary>
        protected override Expression VisitChildren(ExpressionVisitor visitor)
        {
            var newOrderings = new List <OrderingExpression>();
            var recreate     = false;

            foreach (var ordering in _orderings)
            {
                var newOrdering = new OrderingExpression(
                    (SqlExpression)visitor.Visit(ordering.Expression),
                    ordering.Ascending);
                newOrderings.Add(newOrdering);
                recreate |= newOrdering.Expression != ordering.Expression;
            }

            return(recreate ? new RowNumberExpression(newOrderings) : this);
        }
        protected override Expression VisitOrdering(OrderingExpression orderingExpression)
        {
            if (orderingExpression.Expression is SqlConstantExpression ||
                orderingExpression.Expression is SqlParameterExpression)
            {
                _relationalCommandBuilder.Append("(SELECT 1)");
            }
            else
            {
                Visit(orderingExpression.Expression);
            }

            if (!orderingExpression.IsAscending)
            {
                _relationalCommandBuilder.Append(" DESC");
            }

            return(orderingExpression);
        }
Exemplo n.º 6
0
        protected override Expression VisitOrdering(OrderingExpression orderingExpression)
        {
            if (orderingExpression.Expression is SqlConstantExpression ||
                orderingExpression.Expression is SqlParameterExpression)
            {
                Sql.Append("(SELECT 1");
                GeneratePseudoFromClause();
                Sql.Append(")");
            }
            else
            {
                Visit(orderingExpression.Expression);
            }

            if (!orderingExpression.IsAscending)
            {
                Sql.Append(" DESC");
            }

            return(orderingExpression);
        }
Exemplo n.º 7
0
 /// <summary>
 ///     Visits the children of the ordering expression.
 /// </summary>
 /// <param name="orderingExpression"> The expression to visit. </param>
 /// <returns> The modified expression, if it or any subexpression was modified; otherwise, returns the original expression. </returns>
 protected abstract Expression VisitOrdering([NotNull] OrderingExpression orderingExpression);
Exemplo n.º 8
0
 protected abstract Expression VisitOrdering(OrderingExpression orderingExpression);
Exemplo n.º 9
0
        protected override Expression VisitOrdering(OrderingExpression orderingExpression)
        {
            var expression = (SqlExpression)Visit(orderingExpression.Expression);

            return(orderingExpression.Update(expression));
        }
Exemplo n.º 10
0
 protected override Expression VisitOrdering(OrderingExpression orderingExpression)
 {
     Visit(orderingExpression.Expression);
     return(orderingExpression);
 }
 protected override Expression VisitOrdering(OrderingExpression x)
 {
     return(x?.Update(x.Expression.VisitNode(this)));
 }
Exemplo n.º 12
0
    protected override Expression VisitChildren(ExpressionVisitor visitor)
    {
        Check.NotNull(visitor, nameof(visitor));

        var changed = false;

        // Note that we don't have instance functions in PG

        SqlExpression[]? visitedArguments = null;

        if (!IsNiladic)
        {
            for (var i = 0; i < Arguments.Count; i++)
            {
                var visitedArgument = (SqlExpression)visitor.Visit(Arguments[i]);

                if (visitedArgument != Arguments[i] && visitedArguments is null)
                {
                    changed          = true;
                    visitedArguments = new SqlExpression[Arguments.Count];

                    for (var j = 0; j < visitedArguments.Length; j++)
                    {
                        visitedArguments[j] = Arguments[j];
                    }
                }

                if (visitedArguments is not null)
                {
                    visitedArguments[i] = visitedArgument;
                }
            }
        }

        var visitedAggregatePredicate = (SqlExpression?)visitor.Visit(AggregatePredicate);

        changed |= visitedAggregatePredicate != AggregatePredicate;

        OrderingExpression[]? visitedAggregateOrderings = null;

        for (var i = 0; i < AggregateOrderings.Count; i++)
        {
            var visitedOrdering = (OrderingExpression)visitor.Visit(AggregateOrderings[i]);
            if (visitedOrdering != AggregateOrderings[i] && visitedAggregateOrderings is null)
            {
                changed = true;
                visitedAggregateOrderings = new OrderingExpression[AggregateOrderings.Count];

                for (var j = 0; j < visitedAggregateOrderings.Length; j++)
                {
                    visitedAggregateOrderings[j] = AggregateOrderings[j];
                }
            }

            if (visitedAggregateOrderings is not null)
            {
                visitedAggregateOrderings[i] = visitedOrdering;
            }
        }

        return(changed
            ? new PostgresFunctionExpression(
                   Name, visitedArguments ?? Arguments, ArgumentNames, ArgumentSeparators,
                   IsNullable, ArgumentsPropagateNullability !,
                   IsAggregateDistinct,
                   visitedAggregatePredicate ?? AggregatePredicate,
                   visitedAggregateOrderings ?? AggregateOrderings,
                   Type, TypeMapping)
            : this);
    }