37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
# File 'activerecord/lib/arel/predications.rb', line 37
def between(other)
if unboundable?(other.begin) == 1 || unboundable?(other.end) == -1
self.in([])
elsif open_ended?(other.begin)
if open_ended?(other.end)
if infinity?(other.begin) == 1 || infinity?(other.end) == -1
self.in([])
else
not_in([])
end
elsif other.exclude_end?
lt(other.end)
else
lteq(other.end)
end
elsif open_ended?(other.end)
gteq(other.begin)
elsif other.exclude_end?
gteq(other.begin).and(lt(other.end))
elsif other.begin == other.end
eq(other.begin)
else
left = quoted_node(other.begin)
right = quoted_node(other.end)
Nodes::Between.new(self, Nodes::And.new([left, right]))
end
end
|