Class: QueryGuard::Analysis::ComplexJoinRiskDetector

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

Overview

Detects complex join patterns

Constant Summary collapse

COMPLEX_JOIN_TABLE_COUNT =

5+ tables is generally considered complex

5

Instance Attribute Summary

Attributes inherited from RiskDetector

#name

Instance Method Summary collapse

Constructor Details

#initialize ⇒ ComplexJoinRiskDetector

Returns a new instance of ComplexJoinRiskDetector.



127
128
129
# File 'lib/query_guard/analysis/risk_detectors.rb', line 127

def initialize
  super(:complex_join_risk)
end

Instance Method Details

#detect(query, config) ⇒ Object



131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
# File 'lib/query_guard/analysis/risk_detectors.rb', line 131

def detect(query, config)
  risks = []
  sql = query.sql

  # Count JOIN keywords (crude heuristic)
  join_count = sql.scan(/\bJOIN\b/i).length
  return risks if join_count < COMPLEX_JOIN_TABLE_COUNT

  risks << {
    pattern: :many_joins,
    risk_level: :medium,
    message: "Query with #{join_count + 1} tables; complex joins can be slow and hard to optimize",
    metadata: {
      table_count: join_count + 1,
      recommendation: "Consider breaking into multiple queries or database view",
      impact: "Performance degradation with scale"
    }
  }

  risks
end