diff options
-rw-r--r-- | lib/arel/engines/sql/core_extensions/array.rb | 6 | ||||
-rw-r--r-- | spec/arel/engines/sql/unit/predicates/in_spec.rb | 19 |
2 files changed, 24 insertions, 1 deletions
diff --git a/lib/arel/engines/sql/core_extensions/array.rb b/lib/arel/engines/sql/core_extensions/array.rb index 80041cb5f3..72f579b7eb 100644 --- a/lib/arel/engines/sql/core_extensions/array.rb +++ b/lib/arel/engines/sql/core_extensions/array.rb @@ -2,7 +2,11 @@ module Arel module Sql module ArrayExtensions def to_sql(formatter = nil) - "(" + collect { |e| e.to_sql(formatter) }.join(', ') + ")" + if any? + "(" + collect { |e| e.to_sql(formatter) }.join(', ') + ")" + else + "(NULL)" + end end def inclusion_predicate_sql diff --git a/spec/arel/engines/sql/unit/predicates/in_spec.rb b/spec/arel/engines/sql/unit/predicates/in_spec.rb index 691abcb2d2..76e5fc58df 100644 --- a/spec/arel/engines/sql/unit/predicates/in_spec.rb +++ b/spec/arel/engines/sql/unit/predicates/in_spec.rb @@ -45,6 +45,25 @@ module Arel end end end + + describe 'when the array is empty' do + before do + @array = [] + end + + it 'manufactures sql with a comma separated list' do + sql = In.new(@attribute, @array).to_sql + + adapter_is :mysql do + sql.should be_like(%Q{`users`.`id` IN (NULL)}) + end + + adapter_is_not :mysql do + sql.should be_like(%Q{"users"."id" IN (NULL)}) + end + end + end + end describe 'when relating to a range' do |