Module: PgHero::Methods::Explain
- Included in:
- Database
- Defined in:
- lib/pghero/methods/explain.rb
Instance Method Summary collapse
Instance Method Details
#explain(sql) ⇒ Object
4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# File 'lib/pghero/methods/explain.rb', line 4 def explain(sql) sql = squish(sql) explanation = nil # use transaction for safety with_transaction(statement_timeout: (explain_timeout_sec * 1000), rollback: true) do if (sql.sub(/;\z/, "").include?(";") || sql.upcase.include?("COMMIT")) && !explain_safe? raise ActiveRecord::StatementInvalid, "Unsafe statement" end explanation = select_all("EXPLAIN #{sql}").map { |v| v[:"QUERY PLAN"] }.join("\n") end explanation end |