class Arel::Nodes::Window

def eql?(other)

def eql?(other)
  self.class == other.class &&
    self.orders == other.orders &&
    self.framing == other.framing &&
    self.partitions == other.partitions
end

def frame(expr)

def frame(expr)
  @framing = expr
end

def hash

def hash
  [@orders, @framing].hash
end

def initialize

def initialize
  @orders = []
  @partitions = []
  @framing = nil
end

def initialize_copy(other)

def initialize_copy(other)
  super
  @orders = @orders.map { |x| x.clone }
end

def order(*expr)

def order(*expr)
  # FIXME: We SHOULD NOT be converting these to SqlLiteral automatically
  @orders.concat expr.map { |x|
    String === x || Symbol === x ? Nodes::SqlLiteral.new(x.to_s) : x
  }
  self
end

def partition(*expr)

def partition(*expr)
  # FIXME: We SHOULD NOT be converting these to SqlLiteral automatically
  @partitions.concat expr.map { |x|
    String === x || Symbol === x ? Nodes::SqlLiteral.new(x.to_s) : x
  }
  self
end

def range(expr = nil)

def range(expr = nil)
  if @framing
    Range.new(expr)
  else
    frame(Range.new(expr))
  end
end

def rows(expr = nil)

def rows(expr = nil)
  if @framing
    Rows.new(expr)
  else
    frame(Rows.new(expr))
  end
end