Class: QueryGuard::Analysis::QueryRiskClassifier

Inherits:
Object
  • Object
show all
Defined in:
lib/query_guard/analysis/query_risk_classifier.rb

Overview

Query risk classifier and aggregator. Orchestrates all risk detectors and produces findings.

Instance Method Summary collapse

Constructor Details

#initialize(config) ⇒ QueryRiskClassifier

Returns a new instance of QueryRiskClassifier.



8
9
10
11
12
13
14
15
16
17
18
# File 'lib/query_guard/analysis/query_risk_classifier.rb', line 8

def initialize(config)
  @config = config
  @detectors = [
    SelectStarRiskDetector.new,
    MissingIndexRiskDetector.new,
    ComplexJoinRiskDetector.new,
    SubqueryRiskDetector.new,
    UnionRiskDetector.new,
    AggregationRiskDetector.new
  ]
end

Instance Method Details

#analyze_context_risks(context) ⇒ Array<Hash>

Analyze all queries in context for request-level risks (N+1, repeated queries)

Parameters:

Returns:

  • (Array<Hash>) —

    Request-level risks



34
35
36
37
38
39
40
41
42
43
44
# File 'lib/query_guard/analysis/query_risk_classifier.rb', line 34

def analyze_context_risks(context)
  risks = []

  # Detect potentially repeated queries (same SQL pattern)
  risks.concat(detect_repeated_queries(context))

  # Detect potential N+1 pattern: many queries in sequence
  risks.concat(detect_n_plus_one_pattern(context))

  risks
end

#analyze_query(query) ⇒ Array<Hash>

Analyze a single query for risks

Parameters:

Returns:

  • (Array<Hash>) —

    Detected risks



23
24
25
26
27
28
29
# File 'lib/query_guard/analysis/query_risk_classifier.rb', line 23

def analyze_query(query)
  risks = []
  @detectors.each do |detector|
    risks.concat(detector.detect(query, @config))
  end
  risks
end