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

Function TestSQLFormatter_WindowFunctions

cmd/gosqlx/cmd/sql_formatter_test.go:236–297  ·  view source on GitHub ↗

TestSQLFormatter_WindowFunctions tests window function formatting

(t *testing.T)

Source from the content-addressed store, hash-verified

234
235// TestSQLFormatter_WindowFunctions tests window function formatting
236func TestSQLFormatter_WindowFunctions(t *testing.T) {
237 tests := []struct {
238 name string
239 sql string
240 expectWords []string
241 }{
242 {
243 name: "ROW_NUMBER with OVER",
244 sql: "SELECT name, ROW_NUMBER() OVER (ORDER BY salary DESC) as rank FROM employees",
245 expectWords: []string{"select", "over", "order by"},
246 },
247 {
248 name: "RANK with PARTITION BY",
249 sql: "SELECT dept, name, RANK() OVER (PARTITION BY dept ORDER BY salary) FROM employees",
250 expectWords: []string{"select", "over", "partition by", "order by"},
251 },
252 {
253 name: "Window frame",
254 sql: "SELECT date, SUM(amount) OVER (ORDER BY date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) FROM transactions",
255 expectWords: []string{"select", "over", "order by", "rows", "between"},
256 },
257 }
258
259 for _, tt := range tests {
260 t.Run(tt.name, func(t *testing.T) {
261 tkz := tokenizer.GetTokenizer()
262 defer tokenizer.PutTokenizer(tkz)
263
264 tokens, err := tkz.Tokenize([]byte(tt.sql))
265 if err != nil {
266 t.Fatalf("Tokenization failed: %v", err)
267 }
268
269 p := parser.NewParser()
270 astObj := ast.NewAST()
271 defer ast.ReleaseAST(astObj)
272
273 result, err := p.ParseFromModelTokens(tokens)
274 if err != nil {
275 t.Skipf("Parsing failed (may not be supported yet): %v", err)
276 return
277 }
278 astObj.Statements = result.Statements
279
280 formatter := NewSQLFormatter(FormatterOptions{
281 Indent: " ",
282 UppercaseKw: false,
283 })
284
285 output, err := formatter.Format(astObj)
286 if err != nil {
287 t.Fatalf("Formatting failed: %v", err)
288 }
289
290 for _, word := range tt.expectWords {
291 if !strings.Contains(strings.ToLower(output), word) {
292 t.Errorf("Expected '%s' in output:\n%s", word, output)
293 }

Callers

nothing calls this directly

Calls 12

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

Tested by

no test coverage detected