Skip to content

Instantly share code, notes, and snippets.

@r7kamura
Last active April 18, 2016 06:58
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save r7kamura/3252461bc79558f296f1 to your computer and use it in GitHub Desktop.
Save r7kamura/3252461bc79558f296f1 to your computer and use it in GitHub Desktop.
ActiveSupport::Notifications.subscribe("sql.active_record") do |name, start, finish, id, payload|
if payload[:sql] =~ /\A(?!EXPLAIN).*SELECT.+FROM/
ActiveRecord::Base.logger.warn(
ActiveRecord::Base.connection.explain(payload[:sql], payload[:binds])
)
end
end
@r7kamura
Copy link
Author

For instance, you can inspect SQL consistency with testing like this:

explain_enabled = false

ActiveSupport::Notifications.subscribe("sql.active_record") do |name, start, finish, id, payload|
  if explain_enabled && payload[:sql] =~ /\A(?!EXPLAIN).*SELECT.+FROM/
    ActiveRecord::Base.logger.warn(
      ActiveRecord::Base.connection.explain(payload[:sql], payload[:binds])
    )
  end
end

shared_context 'with explain', :explain do
  before do
    explain_enabled = true
  end

  after do
    explain_enabled = false
  end
end

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment