Sha256: 89a9a0bcfe38362d59a1cd36caf7a1b426e2510e75fdcfeb4ef28a86ade5ec84
Contents?: true
Size: 731 Bytes
Versions: 10
Compression:
Stored size: 731 Bytes
Contents
module PgHero module Methods module Explain def explain(sql) sql = squish(sql) explanation = nil # use transaction for safety with_transaction(statement_timeout: 10000, 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 private def explain_safe? select_all("SELECT 1; SELECT 1") false rescue ActiveRecord::StatementInvalid true end end end end
Version data entries
10 entries across 10 versions & 1 rubygems