formatSQL provides basic SQL formatting
(sql string, opts FormattingOptions)
| 772 | |
| 773 | // formatSQL provides basic SQL formatting |
| 774 | func formatSQL(sql string, opts FormattingOptions) string { |
| 775 | // Basic SQL formatter - normalize whitespace and keyword casing |
| 776 | lines := strings.Split(sql, "\n") |
| 777 | var result []string |
| 778 | |
| 779 | indent := "" |
| 780 | if opts.InsertSpaces { |
| 781 | indent = strings.Repeat(" ", opts.TabSize) |
| 782 | } else { |
| 783 | indent = "\t" |
| 784 | } |
| 785 | |
| 786 | currentIndent := "" |
| 787 | for _, line := range lines { |
| 788 | trimmed := strings.TrimSpace(line) |
| 789 | if trimmed == "" { |
| 790 | continue |
| 791 | } |
| 792 | |
| 793 | upper := strings.ToUpper(trimmed) |
| 794 | |
| 795 | // Adjust indent based on keywords |
| 796 | if strings.HasPrefix(upper, "SELECT") || |
| 797 | strings.HasPrefix(upper, "INSERT") || |
| 798 | strings.HasPrefix(upper, "UPDATE") || |
| 799 | strings.HasPrefix(upper, "DELETE") || |
| 800 | strings.HasPrefix(upper, "CREATE") || |
| 801 | strings.HasPrefix(upper, "DROP") || |
| 802 | strings.HasPrefix(upper, "ALTER") || |
| 803 | strings.HasPrefix(upper, "WITH") { |
| 804 | currentIndent = "" |
| 805 | } else if strings.HasPrefix(upper, "FROM") || |
| 806 | strings.HasPrefix(upper, "WHERE") || |
| 807 | strings.HasPrefix(upper, "SET") || |
| 808 | strings.HasPrefix(upper, "VALUES") { |
| 809 | currentIndent = "" |
| 810 | } else if strings.HasPrefix(upper, "AND") || |
| 811 | strings.HasPrefix(upper, "OR") { |
| 812 | currentIndent = indent |
| 813 | } else if strings.HasPrefix(upper, "JOIN") || |
| 814 | strings.HasPrefix(upper, "LEFT") || |
| 815 | strings.HasPrefix(upper, "RIGHT") || |
| 816 | strings.HasPrefix(upper, "INNER") || |
| 817 | strings.HasPrefix(upper, "OUTER") || |
| 818 | strings.HasPrefix(upper, "CROSS") { |
| 819 | currentIndent = "" |
| 820 | } else if strings.HasPrefix(upper, "GROUP") || |
| 821 | strings.HasPrefix(upper, "ORDER") || |
| 822 | strings.HasPrefix(upper, "HAVING") || |
| 823 | strings.HasPrefix(upper, "LIMIT") { |
| 824 | currentIndent = "" |
| 825 | } |
| 826 | |
| 827 | result = append(result, currentIndent+trimmed) |
| 828 | } |
| 829 | |
| 830 | formatted := strings.Join(result, "\n") |
| 831 |