Sha256: 19be1cb473bb09ea599ddfb8962c21be7abd4c376a8e98400e724184f08c064d
Contents?: true
Size: 775 Bytes
Versions: 7
Compression:
Stored size: 775 Bytes
Contents
module PgHero module Methods module Explain def explain(sql) sql = squish(sql) explanation = nil explain_safe = explain_safe? # use transaction for safety connection_model.transaction do if !explain_safe && (sql.sub(/;\z/, "").include?(";") || sql.upcase.include?("COMMIT")) raise ActiveRecord::StatementInvalid, "Unsafe statement" end explanation = select_all("EXPLAIN #{sql}").map { |v| v["QUERY PLAN"] }.join("\n") raise ActiveRecord::Rollback 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
7 entries across 7 versions & 1 rubygems