diff options
author | Ernie Miller <ernie@metautonomo.us> | 2010-03-30 15:32:39 -0400 |
---|---|---|
committer | Ernie Miller <ernie@metautonomo.us> | 2010-05-07 13:07:21 -0400 |
commit | 0433b054eebd5a53ff6c5f35383a6c0aed0015b2 (patch) | |
tree | ed07230cd0f1e033138f89e103bb2ce4cb6d6f7a /lib/arel/algebra | |
parent | 0afcfa27c9f386ca7c190cd1f66db1cdd9971f3b (diff) | |
download | rails-0433b054eebd5a53ff6c5f35383a6c0aed0015b2.tar.gz rails-0433b054eebd5a53ff6c5f35383a6c0aed0015b2.tar.bz2 rails-0433b054eebd5a53ff6c5f35383a6c0aed0015b2.zip |
Tests for notmatches and notin, and fixes for issues found in tests
Diffstat (limited to 'lib/arel/algebra')
-rw-r--r-- | lib/arel/algebra/predicates.rb | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/lib/arel/algebra/predicates.rb b/lib/arel/algebra/predicates.rb index 43606139b0..be80f2a987 100644 --- a/lib/arel/algebra/predicates.rb +++ b/lib/arel/algebra/predicates.rb @@ -14,19 +14,28 @@ module Arel end end - class Grouped < Predicate - attributes :operator, :operand1, :operands2 + class Polyadic < Predicate + attributes :operator, :operand1, :additional_operands - def initialize(operator, operand1, *operands2) + def initialize(operator, operand1, *additional_operands) @operator = operator @operand1 = operand1 - @operands2 = operands2.uniq + @additional_operands = additional_operands.uniq end def ==(other) self.class === other and + @operator == operator and @operand1 == other.operand1 and - same_elements?(@operands2, other.operands2) + same_elements?(@additional_operands, other.additional_operands) + end + + def bind(relation) + self.class.new( + operator, + operand1.find_correlate_in(relation), + *additional_operands.map {|o| o.find_correlate_in(relation)} + ) end private @@ -43,6 +52,10 @@ module Arel class Unary < Predicate attributes :operand deriving :initialize, :== + + def bind(relation) + self.class.new(operand.find_correlate_in(relation)) + end end class Binary < Predicate |