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

Function TestSQLFormatter_JOINStatements

cmd/gosqlx/cmd/sql_formatter_test.go:113–174  ·  view source on GitHub ↗

TestSQLFormatter_JOINStatements tests JOIN formatting

(t *testing.T)

Source from the content-addressed store, hash-verified

111
112// TestSQLFormatter_JOINStatements tests JOIN formatting
113func TestSQLFormatter_JOINStatements(t *testing.T) {
114 tests := []struct {
115 name string
116 sql string
117 expectWords []string
118 }{
119 {
120 name: "INNER JOIN",
121 sql: "SELECT u.name, o.total FROM users u INNER JOIN orders o ON u.id = o.user_id",
122 expectWords: []string{"select", "from", "inner join", "on"},
123 },
124 {
125 name: "LEFT JOIN",
126 sql: "SELECT u.name, o.total FROM users u LEFT JOIN orders o ON u.id = o.user_id",
127 expectWords: []string{"select", "from", "left join", "on"},
128 },
129 {
130 name: "Multiple JOINs",
131 sql: "SELECT u.name FROM users u INNER JOIN orders o ON u.id = o.user_id LEFT JOIN products p ON o.product_id = p.id",
132 expectWords: []string{"select", "from", "inner join", "left join"},
133 },
134 }
135
136 for _, tt := range tests {
137 t.Run(tt.name, func(t *testing.T) {
138 tkz := tokenizer.GetTokenizer()
139 defer tokenizer.PutTokenizer(tkz)
140
141 tokens, err := tkz.Tokenize([]byte(tt.sql))
142 if err != nil {
143 t.Fatalf("Tokenization failed: %v", err)
144 }
145
146 p := parser.NewParser()
147 astObj := ast.NewAST()
148 defer ast.ReleaseAST(astObj)
149
150 result, err := p.ParseFromModelTokens(tokens)
151 if err != nil {
152 t.Skipf("Parsing failed (may not be supported yet): %v", err)
153 return
154 }
155 astObj.Statements = result.Statements
156
157 formatter := NewSQLFormatter(FormatterOptions{
158 Indent: " ",
159 UppercaseKw: false,
160 })
161
162 output, err := formatter.Format(astObj)
163 if err != nil {
164 t.Fatalf("Formatting failed: %v", err)
165 }
166
167 for _, word := range tt.expectWords {
168 if !strings.Contains(strings.ToLower(output), word) {
169 t.Errorf("Expected '%s' in output:\n%s", word, output)
170 }

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