Class: CodeToQuery::Guardrails::ExplainGate

Inherits:
Object
  • Object
show all
Defined in:
lib/code_to_query/guardrails/explain_gate.rb

Constant Summary collapse

DEFAULT_MAX_COST =
10_000
DEFAULT_MAX_ROWS =
100_000

Instance Method Summary collapse

Constructor Details

#initialize(config) ⇒ ExplainGate

Returns a new instance of ExplainGate.



14
15
16
# File 'lib/code_to_query/guardrails/explain_gate.rb', line 14

def initialize(config)
  @config = config
end

Instance Method Details

#allowed?(sql) ⇒ Boolean

Returns:

  • (Boolean)


18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/code_to_query/guardrails/explain_gate.rb', line 18

def allowed?(sql)
  return true unless defined?(ActiveRecord::Base) && ActiveRecord::Base.connected?

  plan = get_explain_plan(sql)
  return true if plan.nil? || plan.empty?

  analyze_plan_safety(plan)
rescue StandardError => e
  # Log error; fail-open or fail-closed based on configuration
  CodeToQuery.config.logger.warn("[code_to_query] ExplainGate error: #{e.message}")
  !!@config.explain_fail_open
end