From 0d0c30e534af7f80ec8b18eb946aaa613ca30444 Mon Sep 17 00:00:00 2001 From: Ryuta Kamizono Date: Mon, 27 Jan 2020 13:59:34 +0900 Subject: [PATCH] Avoid making query when using `where(attr: [])` for `pluck` Follow up #37266. --- activerecord/lib/active_record/relation/calculations.rb | 8 +++++++- activerecord/test/cases/calculations_test.rb | 7 +++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/activerecord/lib/active_record/relation/calculations.rb b/activerecord/lib/active_record/relation/calculations.rb index e1a82138b2..23a0b563ef 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 6b3314fbc2..8c99db9619 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 -- GitLab