4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
# File 'lib/pghero/methods/explain.rb', line 4
def explain(sql)
sql = squish(sql)
explanation = nil
explain_safe = explain_safe?
connection_model.transaction do
select_all("SET LOCAL statement_timeout = 10000")
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")
raise ActiveRecord::Rollback
end
explanation
end
|