diff --git a/activerecord/lib/active_record/relation/calculations.rb b/activerecord/lib/active_record/relation/calculations.rb index e1a82138b29959caed18e2470f98d416c7e25667..23a0b563ef618d0de0a2f6db5e6e7283dd22e01e 100644 --- a/activerecord/lib/active_record/relation/calculations.rb +++ b/activerecord/lib/active_record/relation/calculations.rb @@ -190,7 +190,13 @@ def pluck(*column_names) klass.disallow_raw_sql!(column_names) relation = spawn relation.select_values = column_names - result = skip_query_cache_if_necessary { klass.connection.select_all(relation.arel, nil) } + result = skip_query_cache_if_necessary do + if where_clause.contradiction? + ActiveRecord::Result.new([], []) + else + klass.connection.select_all(relation.arel, nil) + end + end result.cast_values(klass.attribute_types) end end diff --git a/activerecord/test/cases/calculations_test.rb b/activerecord/test/cases/calculations_test.rb index 6b3314fbc28068abf1be7d32f1d9b53537a540c2..8c99db9619408e05a33f93feef4fd567c80a6b6f 100644 --- a/activerecord/test/cases/calculations_test.rb +++ b/activerecord/test/cases/calculations_test.rb @@ -678,6 +678,13 @@ def test_pluck assert_equal [1, 2, 3, 4, 5], Topic.order(:id).pluck(:id) end + def test_pluck_with_empty_in + Topic.send(:load_schema) + assert_no_queries do + assert_equal [], Topic.where(id: []).pluck(:id) + end + end + def test_pluck_without_column_names if current_adapter?(:OracleAdapter) assert_equal [[1, "Firm", 1, nil, "37signals", nil, 1, nil, nil]], Company.order(:id).limit(1).pluck