Class: QueryGuard::Explain::ExplainEnricher
- Inherits:
-
Object
- Object
- QueryGuard::Explain::ExplainEnricher
- Defined in:
- lib/query_guard/explain/explain_enricher.rb
Overview
Converts EXPLAIN signals into QueryGuard Finding objects. Enriches existing risk findings with actual plan data and index suggestions.
Example:
adapter = PostgreSQLAdapter.new(connection)
enricher = ExplainEnricher.new(adapter)
findings = enricher.enrich(existing_findings, query)
Instance Method Summary collapse
-
#can_enrich?(query) ⇒ Boolean
Check if this query can be enriched with EXPLAIN.
-
#enrich(findings, query, context = nil) ⇒ Array<Core::Finding>
Enrich findings with EXPLAIN analysis.
-
#initialize(adapter, config = {}) ⇒ ExplainEnricher
constructor
A new instance of ExplainEnricher.
Constructor Details
#initialize(adapter, config = {}) ⇒ ExplainEnricher
Returns a new instance of ExplainEnricher.
13 14 15 16 17 18 |
# File 'lib/query_guard/explain/explain_enricher.rb', line 13 def initialize(adapter, config = {}) @adapter = adapter @config = config @logger = config[:logger] @index_suggester = Suggest::IndexSuggester.new end |
Instance Method Details
#can_enrich?(query) ⇒ Boolean
Check if this query can be enriched with EXPLAIN
47 48 49 50 51 |
# File 'lib/query_guard/explain/explain_enricher.rb', line 47 def can_enrich?(query) return false if query.nil? || query.sql.nil? @adapter.can_explain?(query.sql) end |
#enrich(findings, query, context = nil) ⇒ Array<Core::Finding>
Enrich findings with EXPLAIN analysis
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/query_guard/explain/explain_enricher.rb', line 26 def enrich(findings, query, context = nil) return findings if findings.nil? || query.nil? return findings unless can_enrich?(query) new_findings = [] begin explain_findings = analyze_with_explain(query, context) new_findings.concat(explain_findings) rescue StandardError => e log_error("EXPLAIN enrichment failed: #{e.}", query) # Graceful degradation: return original findings on error end findings + new_findings end |