Skip to content

Commit

Permalink
Merge pull request rails#52696 from jhawthorn/cached_row_count
Browse files Browse the repository at this point in the history
Add :row_count in cached sql.active_record payload
  • Loading branch information
jhawthorn authored Aug 23, 2024
2 parents 11f1f35 + 31309b8 commit c1d04cc
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -266,7 +266,7 @@ def lookup_sql_cache(sql, name, binds)
if result
ActiveSupport::Notifications.instrument(
"sql.active_record",
cache_notification_info(sql, name, binds)
cache_notification_info_result(sql, name, binds, result)
)
end

Expand All @@ -288,13 +288,19 @@ def cache_sql(sql, name, binds)
if hit
ActiveSupport::Notifications.instrument(
"sql.active_record",
cache_notification_info(sql, name, binds)
cache_notification_info_result(sql, name, binds, result)
)
end

result.dup
end

def cache_notification_info_result(sql, name, binds, result)
payload = cache_notification_info(sql, name, binds)
payload[:row_count] = result.length
payload
end

# Database adapters can override this method to
# provide custom cache information.
def cache_notification_info(sql, name, binds)
Expand Down
23 changes: 23 additions & 0 deletions activerecord/test/cases/instrumentation_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,29 @@ def test_payload_row_count_on_raw_sql
ActiveSupport::Notifications.unsubscribe(subscriber) if subscriber
end

def test_payload_row_count_on_cache
events = []
callback = -> (event) do
payload = event.payload
events << payload if payload[:sql].include?("SELECT")
end

Book.create!(name: "row count book")
ActiveSupport::Notifications.subscribed(callback, "sql.active_record") do
Book.cache do
Book.first
Book.first
end
end

assert_equal 2, events.size
assert_not events[0][:cached]
assert events[1][:cached]

assert_equal 1, events[0][:row_count]
assert_equal 1, events[1][:row_count]
end

def test_payload_connection_with_query_cache_disabled
connection = ClothingItem.lease_connection
subscriber = ActiveSupport::Notifications.subscribe("sql.active_record") do |_, _, _, _, payload|
Expand Down

0 comments on commit c1d04cc

Please sign in to comment.