countSubqueries recursively counts subquery expressions in an expression tree.
(expr ast.Expression)
| 264 | |
| 265 | // countSubqueries recursively counts subquery expressions in an expression tree. |
| 266 | func countSubqueries(expr ast.Expression) int { |
| 267 | if expr == nil { |
| 268 | return 0 |
| 269 | } |
| 270 | |
| 271 | count := 0 |
| 272 | |
| 273 | switch e := expr.(type) { |
| 274 | case *ast.SubqueryExpression: |
| 275 | count++ |
| 276 | case *ast.InExpression: |
| 277 | if e.Subquery != nil { |
| 278 | count++ |
| 279 | } |
| 280 | case *ast.ExistsExpression: |
| 281 | count++ |
| 282 | case *ast.BinaryExpression: |
| 283 | count += countSubqueries(e.Left) |
| 284 | count += countSubqueries(e.Right) |
| 285 | } |
| 286 | |
| 287 | return count |
| 288 | } |
| 289 | |
| 290 | // calculateScore computes the optimization score (0-100). |
| 291 | // Each suggestion reduces the score based on its severity. |
no outgoing calls
no test coverage detected