MCPcopy Create free account
hub / github.com/ajitpratap0/GoSQLX / Analyze

Method Analyze

cmd/gosqlx/cmd/sql_analyzer.go:57–113  ·  view source on GitHub ↗

Analyze performs comprehensive AST-based analysis

(astObj *ast.AST, sqlArgs ...string)

Source from the content-addressed store, hash-verified

55
56// Analyze performs comprehensive AST-based analysis
57func (a *SQLAnalyzer) Analyze(astObj *ast.AST, sqlArgs ...string) (*AnalysisReport, error) {
58 // Extract optional SQL string for query metadata
59 sql := ""
60 if len(sqlArgs) > 0 {
61 sql = sqlArgs[0]
62 }
63
64 // Reset analyzer state
65 a.reset()
66
67 // Traverse AST using visitor pattern
68 for _, stmt := range astObj.Statements {
69 if err := ast.Walk(a, stmt); err != nil {
70 return nil, fmt.Errorf("AST traversal failed: %w", err)
71 }
72 }
73
74 // Run security scanner for injection patterns (tautologies, UNION-based, time-based, etc.)
75 securityScanner := security.NewScanner()
76 securityResult := securityScanner.Scan(astObj)
77 a.convertSecurityFindings(securityResult)
78
79 // Calculate final metrics and scores
80 a.calculateComplexityMetrics()
81 a.calculateScores()
82
83 // Generate recommendations
84 recommendations := a.generateRecommendations()
85
86 // Count issues by severity
87 critical, high, medium, low := CountIssuesBySeverity(a.Issues)
88
89 // Calculate final scores
90 securityScore := a.calculateSecurityScore()
91 overallScore := a.calculateOverallScore()
92
93 // Build query metadata
94 queryInfo := a.buildQueryInfo(astObj, sql)
95
96 return &AnalysisReport{
97 Timestamp: time.Now(),
98 Version: "2.0.0-unified",
99 Query: queryInfo,
100 Issues: a.Issues,
101 ComplexityMetrics: a.ComplexityMetrics,
102 SecurityScore: securityScore,
103 PerformanceScore: a.PerformanceScore,
104 OverallScore: overallScore,
105 Grade: CalculateGrade(overallScore),
106 TotalIssues: len(a.Issues),
107 CriticalIssues: critical,
108 HighIssues: high,
109 MediumIssues: medium,
110 LowIssues: low,
111 Recommendations: recommendations,
112 }, nil
113}
114

Calls 14

resetMethod · 0.95
ScanMethod · 0.95
calculateScoresMethod · 0.95
calculateOverallScoreMethod · 0.95
buildQueryInfoMethod · 0.95
WalkFunction · 0.92
NewScannerFunction · 0.92
CountIssuesBySeverityFunction · 0.85