diff options
-rw-r--r-- | lib/arel/visitors/to_sql.rb | 4 | ||||
-rw-r--r-- | spec/arel/visitors/to_sql_spec.rb | 7 |
2 files changed, 10 insertions, 1 deletions
diff --git a/lib/arel/visitors/to_sql.rb b/lib/arel/visitors/to_sql.rb index cbe2b6cca3..5a92e27149 100644 --- a/lib/arel/visitors/to_sql.rb +++ b/lib/arel/visitors/to_sql.rb @@ -155,7 +155,9 @@ module Arel end def visit_Arel_Nodes_In o - "#{visit o.left} IN (#{o.right.map { |x| visit x }.join ', '})" + right = o.right + right = right.empty? ? 'NULL' : right.map { |x| visit x }.join(', ') + "#{visit o.left} IN (#{right})" end def visit_Arel_Nodes_And o diff --git a/spec/arel/visitors/to_sql_spec.rb b/spec/arel/visitors/to_sql_spec.rb index c8bfb845c1..b277810863 100644 --- a/spec/arel/visitors/to_sql_spec.rb +++ b/spec/arel/visitors/to_sql_spec.rb @@ -65,6 +65,13 @@ module Arel "users"."id" IN (1, 2, 3) } end + + it "should turn empty right to NULL" do + node = @attr.in [] + @visitor.accept(node).should be_like %{ + "users"."id" IN (NULL) + } + end end describe 'Equality' do |