1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00
rails--rails/lib/arel/nodes/extract.rb
Ernie Miller 6e638bba59 Add equality to ALL THE THINGS (that matter)
People are often trying to use ARel nodes inside ActiveRecord, and when
they do so, lots of things can break, because ActiveRecord relies on
Array#uniq and sometimes hash key equality to handle values that end up
in wheres, havings, etc. By implementing equality for all the nodes, we
should hopefully be able to prevent any nodes (even nodes containing
other nodes) from failing an equality check they should otherwise pass,
and alleviate many of these errors.

Fixes #130
2012-08-18 22:33:25 -04:00

34 lines
648 B
Ruby

module Arel
module Nodes
class Extract < Arel::Nodes::Unary
include Arel::Expression
include Arel::Predications
attr_accessor :field
attr_accessor :alias
def initialize expr, field, aliaz = nil
super(expr)
@field = field
@alias = aliaz && SqlLiteral.new(aliaz)
end
def as aliaz
self.alias = SqlLiteral.new(aliaz)
self
end
def hash
super ^ [@field, @alias].hash
end
def eql? other
super &&
self.field == other.field &&
self.alias == other.alias
end
alias :== :eql?
end
end
end