mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Merge branch 'brynary'
This commit is contained in:
commit
c69dfd53de
32 changed files with 116 additions and 116 deletions
|
@ -4,4 +4,4 @@ require "arel/algebra/attributes/decimal"
|
||||||
require "arel/algebra/attributes/float"
|
require "arel/algebra/attributes/float"
|
||||||
require "arel/algebra/attributes/integer"
|
require "arel/algebra/attributes/integer"
|
||||||
require "arel/algebra/attributes/string"
|
require "arel/algebra/attributes/string"
|
||||||
require "arel/algebra/attributes/time"
|
require "arel/algebra/attributes/time"
|
||||||
|
|
|
@ -85,119 +85,119 @@ module Arel
|
||||||
def eq(other)
|
def eq(other)
|
||||||
Predicates::Equality.new(self, other)
|
Predicates::Equality.new(self, other)
|
||||||
end
|
end
|
||||||
|
|
||||||
def eq_any(*others)
|
def eq_any(*others)
|
||||||
Predicates::Any.build(Predicates::Equality, self, *others)
|
Predicates::Any.build(Predicates::Equality, self, *others)
|
||||||
end
|
end
|
||||||
|
|
||||||
def eq_all(*others)
|
def eq_all(*others)
|
||||||
Predicates::All.build(Predicates::Equality, self, *others)
|
Predicates::All.build(Predicates::Equality, self, *others)
|
||||||
end
|
end
|
||||||
|
|
||||||
def not_eq(other)
|
def not_eq(other)
|
||||||
Predicates::Inequality.new(self, other)
|
Predicates::Inequality.new(self, other)
|
||||||
end
|
end
|
||||||
|
|
||||||
def not_eq_any(*others)
|
def not_eq_any(*others)
|
||||||
Predicates::Any.build(Predicates::Inequality, self, *others)
|
Predicates::Any.build(Predicates::Inequality, self, *others)
|
||||||
end
|
end
|
||||||
|
|
||||||
def not_eq_all(*others)
|
def not_eq_all(*others)
|
||||||
Predicates::All.build(Predicates::Inequality, self, *others)
|
Predicates::All.build(Predicates::Inequality, self, *others)
|
||||||
end
|
end
|
||||||
|
|
||||||
def lt(other)
|
def lt(other)
|
||||||
Predicates::LessThan.new(self, other)
|
Predicates::LessThan.new(self, other)
|
||||||
end
|
end
|
||||||
|
|
||||||
def lt_any(*others)
|
def lt_any(*others)
|
||||||
Predicates::Any.build(Predicates::LessThan, self, *others)
|
Predicates::Any.build(Predicates::LessThan, self, *others)
|
||||||
end
|
end
|
||||||
|
|
||||||
def lt_all(*others)
|
def lt_all(*others)
|
||||||
Predicates::All.build(Predicates::LessThan, self, *others)
|
Predicates::All.build(Predicates::LessThan, self, *others)
|
||||||
end
|
end
|
||||||
|
|
||||||
def lteq(other)
|
def lteq(other)
|
||||||
Predicates::LessThanOrEqualTo.new(self, other)
|
Predicates::LessThanOrEqualTo.new(self, other)
|
||||||
end
|
end
|
||||||
|
|
||||||
def lteq_any(*others)
|
def lteq_any(*others)
|
||||||
Predicates::Any.build(Predicates::LessThanOrEqualTo, self, *others)
|
Predicates::Any.build(Predicates::LessThanOrEqualTo, self, *others)
|
||||||
end
|
end
|
||||||
|
|
||||||
def lteq_all(*others)
|
def lteq_all(*others)
|
||||||
Predicates::All.build(Predicates::LessThanOrEqualTo, self, *others)
|
Predicates::All.build(Predicates::LessThanOrEqualTo, self, *others)
|
||||||
end
|
end
|
||||||
|
|
||||||
def gt(other)
|
def gt(other)
|
||||||
Predicates::GreaterThan.new(self, other)
|
Predicates::GreaterThan.new(self, other)
|
||||||
end
|
end
|
||||||
|
|
||||||
def gt_any(*others)
|
def gt_any(*others)
|
||||||
Predicates::Any.build(Predicates::GreaterThan, self, *others)
|
Predicates::Any.build(Predicates::GreaterThan, self, *others)
|
||||||
end
|
end
|
||||||
|
|
||||||
def gt_all(*others)
|
def gt_all(*others)
|
||||||
Predicates::All.build(Predicates::GreaterThan, self, *others)
|
Predicates::All.build(Predicates::GreaterThan, self, *others)
|
||||||
end
|
end
|
||||||
|
|
||||||
def gteq(other)
|
def gteq(other)
|
||||||
Predicates::GreaterThanOrEqualTo.new(self, other)
|
Predicates::GreaterThanOrEqualTo.new(self, other)
|
||||||
end
|
end
|
||||||
|
|
||||||
def gteq_any(*others)
|
def gteq_any(*others)
|
||||||
Predicates::Any.build(Predicates::GreaterThanOrEqualTo, self, *others)
|
Predicates::Any.build(Predicates::GreaterThanOrEqualTo, self, *others)
|
||||||
end
|
end
|
||||||
|
|
||||||
def gteq_all(*others)
|
def gteq_all(*others)
|
||||||
Predicates::All.build(Predicates::GreaterThanOrEqualTo, self, *others)
|
Predicates::All.build(Predicates::GreaterThanOrEqualTo, self, *others)
|
||||||
end
|
end
|
||||||
|
|
||||||
def matches(other)
|
def matches(other)
|
||||||
Predicates::Match.new(self, other)
|
Predicates::Match.new(self, other)
|
||||||
end
|
end
|
||||||
|
|
||||||
def matches_any(*others)
|
def matches_any(*others)
|
||||||
Predicates::Any.build(Predicates::Match, self, *others)
|
Predicates::Any.build(Predicates::Match, self, *others)
|
||||||
end
|
end
|
||||||
|
|
||||||
def matches_all(*others)
|
def matches_all(*others)
|
||||||
Predicates::All.build(Predicates::Match, self, *others)
|
Predicates::All.build(Predicates::Match, self, *others)
|
||||||
end
|
end
|
||||||
|
|
||||||
def not_matches(other)
|
def not_matches(other)
|
||||||
Predicates::NotMatch.new(self, other)
|
Predicates::NotMatch.new(self, other)
|
||||||
end
|
end
|
||||||
|
|
||||||
def not_matches_any(*others)
|
def not_matches_any(*others)
|
||||||
Predicates::Any.build(Predicates::NotMatch, self, *others)
|
Predicates::Any.build(Predicates::NotMatch, self, *others)
|
||||||
end
|
end
|
||||||
|
|
||||||
def not_matches_all(*others)
|
def not_matches_all(*others)
|
||||||
Predicates::All.build(Predicates::NotMatch, self, *others)
|
Predicates::All.build(Predicates::NotMatch, self, *others)
|
||||||
end
|
end
|
||||||
|
|
||||||
def in(other)
|
def in(other)
|
||||||
Predicates::In.new(self, other)
|
Predicates::In.new(self, other)
|
||||||
end
|
end
|
||||||
|
|
||||||
def in_any(*others)
|
def in_any(*others)
|
||||||
Predicates::Any.build(Predicates::In, self, *others)
|
Predicates::Any.build(Predicates::In, self, *others)
|
||||||
end
|
end
|
||||||
|
|
||||||
def in_all(*others)
|
def in_all(*others)
|
||||||
Predicates::All.build(Predicates::In, self, *others)
|
Predicates::All.build(Predicates::In, self, *others)
|
||||||
end
|
end
|
||||||
|
|
||||||
def not_in(other)
|
def not_in(other)
|
||||||
Predicates::NotIn.new(self, other)
|
Predicates::NotIn.new(self, other)
|
||||||
end
|
end
|
||||||
|
|
||||||
def not_in_any(*others)
|
def not_in_any(*others)
|
||||||
Predicates::Any.build(Predicates::NotIn, self, *others)
|
Predicates::Any.build(Predicates::NotIn, self, *others)
|
||||||
end
|
end
|
||||||
|
|
||||||
def not_in_all(*others)
|
def not_in_all(*others)
|
||||||
Predicates::All.build(Predicates::NotIn, self, *others)
|
Predicates::All.build(Predicates::NotIn, self, *others)
|
||||||
end
|
end
|
||||||
|
|
|
@ -7,4 +7,4 @@ module Arel
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -64,4 +64,4 @@ module Arel
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -8,23 +8,23 @@ module Arel
|
||||||
def and(other_predicate)
|
def and(other_predicate)
|
||||||
And.new(self, other_predicate)
|
And.new(self, other_predicate)
|
||||||
end
|
end
|
||||||
|
|
||||||
def complement
|
def complement
|
||||||
Not.new(self)
|
Not.new(self)
|
||||||
end
|
end
|
||||||
|
|
||||||
def not
|
def not
|
||||||
self.complement
|
self.complement
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class Polyadic < Predicate
|
class Polyadic < Predicate
|
||||||
attributes :predicates
|
attributes :predicates
|
||||||
|
|
||||||
def initialize(*predicates)
|
def initialize(*predicates)
|
||||||
@predicates = predicates
|
@predicates = predicates
|
||||||
end
|
end
|
||||||
|
|
||||||
# Build a Polyadic predicate based on:
|
# Build a Polyadic predicate based on:
|
||||||
# * <tt>operator</tt> - The Predicate subclass that defines the type of operation
|
# * <tt>operator</tt> - The Predicate subclass that defines the type of operation
|
||||||
# (LessThan, Equality, etc)
|
# (LessThan, Equality, etc)
|
||||||
|
@ -37,19 +37,19 @@ module Arel
|
||||||
end
|
end
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
def ==(other)
|
def ==(other)
|
||||||
same_elements?(@predicates, other.predicates)
|
same_elements?(@predicates, other.predicates)
|
||||||
end
|
end
|
||||||
|
|
||||||
def bind(relation)
|
def bind(relation)
|
||||||
self.class.new(
|
self.class.new(
|
||||||
*predicates.map {|p| p.find_correlate_in(relation)}
|
*predicates.map {|p| p.find_correlate_in(relation)}
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def same_elements?(a1, a2)
|
def same_elements?(a1, a2)
|
||||||
[:select, :inject, :size].each do |m|
|
[:select, :inject, :size].each do |m|
|
||||||
return false unless [a1, a2].each {|a| a.respond_to?(m) }
|
return false unless [a1, a2].each {|a| a.respond_to?(m) }
|
||||||
|
@ -58,28 +58,28 @@ module Arel
|
||||||
a2.inject({}) { |h,e| h[e] = a2.select { |i| i == e }.size; h }
|
a2.inject({}) { |h,e| h[e] = a2.select { |i| i == e }.size; h }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class Any < Polyadic
|
class Any < Polyadic
|
||||||
def complement
|
def complement
|
||||||
All.new(*predicates.map {|p| p.complement})
|
All.new(*predicates.map {|p| p.complement})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class All < Polyadic
|
class All < Polyadic
|
||||||
def complement
|
def complement
|
||||||
Any.new(*predicates.map {|p| p.complement})
|
Any.new(*predicates.map {|p| p.complement})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class Unary < Predicate
|
class Unary < Predicate
|
||||||
attributes :operand
|
attributes :operand
|
||||||
deriving :initialize, :==
|
deriving :initialize, :==
|
||||||
|
|
||||||
def bind(relation)
|
def bind(relation)
|
||||||
self.class.new(operand.find_correlate_in(relation))
|
self.class.new(operand.find_correlate_in(relation))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class Not < Unary
|
class Not < Unary
|
||||||
def complement
|
def complement
|
||||||
operand
|
operand
|
||||||
|
@ -100,7 +100,7 @@ module Arel
|
||||||
self.class.new(operand1.find_correlate_in(relation), operand2.find_correlate_in(relation))
|
self.class.new(operand1.find_correlate_in(relation), operand2.find_correlate_in(relation))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class CompoundPredicate < Binary; end
|
class CompoundPredicate < Binary; end
|
||||||
|
|
||||||
class And < CompoundPredicate
|
class And < CompoundPredicate
|
||||||
|
@ -108,7 +108,7 @@ module Arel
|
||||||
Or.new(operand1.complement, operand2.complement)
|
Or.new(operand1.complement, operand2.complement)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class Or < CompoundPredicate
|
class Or < CompoundPredicate
|
||||||
def complement
|
def complement
|
||||||
And.new(operand1.complement, operand2.complement)
|
And.new(operand1.complement, operand2.complement)
|
||||||
|
@ -121,7 +121,7 @@ module Arel
|
||||||
((operand1 == other.operand1 and operand2 == other.operand2) or
|
((operand1 == other.operand1 and operand2 == other.operand2) or
|
||||||
(operand1 == other.operand2 and operand2 == other.operand1))
|
(operand1 == other.operand2 and operand2 == other.operand1))
|
||||||
end
|
end
|
||||||
|
|
||||||
def complement
|
def complement
|
||||||
Inequality.new(operand1, operand2)
|
Inequality.new(operand1, operand2)
|
||||||
end
|
end
|
||||||
|
@ -133,54 +133,54 @@ module Arel
|
||||||
((operand1 == other.operand1 and operand2 == other.operand2) or
|
((operand1 == other.operand1 and operand2 == other.operand2) or
|
||||||
(operand1 == other.operand2 and operand2 == other.operand1))
|
(operand1 == other.operand2 and operand2 == other.operand1))
|
||||||
end
|
end
|
||||||
|
|
||||||
def complement
|
def complement
|
||||||
Equality.new(operand1, operand2)
|
Equality.new(operand1, operand2)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class GreaterThanOrEqualTo < Binary
|
class GreaterThanOrEqualTo < Binary
|
||||||
def complement
|
def complement
|
||||||
LessThan.new(operand1, operand2)
|
LessThan.new(operand1, operand2)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class GreaterThan < Binary
|
class GreaterThan < Binary
|
||||||
def complement
|
def complement
|
||||||
LessThanOrEqualTo.new(operand1, operand2)
|
LessThanOrEqualTo.new(operand1, operand2)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class LessThanOrEqualTo < Binary
|
class LessThanOrEqualTo < Binary
|
||||||
def complement
|
def complement
|
||||||
GreaterThan.new(operand1, operand2)
|
GreaterThan.new(operand1, operand2)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class LessThan < Binary
|
class LessThan < Binary
|
||||||
def complement
|
def complement
|
||||||
GreaterThanOrEqualTo.new(operand1, operand2)
|
GreaterThanOrEqualTo.new(operand1, operand2)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class Match < Binary
|
class Match < Binary
|
||||||
def complement
|
def complement
|
||||||
NotMatch.new(operand1, operand2)
|
NotMatch.new(operand1, operand2)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class NotMatch < Binary
|
class NotMatch < Binary
|
||||||
def complement
|
def complement
|
||||||
Match.new(operand1, operand2)
|
Match.new(operand1, operand2)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class In < Binary
|
class In < Binary
|
||||||
def complement
|
def complement
|
||||||
NotIn.new(operand1, operand2)
|
NotIn.new(operand1, operand2)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class NotIn < Binary
|
class NotIn < Binary
|
||||||
def complement
|
def complement
|
||||||
In.new(operand1, operand2)
|
In.new(operand1, operand2)
|
||||||
|
|
|
@ -5,19 +5,19 @@ module Arel
|
||||||
operand1.eval(row).send(operator, operand2.eval(row))
|
operand1.eval(row).send(operator, operand2.eval(row))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class Unary < Predicate
|
class Unary < Predicate
|
||||||
def eval(row)
|
def eval(row)
|
||||||
operand.eval(row).send(operator)
|
operand.eval(row).send(operator)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class Not < Unary
|
class Not < Unary
|
||||||
def eval(row)
|
def eval(row)
|
||||||
!operand.eval(row)
|
!operand.eval(row)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class Polyadic < Predicate
|
class Polyadic < Predicate
|
||||||
def eval(row)
|
def eval(row)
|
||||||
predicates.send(compounder) do |operation|
|
predicates.send(compounder) do |operation|
|
||||||
|
@ -25,15 +25,15 @@ module Arel
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class Any < Polyadic
|
class Any < Polyadic
|
||||||
def compounder; :any? end
|
def compounder; :any? end
|
||||||
end
|
end
|
||||||
|
|
||||||
class All < Polyadic
|
class All < Polyadic
|
||||||
def compounder; :all? end
|
def compounder; :all? end
|
||||||
end
|
end
|
||||||
|
|
||||||
class CompoundPredicate < Binary
|
class CompoundPredicate < Binary
|
||||||
def eval(row)
|
def eval(row)
|
||||||
eval "operand1.eval(row) #{operator} operand2.eval(row)"
|
eval "operand1.eval(row) #{operator} operand2.eval(row)"
|
||||||
|
@ -77,7 +77,7 @@ module Arel
|
||||||
class Match < Binary
|
class Match < Binary
|
||||||
def operator; :=~ end
|
def operator; :=~ end
|
||||||
end
|
end
|
||||||
|
|
||||||
class NotMatch < Binary
|
class NotMatch < Binary
|
||||||
def eval(row)
|
def eval(row)
|
||||||
operand1.eval(row) !~ operand2.eval(row)
|
operand1.eval(row) !~ operand2.eval(row)
|
||||||
|
@ -89,7 +89,7 @@ module Arel
|
||||||
operand2.eval(row).include?(operand1.eval(row))
|
operand2.eval(row).include?(operand1.eval(row))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class NotIn < Binary
|
class NotIn < Binary
|
||||||
def eval(row)
|
def eval(row)
|
||||||
!(operand2.eval(row).include?(operand1.eval(row)))
|
!(operand2.eval(row).include?(operand1.eval(row)))
|
||||||
|
|
|
@ -37,4 +37,4 @@ module Arel
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -12,7 +12,7 @@ module Arel
|
||||||
def inclusion_predicate_sql
|
def inclusion_predicate_sql
|
||||||
"IN"
|
"IN"
|
||||||
end
|
end
|
||||||
|
|
||||||
def exclusion_predicate_sql
|
def exclusion_predicate_sql
|
||||||
"NOT IN"
|
"NOT IN"
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,7 +4,7 @@ module Arel
|
||||||
def equality_predicate_sql
|
def equality_predicate_sql
|
||||||
'IS'
|
'IS'
|
||||||
end
|
end
|
||||||
|
|
||||||
def inequality_predicate_sql
|
def inequality_predicate_sql
|
||||||
'IS NOT'
|
'IS NOT'
|
||||||
end
|
end
|
||||||
|
|
|
@ -8,7 +8,7 @@ module Arel
|
||||||
def equality_predicate_sql
|
def equality_predicate_sql
|
||||||
'='
|
'='
|
||||||
end
|
end
|
||||||
|
|
||||||
def inequality_predicate_sql
|
def inequality_predicate_sql
|
||||||
'!='
|
'!='
|
||||||
end
|
end
|
||||||
|
|
|
@ -8,7 +8,7 @@ module Arel
|
||||||
def inclusion_predicate_sql
|
def inclusion_predicate_sql
|
||||||
"BETWEEN"
|
"BETWEEN"
|
||||||
end
|
end
|
||||||
|
|
||||||
def exclusion_predicate_sql
|
def exclusion_predicate_sql
|
||||||
"NOT BETWEEN"
|
"NOT BETWEEN"
|
||||||
end
|
end
|
||||||
|
|
|
@ -5,13 +5,13 @@ module Arel
|
||||||
"#{operand1.to_sql} #{predicate_sql} #{operand1.format(operand2)}"
|
"#{operand1.to_sql} #{predicate_sql} #{operand1.format(operand2)}"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class Unary < Predicate
|
class Unary < Predicate
|
||||||
def to_sql(formatter = nil)
|
def to_sql(formatter = nil)
|
||||||
"#{predicate_sql} (#{operand.to_sql(formatter)})"
|
"#{predicate_sql} (#{operand.to_sql(formatter)})"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class Not < Unary
|
class Not < Unary
|
||||||
def predicate_sql; "NOT" end
|
def predicate_sql; "NOT" end
|
||||||
end
|
end
|
||||||
|
@ -29,19 +29,19 @@ module Arel
|
||||||
class And < CompoundPredicate
|
class And < CompoundPredicate
|
||||||
def predicate_sql; "AND" end
|
def predicate_sql; "AND" end
|
||||||
end
|
end
|
||||||
|
|
||||||
class Polyadic < Predicate
|
class Polyadic < Predicate
|
||||||
def to_sql(formatter = nil)
|
def to_sql(formatter = nil)
|
||||||
"(" +
|
"(" +
|
||||||
predicates.map {|p| p.to_sql(formatter)}.join(" #{predicate_sql} ") +
|
predicates.map {|p| p.to_sql(formatter)}.join(" #{predicate_sql} ") +
|
||||||
")"
|
")"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class Any < Polyadic
|
class Any < Polyadic
|
||||||
def predicate_sql; "OR" end
|
def predicate_sql; "OR" end
|
||||||
end
|
end
|
||||||
|
|
||||||
class All < Polyadic
|
class All < Polyadic
|
||||||
def predicate_sql; "AND" end
|
def predicate_sql; "AND" end
|
||||||
end
|
end
|
||||||
|
@ -77,7 +77,7 @@ module Arel
|
||||||
class Match < Binary
|
class Match < Binary
|
||||||
def predicate_sql; 'LIKE' end
|
def predicate_sql; 'LIKE' end
|
||||||
end
|
end
|
||||||
|
|
||||||
class NotMatch < Binary
|
class NotMatch < Binary
|
||||||
def predicate_sql; 'NOT LIKE' end
|
def predicate_sql; 'NOT LIKE' end
|
||||||
end
|
end
|
||||||
|
@ -92,10 +92,10 @@ module Arel
|
||||||
super
|
super
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def predicate_sql; operand2.inclusion_predicate_sql end
|
def predicate_sql; operand2.inclusion_predicate_sql end
|
||||||
end
|
end
|
||||||
|
|
||||||
class NotIn < Binary
|
class NotIn < Binary
|
||||||
def predicate_sql; operand2.exclusion_predicate_sql end
|
def predicate_sql; operand2.exclusion_predicate_sql end
|
||||||
end
|
end
|
||||||
|
|
|
@ -29,7 +29,7 @@ module Arel
|
||||||
def inclusion_predicate_sql
|
def inclusion_predicate_sql
|
||||||
value.inclusion_predicate_sql
|
value.inclusion_predicate_sql
|
||||||
end
|
end
|
||||||
|
|
||||||
def exclusion_predicate_sql
|
def exclusion_predicate_sql
|
||||||
value.exclusion_predicate_sql
|
value.exclusion_predicate_sql
|
||||||
end
|
end
|
||||||
|
@ -37,7 +37,7 @@ module Arel
|
||||||
def equality_predicate_sql
|
def equality_predicate_sql
|
||||||
value.equality_predicate_sql
|
value.equality_predicate_sql
|
||||||
end
|
end
|
||||||
|
|
||||||
def inequality_predicate_sql
|
def inequality_predicate_sql
|
||||||
value.inequality_predicate_sql
|
value.inequality_predicate_sql
|
||||||
end
|
end
|
||||||
|
|
|
@ -21,7 +21,7 @@ module Arel
|
||||||
def inclusion_predicate_sql
|
def inclusion_predicate_sql
|
||||||
"IN"
|
"IN"
|
||||||
end
|
end
|
||||||
|
|
||||||
def exclusion_predicate_sql
|
def exclusion_predicate_sql
|
||||||
"NOT IN"
|
"NOT IN"
|
||||||
end
|
end
|
||||||
|
|
|
@ -54,4 +54,4 @@ module Arel
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -116,4 +116,4 @@ module Arel
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -39,4 +39,4 @@ module Arel
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -116,4 +116,4 @@ module Arel
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -40,4 +40,4 @@ module Arel
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -21,4 +21,4 @@ module Arel
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -99,7 +99,7 @@ module Arel
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'when relating to a range with an excluded end' do
|
describe 'when relating to a range with an excluded end' do
|
||||||
before do
|
before do
|
||||||
@range = 1...3
|
@range = 1...3
|
||||||
|
|
|
@ -39,4 +39,4 @@ describe "Arel" do
|
||||||
|
|
||||||
it_should_behave_like 'A Relation'
|
it_should_behave_like 'A Relation'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -28,4 +28,4 @@ describe "Arel" do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -44,7 +44,7 @@ share_examples_for 'A Relation' do
|
||||||
expected = @expected.select { |r| r[@relation[:age]] != @pivot[@relation[:age]] }
|
expected = @expected.select { |r| r[@relation[:age]] != @pivot[@relation[:age]] }
|
||||||
@relation.where(@relation[:age].not_eq(@pivot[@relation[:age]])).should have_rows(expected)
|
@relation.where(@relation[:age].not_eq(@pivot[@relation[:age]])).should have_rows(expected)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "finds rows with an not eq complement predicate" do
|
it "finds rows with an not eq complement predicate" do
|
||||||
expected = @expected.select { |r| r[@relation[:age]] == @pivot[@relation[:age]] }
|
expected = @expected.select { |r| r[@relation[:age]] == @pivot[@relation[:age]] }
|
||||||
@relation.where(@relation[:age].not_eq(@pivot[@relation[:age]]).complement).should have_rows(expected)
|
@relation.where(@relation[:age].not_eq(@pivot[@relation[:age]]).complement).should have_rows(expected)
|
||||||
|
@ -54,7 +54,7 @@ share_examples_for 'A Relation' do
|
||||||
expected = @expected.select { |r| r[@relation[:age]] < @pivot[@relation[:age]] }
|
expected = @expected.select { |r| r[@relation[:age]] < @pivot[@relation[:age]] }
|
||||||
@relation.where(@relation[:age].lt(@pivot[@relation[:age]])).should have_rows(expected)
|
@relation.where(@relation[:age].lt(@pivot[@relation[:age]])).should have_rows(expected)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "finds rows with a less than complement predicate" do
|
it "finds rows with a less than complement predicate" do
|
||||||
expected = @expected.select { |r| r[@relation[:age]] >= @pivot[@relation[:age]] }
|
expected = @expected.select { |r| r[@relation[:age]] >= @pivot[@relation[:age]] }
|
||||||
@relation.where(@relation[:age].lt(@pivot[@relation[:age]]).complement).should have_rows(expected)
|
@relation.where(@relation[:age].lt(@pivot[@relation[:age]]).complement).should have_rows(expected)
|
||||||
|
@ -64,7 +64,7 @@ share_examples_for 'A Relation' do
|
||||||
expected = @expected.select { |r| r[@relation[:age]] <= @pivot[@relation[:age]] }
|
expected = @expected.select { |r| r[@relation[:age]] <= @pivot[@relation[:age]] }
|
||||||
@relation.where(@relation[:age].lteq(@pivot[@relation[:age]])).should have_rows(expected)
|
@relation.where(@relation[:age].lteq(@pivot[@relation[:age]])).should have_rows(expected)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "finds rows with a less than or equal to complement predicate" do
|
it "finds rows with a less than or equal to complement predicate" do
|
||||||
expected = @expected.select { |r| r[@relation[:age]] > @pivot[@relation[:age]] }
|
expected = @expected.select { |r| r[@relation[:age]] > @pivot[@relation[:age]] }
|
||||||
@relation.where(@relation[:age].lteq(@pivot[@relation[:age]]).complement).should have_rows(expected)
|
@relation.where(@relation[:age].lteq(@pivot[@relation[:age]]).complement).should have_rows(expected)
|
||||||
|
@ -74,7 +74,7 @@ share_examples_for 'A Relation' do
|
||||||
expected = @expected.select { |r| r[@relation[:age]] > @pivot[@relation[:age]] }
|
expected = @expected.select { |r| r[@relation[:age]] > @pivot[@relation[:age]] }
|
||||||
@relation.where(@relation[:age].gt(@pivot[@relation[:age]])).should have_rows(expected)
|
@relation.where(@relation[:age].gt(@pivot[@relation[:age]])).should have_rows(expected)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "finds rows with a greater than complement predicate" do
|
it "finds rows with a greater than complement predicate" do
|
||||||
expected = @expected.select { |r| r[@relation[:age]] <= @pivot[@relation[:age]] }
|
expected = @expected.select { |r| r[@relation[:age]] <= @pivot[@relation[:age]] }
|
||||||
@relation.where(@relation[:age].gt(@pivot[@relation[:age]]).complement).should have_rows(expected)
|
@relation.where(@relation[:age].gt(@pivot[@relation[:age]]).complement).should have_rows(expected)
|
||||||
|
@ -84,7 +84,7 @@ share_examples_for 'A Relation' do
|
||||||
expected = @expected.select { |r| r[@relation[:age]] >= @pivot[@relation[:age]] }
|
expected = @expected.select { |r| r[@relation[:age]] >= @pivot[@relation[:age]] }
|
||||||
@relation.where(@relation[:age].gteq(@pivot[@relation[:age]])).should have_rows(expected)
|
@relation.where(@relation[:age].gteq(@pivot[@relation[:age]])).should have_rows(expected)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "finds rows with a greater than or equal to complement predicate" do
|
it "finds rows with a greater than or equal to complement predicate" do
|
||||||
expected = @expected.select { |r| r[@relation[:age]] < @pivot[@relation[:age]] }
|
expected = @expected.select { |r| r[@relation[:age]] < @pivot[@relation[:age]] }
|
||||||
@relation.where(@relation[:age].gteq(@pivot[@relation[:age]]).complement).should have_rows(expected)
|
@relation.where(@relation[:age].gteq(@pivot[@relation[:age]]).complement).should have_rows(expected)
|
||||||
|
@ -94,17 +94,17 @@ share_examples_for 'A Relation' do
|
||||||
expected = @expected.select { |r| r[@relation[:name]] =~ /#{@pivot[@relation[:name]]}/ }
|
expected = @expected.select { |r| r[@relation[:name]] =~ /#{@pivot[@relation[:name]]}/ }
|
||||||
@relation.where(@relation[:name].matches(/#{@pivot[@relation[:name]]}/)).should have_rows(expected)
|
@relation.where(@relation[:name].matches(/#{@pivot[@relation[:name]]}/)).should have_rows(expected)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "finds rows with a matches complement predicate" do
|
it "finds rows with a matches complement predicate" do
|
||||||
expected = @expected.select { |r| r[@relation[:name]] !~ /#{@pivot[@relation[:name]]}/ }
|
expected = @expected.select { |r| r[@relation[:name]] !~ /#{@pivot[@relation[:name]]}/ }
|
||||||
@relation.where(@relation[:name].matches(/#{@pivot[@relation[:name]]}/).complement).should have_rows(expected)
|
@relation.where(@relation[:name].matches(/#{@pivot[@relation[:name]]}/).complement).should have_rows(expected)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "finds rows with a not matches predicate" do
|
it "finds rows with a not matches predicate" do
|
||||||
expected = @expected.select { |r| r[@relation[:name]] !~ /#{@pivot[@relation[:name]]}/ }
|
expected = @expected.select { |r| r[@relation[:name]] !~ /#{@pivot[@relation[:name]]}/ }
|
||||||
@relation.where(@relation[:name].not_matches(/#{@pivot[@relation[:name]]}/)).should have_rows(expected)
|
@relation.where(@relation[:name].not_matches(/#{@pivot[@relation[:name]]}/)).should have_rows(expected)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "finds rows with a not matches complement predicate" do
|
it "finds rows with a not matches complement predicate" do
|
||||||
expected = @expected.select { |r| r[@relation[:name]] =~ /#{@pivot[@relation[:name]]}/ }
|
expected = @expected.select { |r| r[@relation[:name]] =~ /#{@pivot[@relation[:name]]}/ }
|
||||||
@relation.where(@relation[:name].not_matches(/#{@pivot[@relation[:name]]}/).complement).should have_rows(expected)
|
@relation.where(@relation[:name].not_matches(/#{@pivot[@relation[:name]]}/).complement).should have_rows(expected)
|
||||||
|
@ -114,37 +114,37 @@ share_examples_for 'A Relation' do
|
||||||
expected = @expected.select {|r| r[@relation[:age]] >=3 && r[@relation[:age]] <= 20}
|
expected = @expected.select {|r| r[@relation[:age]] >=3 && r[@relation[:age]] <= 20}
|
||||||
@relation.where(@relation[:age].in(3..20)).should have_rows(expected)
|
@relation.where(@relation[:age].in(3..20)).should have_rows(expected)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "finds rows with an in complement predicate" do
|
it "finds rows with an in complement predicate" do
|
||||||
expected = @expected.select {|r| !(r[@relation[:age]] >=3 && r[@relation[:age]] <= 20)}
|
expected = @expected.select {|r| !(r[@relation[:age]] >=3 && r[@relation[:age]] <= 20)}
|
||||||
@relation.where(@relation[:age].in(3..20).complement).should have_rows(expected)
|
@relation.where(@relation[:age].in(3..20).complement).should have_rows(expected)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "finds rows with a not in predicate" do
|
it "finds rows with a not in predicate" do
|
||||||
expected = @expected.select {|r| !(r[@relation[:age]] >=3 && r[@relation[:age]] <= 20)}
|
expected = @expected.select {|r| !(r[@relation[:age]] >=3 && r[@relation[:age]] <= 20)}
|
||||||
@relation.where(@relation[:age].not_in(3..20)).should have_rows(expected)
|
@relation.where(@relation[:age].not_in(3..20)).should have_rows(expected)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "finds rows with a not in complement predicate" do
|
it "finds rows with a not in complement predicate" do
|
||||||
expected = @expected.select {|r| r[@relation[:age]] >=3 && r[@relation[:age]] <= 20}
|
expected = @expected.select {|r| r[@relation[:age]] >=3 && r[@relation[:age]] <= 20}
|
||||||
@relation.where(@relation[:age].not_in(3..20).complement).should have_rows(expected)
|
@relation.where(@relation[:age].not_in(3..20).complement).should have_rows(expected)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "finds rows with a polyadic predicate of class Any" do
|
it "finds rows with a polyadic predicate of class Any" do
|
||||||
expected = @expected.select {|r| [2,4,8,16].include?(r[@relation[:age]])}
|
expected = @expected.select {|r| [2,4,8,16].include?(r[@relation[:age]])}
|
||||||
@relation.where(@relation[:age].in_any([2,4], [8, 16])).should have_rows(expected)
|
@relation.where(@relation[:age].in_any([2,4], [8, 16])).should have_rows(expected)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "finds rows with a polyadic predicate of class Any complement" do
|
it "finds rows with a polyadic predicate of class Any complement" do
|
||||||
expected = @expected.select {|r| ![2,4,8,16].include?(r[@relation[:age]])}
|
expected = @expected.select {|r| ![2,4,8,16].include?(r[@relation[:age]])}
|
||||||
@relation.where(@relation[:age].in_any([2,4], [8, 16]).complement).should have_rows(expected)
|
@relation.where(@relation[:age].in_any([2,4], [8, 16]).complement).should have_rows(expected)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "finds rows with a polyadic predicate of class All" do
|
it "finds rows with a polyadic predicate of class All" do
|
||||||
expected = @expected.select {|r| r[@relation[:name]] =~ /Name/ && r[@relation[:name]] =~ /1/}
|
expected = @expected.select {|r| r[@relation[:name]] =~ /Name/ && r[@relation[:name]] =~ /1/}
|
||||||
@relation.where(@relation[:name].matches_all(/Name/, /1/)).should have_rows(expected)
|
@relation.where(@relation[:name].matches_all(/Name/, /1/)).should have_rows(expected)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "finds rows with a polyadic predicate of class All complement" do
|
it "finds rows with a polyadic predicate of class All complement" do
|
||||||
expected = @expected.select {|r| !(r[@relation[:name]] =~ /Name/ && r[@relation[:name]] =~ /1/)}
|
expected = @expected.select {|r| !(r[@relation[:name]] =~ /Name/ && r[@relation[:name]] =~ /1/)}
|
||||||
@relation.where(@relation[:name].matches_all(/Name/, /1/).complement).should have_rows(expected)
|
@relation.where(@relation[:name].matches_all(/Name/, /1/).complement).should have_rows(expected)
|
||||||
|
@ -252,4 +252,4 @@ share_examples_for 'A Relation' do
|
||||||
actual.should == expected[3..-1]
|
actual.should == expected[3..-1]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -3,4 +3,4 @@ module Check
|
||||||
# See: https://rspec.lighthouseapp.com/projects/5645/tickets/504
|
# See: https://rspec.lighthouseapp.com/projects/5645/tickets/504
|
||||||
def check(*args)
|
def check(*args)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -11,4 +11,4 @@ ActiveRecord::Base.configurations = {
|
||||||
:encoding => 'utf8',
|
:encoding => 'utf8',
|
||||||
:database => 'arel_unit',
|
:database => 'arel_unit',
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,4 +14,4 @@ ActiveRecord::Base.configurations = {
|
||||||
:password => 'arel_unit',
|
:password => 'arel_unit',
|
||||||
:database => 'orcl',
|
:database => 'orcl',
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,4 +10,4 @@ ActiveRecord::Base.configurations = {
|
||||||
:encoding => 'utf8',
|
:encoding => 'utf8',
|
||||||
:database => 'arel_unit',
|
:database => 'arel_unit',
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,4 +25,4 @@ module AdapterGuards
|
||||||
def valid_adapters
|
def valid_adapters
|
||||||
%w[mysql postgresql sqlite3 oracle]
|
%w[mysql postgresql sqlite3 oracle]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
require "support/matchers/be_like"
|
require "support/matchers/be_like"
|
||||||
require "support/matchers/disambiguate_attributes"
|
require "support/matchers/disambiguate_attributes"
|
||||||
require "support/matchers/hash_the_same_as"
|
require "support/matchers/hash_the_same_as"
|
||||||
require "support/matchers/have_rows"
|
require "support/matchers/have_rows"
|
||||||
|
|
|
@ -15,4 +15,4 @@ module Matchers
|
||||||
found.compact.length == expected.length && got.compact.length == expected.length
|
found.compact.length == expected.length && got.compact.length == expected.length
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -59,4 +59,4 @@ module Arel
|
||||||
insert.record
|
insert.record
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue