module QueryTrace
Public Class Methods
append_features(klass)
click to toggle source
Calls superclass method
# File lib/sql_optimizer/analyze.rb, line 61 def self.append_features(klass) super klass.class_eval do unless method_defined?(:log_info_without_trace) alias_method :log_info_without_trace, :sql alias_method :sql, :log_info_with_trace end end end
enable!()
click to toggle source
# File lib/sql_optimizer/analyze.rb, line 57 def self.enable! ::ActiveRecord::LogSubscriber.send(:include, self) end
Public Instance Methods
log_info_with_trace(event)
click to toggle source
# File lib/sql_optimizer/analyze.rb, line 71 def log_info_with_trace(event) log_info_without_trace(event) return if event.payload[:name].nil? || event.payload[:name] == 'SCHEMA' || event.payload[:name].include?('SchemaMigration') || %w[BEGIN COMMIT ROLLBACK].include?(event.payload[:sql].to_s) || !ActiveRecord::Base.connection.table_exists?(QueryLog.table_name) || event.payload[:sql].include?('query_logs') logger = ActiveRecord::Base.logger ActiveRecord::Base.logger = nil query_logs = QueryLog.last(2) if query_logs.last.present? && query_logs.last.query == event.payload[:sql] query_logs.last.update(follow_id: query_logs.first.id, n_plus_one_size: query_logs.last.n_plus_one_size + 1) else QueryLog.create( query: event.payload[:sql], source: event.payload[:name], duration: event.duration.round(3) ) end ActiveRecord::Base.logger = logger end