Class: QueryGuard::Analysis::ComplexJoinRiskDetector
- Inherits:
-
RiskDetector
- Object
- RiskDetector
- QueryGuard::Analysis::ComplexJoinRiskDetector
- 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
Instance Method Summary collapse
- #detect(query, config) ⇒ Object
-
#initialize ⇒ ComplexJoinRiskDetector
constructor
A new instance of ComplexJoinRiskDetector.
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 |