module Ganeshan::Explainer
Public Instance Methods
exec_query(*args)
click to toggle source
Calls superclass method
# File lib/ganeshan/explainer.rb, line 3 def exec_query(*args) p args _with_explain(sql: args.first, binds: args[2]) do super end end
Private Instance Methods
_validate_explain(sql:, exp:)
click to toggle source
# File lib/ganeshan/explainer.rb, line 38 def _validate_explain(sql:, exp:) Ganeshan::JsonLogger.log( sql: sql, explain: exp, ) end
_with_explain(sql:, binds:) { || ... }
click to toggle source
# File lib/ganeshan/explainer.rb, line 12 def _with_explain(sql:, binds:) begin if Ganeshan.enabled && sql =~ /\A\s*SELECT\b/i conn = Ganeshan.connection || raw_connection type_casted_binds = if binds type_casted_binds(binds) else [] end if type_casted_binds.empty? exp = conn.query("EXPLAIN #{sql}").to_a else exp = conn.query("EXPLAIN #{sql}", type_casted_binds).to_a end _validate_explain(sql: sql, exp: exp) end rescue StandardError => e Ganeshan.logger.error("#{e}\n\t#{e.backtrace.join("\n\t")}") end yield end