1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Fix in [] to be false, in [] to be true

This is in response to discussion on 62207fa
This commit is contained in:
Ernie Miller 2012-06-14 11:45:51 -04:00
parent 62207faee9
commit cbff1bcf38
2 changed files with 14 additions and 10 deletions

View file

@ -370,11 +370,19 @@ key on UpdateManager using UpdateManager#key=
end
def visit_Arel_Nodes_In o
"#{visit o.left} IN (#{visit o.right})"
if Array === o.right && o.right.empty?
'1=0'
else
"#{visit o.left} IN (#{visit o.right})"
end
end
def visit_Arel_Nodes_NotIn o
"#{visit o.left} NOT IN (#{visit o.right})"
if Array === o.right && o.right.empty?
'1=1'
else
"#{visit o.left} NOT IN (#{visit o.right})"
end
end
def visit_Arel_Nodes_And o

View file

@ -167,11 +167,9 @@ module Arel
}
end
it "should return IN () when empty right which is invalid SQL" do
it "should return 1=0 when empty right which is always false" do
node = @attr.in []
@visitor.accept(node).must_be_like %{
"users"."id" IN ()
}
@visitor.accept(node).must_equal '1=0'
end
it 'can handle two dot ranges' do
@ -255,11 +253,9 @@ module Arel
}
end
it "should return NOT IN () when empty right which is invalid SQL" do
it "should return 1=1 when empty right which is always true" do
node = @attr.not_in []
@visitor.accept(node).must_be_like %{
"users"."id" NOT IN ()
}
@visitor.accept(node).must_equal '1=1'
end
it 'can handle two dot ranges' do