extractColumnNames extracts column names from expressions
(expr ast.Expression, columns map[string]bool)
| 405 | |
| 406 | // extractColumnNames extracts column names from expressions |
| 407 | func extractColumnNames(expr ast.Expression, columns map[string]bool) { |
| 408 | if expr == nil { |
| 409 | return |
| 410 | } |
| 411 | |
| 412 | switch e := expr.(type) { |
| 413 | case *ast.Identifier: |
| 414 | if e.Name != "" { |
| 415 | columns[e.Name] = true |
| 416 | } |
| 417 | case *ast.FunctionCall: |
| 418 | // Extract column names from function arguments |
| 419 | for _, arg := range e.Arguments { |
| 420 | extractColumnNames(arg, columns) |
| 421 | } |
| 422 | case *ast.BinaryExpression: |
| 423 | extractColumnNames(e.Left, columns) |
| 424 | extractColumnNames(e.Right, columns) |
| 425 | } |
| 426 | } |
| 427 | |
| 428 | // stringSlicesEqual compares two string slices for equality |
| 429 | func stringSlicesEqual(a, b []string) bool { |