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

Function convertStatementToJSON

cmd/gosqlx/internal/output/json.go:488–539  ·  view source on GitHub ↗

convertStatementToJSON converts an AST statement to JSON representation

(stmt ast.Statement)

Source from the content-addressed store, hash-verified

486
487// convertStatementToJSON converts an AST statement to JSON representation
488func convertStatementToJSON(stmt ast.Statement) JSONStatement {
489 result := JSONStatement{
490 Type: fmt.Sprintf("%T", stmt),
491 Details: make(map[string]interface{}),
492 }
493
494 // Simplify type name
495 if len(result.Type) > 0 && result.Type[0] == '*' {
496 result.Type = result.Type[1:]
497 }
498 for i := len(result.Type) - 1; i >= 0; i-- {
499 if result.Type[i] == '.' {
500 result.Type = result.Type[i+1:]
501 break
502 }
503 }
504
505 // Add statement-specific details
506 switch s := stmt.(type) {
507 case *ast.SelectStatement:
508 result.Details["columns"] = len(s.Columns)
509 result.Details["has_from"] = len(s.From) > 0
510 result.Details["has_where"] = s.Where != nil
511 result.Details["has_group_by"] = len(s.GroupBy) > 0
512 result.Details["has_order_by"] = len(s.OrderBy) > 0
513 result.Details["has_limit"] = s.Limit != nil
514 result.Details["has_distinct"] = s.Distinct
515 if s.With != nil {
516 result.Details["has_with"] = true
517 result.Details["cte_count"] = len(s.With.CTEs)
518 }
519 case *ast.InsertStatement:
520 result.Details["has_table"] = s.TableName != ""
521 result.Details["has_values"] = s.Values != nil
522 result.Details["has_columns"] = len(s.Columns) > 0
523 case *ast.UpdateStatement:
524 result.Details["has_table"] = s.TableName != ""
525 result.Details["has_where"] = s.Where != nil
526 result.Details["set_count"] = len(s.Assignments)
527 case *ast.DeleteStatement:
528 result.Details["has_table"] = s.TableName != ""
529 result.Details["has_where"] = s.Where != nil
530 case *ast.CreateTableStatement:
531 result.Details["object_type"] = "table"
532 result.Details["has_if_not_exists"] = s.IfNotExists
533 case *ast.CreateIndexStatement:
534 result.Details["object_type"] = "index"
535 result.Details["has_unique"] = s.Unique
536 }
537
538 return result
539}

Callers 2

FormatParseJSONFunction · 0.85

Calls

no outgoing calls

Tested by 1