Ejemplo n.º 1
0
        public override Expression Visit(DbLimitExpression expression)
        {
            Expression source     = this.Visit(expression.Argument);
            Type       sourceType = TypeHelper.GetElementType(source.Type);

            return(queryMethodExpressionBuilder.Take(source, this.Visit(expression.Limit, typeof(int))));
        }
Ejemplo n.º 2
0
                protected DbLimitExpression MinimumLimit(DbExpression input, DbLimitExpression limit, DbExpression k)
                {
                    // source.Limit(k).Limit(k2) -> source.Limit(Min(k, k2))
                    DbExpression newCount = CombineIntegers(limit.Limit, k, Math.Min);

                    return(DbExpressionBuilder.Limit(input, newCount));
                }
Ejemplo n.º 3
0
                protected static DbLimitExpression MinimumLimit(DbExpression input, DbLimitExpression limit, DbExpression k)
                {
                    // source.Limit(k).Limit(k2) -> source.Limit(Min(k, k2))
                    var newCount = CombineIntegers(limit.Limit, k, Math.Min);

                    return(input.Limit(newCount));
                }
Ejemplo n.º 4
0
 public override VfpExpression Visit(DbLimitExpression expression)
 {
     return(new VfpLimitExpression(expression.ResultType,
                                   expression.Argument.Accept(this),
                                   expression.Limit.Accept(this),
                                   expression.WithTies));
 }
Ejemplo n.º 5
0
        public override Expression Visit(DbLimitExpression expression)
        {
            Expression source = this.Visit(expression.Argument);
            Type sourceType = TypeHelper.GetElementType(source.Type);

            return queryMethodExpressionBuilder.Take(source, this.Visit(expression.Limit, typeof(int)));
        }
Ejemplo n.º 6
0
 internal LimitSortLifter(DbLimitExpression limit, DbSortExpression sort, AliasGenerator aliasGenerator)
     : base(limit, aliasGenerator)
 {
     _limit  = limit;
     _sort   = sort;
     _source = sort.Input.Expression;
 }
Ejemplo n.º 7
0
 public override void Visit(DbLimitExpression e)
 {
     Begin(e, "WithTies", e.WithTies);
     Dump(e.Argument, "Argument");
     Dump(e.Limit, "Limit");
     End(e);
 }
Ejemplo n.º 8
0
                protected DbLimitExpression SubtractFromLimit(DbExpression input, DbLimitExpression limit, DbExpression minusK)
                {
                    DbExpression newCount = CombineIntegers(limit.Limit, minusK,
                                                            (l, r) => r > l ? 0 : l - r); // can't limit to less than zero rows)

                    return(DbExpressionBuilder.Limit(input, newCount));
                }
Ejemplo n.º 9
0
 internal LimitSkipLifter(DbLimitExpression limit, DbSkipExpression skip, AliasGenerator aliasGenerator)
     : base(limit, aliasGenerator)
 {
     _limit  = limit;
     _skip   = skip;
     _source = skip.Input.Expression;
 }
Ejemplo n.º 10
0
 internal ProjectLimitSkipLifter(DbProjectExpression project, DbLimitExpression limit, DbSkipExpression skip, AliasGenerator aliasGenerator)
     : base(project, aliasGenerator)
 {
     _project = project;
     _limit   = limit;
     _skip    = skip;
     _source  = skip.Input.Expression;
 }
Ejemplo n.º 11
0
 internal ProjectLimitSortLifter(DbProjectExpression project, DbLimitExpression limit, DbSortExpression sort, AliasGenerator aliasGenerator)
     : base(project, aliasGenerator)
 {
     _project = project;
     _limit   = limit;
     _sort    = sort;
     _source  = sort.Input.Expression;
 }
Ejemplo n.º 12
0
        /// <summary>
        ///     Visitor pattern method for <see cref="DbLimitExpression" />.
        /// </summary>
        /// <param name="expression"> The DbLimitExpression that is being visited. </param>
        /// <exception cref="ArgumentNullException">
        ///     <paramref name="expression" />
        ///     is null
        /// </exception>
        public override void Visit(DbLimitExpression expression)
        {
            // #433613: PreSharp warning 56506: Parameter 'expression' to this public method must be validated: A null-dereference can occur here.
            Check.NotNull(expression, "expression");

            VisitExpression(expression.Argument);
            VisitExpression(expression.Limit);
        }
Ejemplo n.º 13
0
 public override void Visit(DbLimitExpression e)
 {
     Check.NotNull <DbLimitExpression>(e, nameof(e));
     this.Begin((DbExpression)e, "WithTies", (object)e.WithTies);
     this.Dump(e.Argument, "Argument");
     this.Dump(e.Limit, "Limit");
     this.End((DbExpression)e);
 }
Ejemplo n.º 14
0
        public override SqlFragment Visit(DbLimitExpression expression)
        {
            SelectStatement statement = (SelectStatement)VisitInputExpressionEnsureSelect(
                expression.Argument, null, null);

            statement.Limit = expression.Limit.Accept(this);
            return(statement);
        }
Ejemplo n.º 15
0
        public override LegacyCommandTrees.DbExpression Visit(DbLimitExpression expression)
        {
            Debug.Assert(expression != null, "expression != null");

            return
                (expression.Argument.Accept(this)
                 .Limit(expression.Limit.Accept(this)));
        }
Ejemplo n.º 16
0
 public override bool Visit(DbLimitExpression expression)
 {
     Check.NotNull <DbLimitExpression>(expression, nameof(expression));
     if (expression.Limit is DbParameterReferenceExpression)
     {
         throw new NotSupportedException(Strings.SqlGen_ParameterForLimitNotSupportedOnSql8);
     }
     return(this.VisitExpression(expression.Argument));
 }
Ejemplo n.º 17
0
        /// <summary>
        /// Walks the structure
        /// </summary>
        /// <param name="expression"></param>
        /// <returns></returns>
        /// <exception cref="NotSupportedException">expression.Limit is DbParameterReferenceExpression</exception>
        public override bool Visit(DbLimitExpression expression)
        {
            if (expression.Limit is DbParameterReferenceExpression)
            {
                throw EntityUtil.NotSupported(System.Data.Entity.Strings.SqlGen_ParameterForLimitNotSupportedOnSql8);
            }

            return(VisitExpression(expression.Argument));
        }
Ejemplo n.º 18
0
 public override void Visit(DbLimitExpression expression)
 {
     if (expression == null)
     {
         throw new ArgumentException("expression");
     }
     VisitExpression(expression.Argument);
     VisitExpression(expression.Limit);
 }
        public override SqlFragment Visit(DbLimitExpression expression)
        {
            SelectStatement select = (SelectStatement)VisitInputExpressionEnsureSelect(
                expression.Argument, null, null);

            select       = WrapIfNotCompatible(select, expression.ExpressionKind);
            select.Limit = expression.Limit.Accept(this);
            return(select);
        }
Ejemplo n.º 20
0
 public override void Visit(DbLimitExpression expression)
 {
     Write(expression);
     _depth++;
     Write("Argument", expression.Argument);
     Write("Limit", expression.Limit);
     Write("WithTies", expression.WithTies);
     _depth--;
 }
        private DbExpression RewriteLimitExpression(DbLimitExpression expression)
        {
            DbExpression dbExpression = this.Rewrite(expression.Argument);

            if (!object.ReferenceEquals((object)expression.Argument, (object)dbExpression))
            {
                expression = dbExpression.Limit(expression.Limit);
            }
            return((DbExpression)expression);
        }
Ejemplo n.º 22
0
        /// <summary>
        /// Implements the visitor pattern for <see cref="T:System.Data.Common.CommandTrees.DbLimitExpression"/>.
        /// </summary>
        /// <param name="expression">The <see cref="T:System.Data.Common.CommandTrees.DbLimitExpression"/> that is visited.</param>
        public override void Visit(DbLimitExpression expression)
        {
            if (expression == null)
            {
                throw new ArgumentNullException("expression");
            }

            expression.Argument.Accept(this);
            expression.Limit.Accept(this);
        }
Ejemplo n.º 23
0
        private DbExpression RewriteLimitExpression(DbLimitExpression expression)
        {
            DbExpression rewrittenInput = Rewrite(expression.Argument);

            if (!object.ReferenceEquals(expression.Argument, rewrittenInput))
            {
                // Note that here we use the original expression.Limit. It is safe to do so,
                //  because we only allow physical paging (i.e. Limit can only be a constant or parameter)
                expression = rewrittenInput.Limit(expression.Limit);
            }
            return(expression);
        }
Ejemplo n.º 24
0
 public override void Visit(DbLimitExpression e)
 {
     VisitExprKind(e.ExpressionKind);
     if (e.WithTies)
     {
         _key.Append("WithTies");
     }
     _key.Append('(');
     e.Argument.Accept(this);
     _key.Append(")(");
     e.Limit.Accept(this);
     _key.Append(')');
 }
Ejemplo n.º 25
0
 public override void Visit(DbLimitExpression e)
 {
     Check.NotNull <DbLimitExpression>(e, nameof(e));
     this.VisitExprKind(e.ExpressionKind);
     if (e.WithTies)
     {
         this._key.Append("WithTies");
     }
     this._key.Append('(');
     e.Argument.Accept((DbExpressionVisitor)this);
     this._key.Append(")(");
     e.Limit.Accept((DbExpressionVisitor)this);
     this._key.Append(')');
 }
Ejemplo n.º 26
0
        /// <summary>
        ///  Translates to TOP expression.
        /// </summary>
        /// <param name="e"></param>
        /// <returns>A <see cref="SqlBuilder"/></returns>
        public override ISqlFragment Visit(DbLimitExpression e)
        {
            Debug.Assert(e.Limit is DbConstantExpression || e.Limit is DbParameterReferenceExpression, "DbLimitExpression.Limit is of invalid expression type");

            var result = VisitExpressionEnsureSqlStatement(e.Argument, false);

            if (!IsCompatible(result, e.ExpressionKind))
            {
                TypeUsage inputType = MetadataHelpers.GetElementTypeUsage(e.Argument.ResultType);

                Symbol fromSymbol;
                result = CreateNewSelectStatement(result, "first", inputType, out fromSymbol);
                AddFromSymbol(result, "first", fromSymbol, false);
            }

            result.Top.TopCount = HandleCountExpression(e.Limit);
            return(result);
        }
Ejemplo n.º 27
0
 public override void Visit(DbLimitExpression e)
 {
     VisitExprKind(e.ExpressionKind);
     if (e.WithTies)
     {
         _key.Append("WithTies");
     }
     _key.Append('(');
     e.Argument.Accept(this);
     _key.Append(")(");
     e.Limit.Accept(this);
     _key.Append(')');
 }
Ejemplo n.º 28
0
 public override void Visit(DbLimitExpression e)
 {
     Begin(e, "WithTies", e.WithTies);
     Dump(e.Argument, "Argument");
     Dump(e.Limit, "Limit");
     End(e);
 }
 public override SqlFragment Visit(DbLimitExpression expression)
 {
   SelectStatement select = (SelectStatement)VisitInputExpressionEnsureSelect(
       expression.Argument, null, null);
   select = WrapIfNotCompatible(select, expression.ExpressionKind);
   select.Limit = expression.Limit.Accept(this);
   return select;
 }
Ejemplo n.º 30
0
 public override void Visit(DbLimitExpression expression)
 {
   if (expression == null) throw new ArgumentException("expression");
   VisitExpression(expression.Argument);
   VisitExpression(expression.Limit);
 }
Ejemplo n.º 31
0
        /// <summary>
        /// Implements the visitor pattern for <see cref="T:System.Data.Common.CommandTrees.DbLimitExpression"/>.
        /// </summary>
        /// <param name="expression">The <see cref="T:System.Data.Common.CommandTrees.DbLimitExpression"/> that is visited.</param>
        public override void Visit(DbLimitExpression expression)
        {
            if (expression == null)
            {
                throw new ArgumentNullException("expression");
            }

            expression.Argument.Accept(this);
            expression.Limit.Accept(this);
        }
Ejemplo n.º 32
0
 protected static DbLimitExpression SubtractFromLimit(DbExpression input, DbLimitExpression limit, DbExpression minusK)
 {
     var newCount = CombineIntegers(
         limit.Limit, minusK,
         (l, r) => r > l ? 0 : l - r); // can't limit to less than zero rows)
     return input.Limit(newCount);
 }
 public override DbExpression Visit(DbLimitExpression expression)
 {
     System.Diagnostics.Debug.Print("Visit(DbLimitExpression): {0}", expression);
     return base.Visit(expression);
 }
Ejemplo n.º 34
0
        /// <summary>
        ///     Visitor pattern method for <see cref="DbLimitExpression" />.
        /// </summary>
        /// <param name="expression"> The DbLimitExpression that is being visited. </param>
        /// <exception cref="ArgumentNullException">
        ///     <paramref name="expression" />
        ///     is null
        /// </exception>
        public override void Visit(DbLimitExpression expression)
        {
            // #433613: PreSharp warning 56506: Parameter 'expression' to this public method must be validated: A null-dereference can occur here.
            Check.NotNull(expression, "expression");

            VisitExpression(expression.Argument);
            VisitExpression(expression.Limit);
        }
Ejemplo n.º 35
0
 private DbExpression RewriteLimitExpression(DbLimitExpression expression)
 {
     DbExpression rewrittenInput = Rewrite(expression.Argument);
     if (!object.ReferenceEquals(expression.Argument, rewrittenInput))
     {
         // Note that here we use the original expression.Limit. It is safe to do so, 
         //  because we only allow physical paging (i.e. Limit can only be a constant or parameter)
         expression = rewrittenInput.Limit(expression.Limit);
     }
     return expression;
 }
Ejemplo n.º 36
0
 public override void Visit(DbLimitExpression expression)
 {
     Contract.Requires(expression != null);
 }
Ejemplo n.º 37
0
 public override void Visit(DbLimitExpression expression)
 {
     throw new NotSupportedException("Visit(\"DbLimitExpression\") is not supported.");
 }
Ejemplo n.º 38
0
 internal ProjectLimitSortLifter(DbProjectExpression project, DbLimitExpression limit, DbSortExpression sort, AliasGenerator aliasGenerator)
     : base(project, aliasGenerator)
 {
     _project = project;
     _limit = limit;
     _sort = sort;
     _source = sort.Input.Expression;
 }
Ejemplo n.º 39
0
 protected DbLimitExpression SubtractFromLimit(DbExpression input, DbLimitExpression limit, DbExpression minusK)
 {
     DbExpression newCount = CombineIntegers(limit.Limit, minusK,
         (l, r) => r > l ? 0 : l - r); // can't limit to less than zero rows)
     return DbExpressionBuilder.Limit(input, newCount);
 }
Ejemplo n.º 40
0
 public override bool Visit(DbLimitExpression expression)
 {
     return(VisitExpression(expression.Argument));
 }
 public override void Visit(DbLimitExpression expression) { }
Ejemplo n.º 42
0
 /// <summary>
 ///     Visitor pattern method for DbLimitExpression.
 /// </summary>
 /// <param name="expression"> The DbLimitExpression that is being visited. </param>
 public abstract void Visit(DbLimitExpression expression);
Ejemplo n.º 43
0
 protected static DbLimitExpression MinimumLimit(DbExpression input, DbLimitExpression limit, DbExpression k)
 {
     // source.Limit(k).Limit(k2) -> source.Limit(Min(k, k2))
     var newCount = CombineIntegers(limit.Limit, k, Math.Min);
     return input.Limit(newCount);
 }
Ejemplo n.º 44
0
 public override SqlFragment Visit(DbLimitExpression expression)
 {
     throw new NotImplementedException();
 }
        /// <summary>
        ///     Visitor pattern method for <see cref="DbLimitExpression" />.
        /// </summary>
        /// <param name="expression"> The DbLimitExpression that is being visited. </param>
        /// <exception cref="ArgumentNullException">
        ///     <paramref name="expression" />
        ///     is null
        /// </exception>
        public override void Visit(DbLimitExpression expression)
        {
            Check.NotNull(expression, "expression");

            VisitExpression(expression.Argument);
            VisitExpression(expression.Limit);
        }
		public override void Visit(DbLimitExpression expression)
		{
			throw new NotSupportedException("Visit(\"LimitExpression\") is not supported.");
		}
Ejemplo n.º 47
0
 protected DbLimitExpression MinimumLimit(DbExpression input, DbLimitExpression limit, DbExpression k)
 {
     // source.Limit(k).Limit(k2) -> source.Limit(Min(k, k2))
     DbExpression newCount = CombineIntegers(limit.Limit, k, Math.Min);
     return DbExpressionBuilder.Limit(input, newCount);
 }
Ejemplo n.º 48
0
 public override TreeNode Visit(DbLimitExpression e)
 {
     Check.NotNull <DbLimitExpression>(e, nameof(e));
     return(this.Visit(e.WithTies ? "LimitWithTies" : "Limit", e.Argument, e.Limit));
 }
Ejemplo n.º 49
0
 public override SqlFragment Visit(DbLimitExpression expression)
 {
     SelectStatement statement = (SelectStatement)VisitInputExpressionEnsureSelect(
         expression.Argument, null, null);
     statement.Limit = expression.Limit.Accept(this);
     return statement;
 }
Ejemplo n.º 50
0
 internal LimitSkipLifter(DbLimitExpression limit, DbSkipExpression skip, AliasGenerator aliasGenerator)
     : base(limit, aliasGenerator)
 {
     _limit = limit;
     _skip = skip;
     _source = skip.Input.Expression;
 }
Ejemplo n.º 51
0
 internal LimitSortLifter(DbLimitExpression limit, DbSortExpression sort, AliasGenerator aliasGenerator)
     : base(limit, aliasGenerator)
 {
     _limit = limit;
     _sort = sort;
     _source = sort.Input.Expression;
 }
Ejemplo n.º 52
0
 internal ProjectLimitSkipLifter(DbProjectExpression project, DbLimitExpression limit, DbSkipExpression skip, AliasGenerator aliasGenerator)
     : base(project, aliasGenerator)
 {
     _project = project;
     _limit = limit;
     _skip = skip;
     _source = skip.Input.Expression;
 }
Ejemplo n.º 53
0
 public override DbExpressionEntitySetInfo Visit(DbLimitExpression expression)
 {
     return(null);
 }
 /// <summary>
 /// Visitor pattern method for <see cref="DbLimitExpression"/>.
 /// </summary>
 /// <param name="expression">The DbLimitExpression that is being visited.</param>
 /// <exception cref="ArgumentNullException"><paramref name="expression"/> is null</exception>
 public override void Visit(DbLimitExpression expression)
 {
     VisitExpression(expression.Argument);
     VisitExpression(expression.Limit);
 }