Skip to content

Commit ab279f0

Browse files
committed
Run query when using where(attr: []) and pluck with expression columns
1 parent 1d3689e commit ab279f0

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

activerecord/lib/active_record/relation/calculations.rb

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,7 @@ def pluck(*column_names)
315315
columns = relation.arel_columns(column_names)
316316
relation.select_values = columns
317317
result = skip_query_cache_if_necessary do
318-
if where_clause.contradiction?
318+
if where_clause.contradiction? && !possible_aggregation?(column_names)
319319
ActiveRecord::Result.empty(async: @async)
320320
else
321321
model.with_connection do |c|
@@ -450,6 +450,13 @@ def distinct_select?(column_name)
450450
column_name.is_a?(::String) && /\bDISTINCT[\s(]/i.match?(column_name)
451451
end
452452

453+
def possible_aggregation?(column_names)
454+
column_names.any? do |column_name|
455+
Arel.arel_node?(column_name) ||
456+
(column_name.is_a?(String) && column_name.include?("("))
457+
end
458+
end
459+
453460
def aggregate_column(column_name)
454461
case column_name
455462
when Arel::Expressions

activerecord/test/cases/relation_test.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -445,6 +445,12 @@ def test_skip_preloading_after_arel_has_been_generated
445445
end
446446
end
447447

448+
test "runs queries when using pick with expression column and empty IN" do
449+
assert_queries_count(1) do
450+
assert_equal 0, Post.where(id: []).pick(Arel.sql("COUNT(*)"))
451+
end
452+
end
453+
448454
test "can unscope empty IN" do
449455
assert_queries_count(1) do
450456
Post.where(id: []).unscope(where: :id).load

0 commit comments

Comments
 (0)