public virtual void Visit(SqlRowNumber node)
 {
     foreach (SqlOrder order in node.OrderBy)
     {
         VisitInternal(order);
     }
 }
Esempio n. 2
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;
 }
Esempio n. 3
0
 public void Visit(SqlRowNumber node)
 {
     foreach (var order in node.OrderBy)
     {
         Visit(order);
     }
 }
            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);
            }
        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));
        }
            internal override SqlRowNumber VisitRowNumber(SqlRowNumber rowNumber) {
                sb.Append("ROW_NUMBER() OVER (ORDER BY ");

                for (int i = 0, n = rowNumber.OrderBy.Count; i < n; i++) {
                    SqlOrderExpression exp = rowNumber.OrderBy[i];

                    if (i > 0) sb.Append(", ");

                    this.Visit(exp.Expression);

                    if (exp.OrderType == SqlOrderType.Descending) {
                        sb.Append(" DESC");
                    }
                }

                sb.Append(")");

                return rowNumber;
            }
            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;
            }
 internal override SqlRowNumber VisitRowNumber(SqlRowNumber rowNumber) {
     this.hasRowNumber = true;
     return rowNumber;
 }
Esempio n. 9
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;
 }
Esempio n. 10
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);
        }
Esempio n. 11
0
 internal override SqlRowNumber VisitRowNumber(SqlRowNumber rowNumber)
 {
     return(rowNumber);
 }
Esempio n. 12
0
 internal override SqlRowNumber VisitRowNumber(SqlRowNumber rowNumber)
 {
     hasRowNumber = true;
     return(rowNumber);
 }