27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
# File 'lib/chronos/rails/active_record_query_inspector.rb', line 27
def call(raw_sql, query, options = {})
connection = options[:connection]
return {} unless eligible?(raw_sql, query, connection)
previous = Thread.current[GUARD_KEY]
Thread.current[GUARD_KEY] = true
guarded = true
result = {"errors" => []}
capture(result) { result["indexes"] = indexes(connection, table(query)) }
if options[:statistics] == true
capture(result) { result["statistics"] = statistics(connection, table(query)) }
end
if options[:plan] == true
capture(result) do
plan_result = plan(connection, raw_sql, adapter_name(connection))
result["errors"].concat(Array(plan_result.delete("errors")))
result["plan"] = plan_result
end
end
result.delete("errors") if result["errors"].empty?
result
rescue StandardError => error
{"errors" => [safe_error_class(error)]}
ensure
Thread.current[GUARD_KEY] = previous if guarded
end
|