class N1Finder::Adapters::SequelAdapter

Catches queries when using Sequel

Constants

MAIN_METHOD

Method in `Sequel::Model.db.class` that we observe to find N+1 queries

Each sequel adapter has `execute` method
For example:
https://github.com/jeremyevans/sequel/blob/ac925ce9556f33d56f49b84d905d307c6a621716/lib/sequel/adapters/postgres.rb#L171
https://github.com/jeremyevans/sequel/blob/ac925ce9556f33d56f49b84d905d307c6a621716/lib/sequel/adapters/mysql.rb#L352
https://github.com/jeremyevans/sequel/blob/ac925ce9556f33d56f49b84d905d307c6a621716/lib/sequel/adapters/sqlite.rb#L129

Private Instance Methods

database_class() click to toggle source
# File lib/n_1_finder/adapters/sequel_adapter.rb, line 30
def database_class
  @database_class ||= Sequel::Model.db.class
end
set_trap() click to toggle source
# File lib/n_1_finder/adapters/sequel_adapter.rb, line 15
def set_trap
  main_query_method = MAIN_METHOD
  main_method_alias = MAIN_METHOD_ALIAS
  current_storage = storage

  database_class.class_eval do
    alias_method main_method_alias, main_query_method
    define_method(main_query_method) do |*params, &block|
      sql = params.first
      current_storage.add(sql, {}, caller)
      send(main_method_alias, *params, &block)
    end
  end
end