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

Method formatSQL

cmd/gosqlx/cmd/formatter.go:205–252  ·  view source on GitHub ↗

formatSQL formats a SQL string

(sql string)

Source from the content-addressed store, hash-verified

203
204// formatSQL formats a SQL string
205func (f *Formatter) formatSQL(sql string) (string, error) {
206 // Use pooled tokenizer for performance
207 tkz := tokenizer.GetTokenizer()
208 defer tokenizer.PutTokenizer(tkz)
209
210 // Tokenize the SQL
211 tokens, err := tkz.Tokenize([]byte(sql))
212 if err != nil {
213 return "", fmt.Errorf("tokenization failed: %w", err)
214 }
215
216 if len(tokens) == 0 {
217 return "", nil
218 }
219
220 // Convert tokens for parser using centralized converter
221
222 // Parse to AST with proper error handling for memory management
223 p := parser.NewParser()
224 parsedAST, err := p.ParseFromModelTokens(tokens)
225 if err != nil {
226 // Parser failed, no AST to release
227 return "", fmt.Errorf("parsing failed: %w", err)
228 }
229
230 // CRITICAL: Always release AST, even on formatting errors
231 defer func() {
232 ast.ReleaseAST(parsedAST)
233 }()
234
235 // Configure formatter options
236 indentStr := strings.Repeat(" ", f.Opts.IndentSize)
237 formatterOpts := FormatterOptions{
238 Indent: indentStr,
239 Compact: f.Opts.Compact,
240 UppercaseKw: f.Opts.Uppercase,
241 AlignColumns: !f.Opts.Compact, // Align columns unless in compact mode
242 }
243
244 // Create formatter and format the AST
245 formatter := NewSQLFormatter(formatterOpts)
246 formatted, err := formatter.Format(parsedAST)
247 if err != nil {
248 return "", fmt.Errorf("formatting failed: %w", err)
249 }
250
251 return formatted, nil
252}
253
254// FormatterFlags represents CLI flags for formatter command
255type FormatterFlags struct {

Callers 3

formatFileMethod · 0.95
formatFromStdinFunction · 0.95
formatInlineSQLFunction · 0.95

Calls 9

ParseFromModelTokensMethod · 0.95
FormatMethod · 0.95
GetTokenizerFunction · 0.92
PutTokenizerFunction · 0.92
NewParserFunction · 0.92
ReleaseASTFunction · 0.92
NewSQLFormatterFunction · 0.85
TokenizeMethod · 0.80
ErrorfMethod · 0.65

Tested by

no test coverage detected