Class: QueryGuard::Analysis::QueryRiskClassifier
- Inherits:
-
Object
- Object
- QueryGuard::Analysis::QueryRiskClassifier
- 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
-
#analyze_context_risks(context) ⇒ Array<Hash>
Analyze all queries in context for request-level risks (N+1, repeated queries).
-
#analyze_query(query) ⇒ Array<Hash>
Analyze a single query for risks.
-
#initialize(config) ⇒ QueryRiskClassifier
constructor
A new instance of QueryRiskClassifier.
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)
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
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 |