Ejemplo n.º 1
0
        internal virtual SqlRowNumber VisitRowNumber(SqlRowNumber rowNumber)
        {
            for (int i = 0, n = rowNumber.OrderBy.Count; i < n; i++)
            {
                rowNumber.OrderBy[i].Expression = this.VisitExpression(rowNumber.OrderBy[i].Expression);
            }

            return(rowNumber);
        }
Ejemplo n.º 2
0
            internal override SqlRowNumber VisitRowNumber(SqlRowNumber rowNumber)
            {
                var list = new List <SqlOrderExpression>();

                foreach (var item in rowNumber.OrderBy)
                {
                    list.Add(new SqlOrderExpression(item.OrderType, (SqlExpression)Visit(item.Expression)));
                }
                return(new SqlRowNumber(rowNumber.ClrType, rowNumber.SqlType, list, rowNumber.SourceExpression));
            }
            internal override SqlRowNumber VisitRowNumber(SqlRowNumber rowNumber)
            {
                List <SqlOrderExpression> orderBy = new List <SqlOrderExpression>();

                foreach (SqlOrderExpression expr in rowNumber.OrderBy)
                {
                    orderBy.Add(new SqlOrderExpression(expr.OrderType, (SqlExpression)this.Visit(expr.Expression)));
                }

                return(new SqlRowNumber(rowNumber.ClrType, rowNumber.SqlType, orderBy, rowNumber.SourceExpression));
            }
Ejemplo n.º 4
0
            internal override SqlRowNumber VisitRowNumber(SqlRowNumber rowNumber)
            {
                if (rowNumber.OrderBy.Count > 0)
                {
                    return(rowNumber);
                }

                SqlDuplicator             dup            = new SqlDuplicator(true);
                List <SqlOrderExpression> orderBy        = new List <SqlOrderExpression>();
                List <SqlOrderExpression> existingOrders = new List <SqlOrderExpression>();

                if (this.rowNumberOrders != null && this.rowNumberOrders.Count != 0)
                {
                    existingOrders = new List <SqlOrderExpression>(this.rowNumberOrders);
                }
                else if (this.orders != null)
                {
                    existingOrders = new List <SqlOrderExpression>(this.orders);
                }

                foreach (SqlOrderExpression expr in existingOrders)
                {
                    if (!expr.Expression.IsConstantColumn)
                    {
                        orderBy.Add(expr);
                        if (this.rowNumberOrders != null)
                        {
                            this.rowNumberOrders.Remove(expr);
                        }
                        if (this.orders != null)
                        {
                            this.orders.Remove(expr);
                        }
                    }
                }

                rowNumber.OrderBy.Clear();

                if (orderBy.Count == 0)
                {
                    List <SqlColumn> columns = SqlGatherColumnsProduced.GatherColumns(this.currentSelect.From);

                    foreach (SqlColumn col in columns)
                    {
                        if (col.Expression.SqlType.IsOrderable)
                        {
                            orderBy.Add(new SqlOrderExpression(SqlOrderType.Ascending, new SqlColumnRef(col)));
                        }
                    }

                    if (orderBy.Count == 0)
                    {
                        // insert simple column
                        SqlColumn col =
                            new SqlColumn(
                                "rowNumberOrder",
                                sql.Value(typeof(int), this.typeProvider.From(typeof(int)), 1, false, rowNumber.SourceExpression)
                                );
                        this.PushDown(col);
                        orderBy.Add(new SqlOrderExpression(SqlOrderType.Ascending, new SqlColumnRef(col)));
                    }
                }

                foreach (SqlOrderExpression sox in orderBy)
                {
                    rowNumber.OrderBy.Add(new SqlOrderExpression(sox.OrderType, (SqlExpression)dup.Duplicate(sox.Expression)));
                }

                return(rowNumber);
            }
Ejemplo n.º 5
0
 internal override SqlRowNumber VisitRowNumber(SqlRowNumber rowNumber)
 {
     this.hasRowNumber = true;
     return(rowNumber);
 }