Skip to content

Commit fc06a9b

Browse files
committed
Fix explain output formatting and test comparison
- Strip server error messages from expected explain output - Fix CreateQuery spacing for CREATE DATABASE (add extra space) - Fix DropQuery spacing for DROP DATABASE vs DROP TABLE This fixes 243 tests (5606 -> 5849 passing).
1 parent cb6b879 commit fc06a9b

2 files changed

Lines changed: 17 additions & 2 deletions

File tree

internal/explain/statements.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,12 @@ func explainCreateQuery(sb *strings.Builder, n *ast.CreateQuery, indent string,
6262
if n.AsSelect != nil {
6363
children++
6464
}
65-
fmt.Fprintf(sb, "%sCreateQuery %s (children %d)\n", indent, name, children)
65+
// ClickHouse adds an extra space before (children N) for CREATE DATABASE
66+
if n.CreateDatabase {
67+
fmt.Fprintf(sb, "%sCreateQuery %s (children %d)\n", indent, name, children)
68+
} else {
69+
fmt.Fprintf(sb, "%sCreateQuery %s (children %d)\n", indent, name, children)
70+
}
6671
fmt.Fprintf(sb, "%s Identifier %s\n", indent, name)
6772
if len(n.Columns) > 0 {
6873
fmt.Fprintf(sb, "%s Columns definition (children %d)\n", indent, 1)
@@ -154,7 +159,12 @@ func explainDropQuery(sb *strings.Builder, n *ast.DropQuery, indent string) {
154159
if n.DropDatabase {
155160
name = n.Database
156161
}
157-
fmt.Fprintf(sb, "%sDropQuery %s (children %d)\n", indent, name, 1)
162+
// DROP DATABASE uses different spacing than DROP TABLE
163+
if n.DropDatabase {
164+
fmt.Fprintf(sb, "%sDropQuery %s (children %d)\n", indent, name, 1)
165+
} else {
166+
fmt.Fprintf(sb, "%sDropQuery %s (children %d)\n", indent, name, 1)
167+
}
158168
fmt.Fprintf(sb, "%s Identifier %s\n", indent, name)
159169
}
160170

parser/parser_test.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,11 @@ func TestParser(t *testing.T) {
118118
explainPath := filepath.Join(testDir, "explain.txt")
119119
if expectedBytes, err := os.ReadFile(explainPath); err == nil {
120120
expected := strings.TrimSpace(string(expectedBytes))
121+
// Strip server error messages from expected output
122+
// These are messages like "The query succeeded but the server error '43' was expected..."
123+
if idx := strings.Index(expected, "\nThe query succeeded but the server error"); idx != -1 {
124+
expected = strings.TrimSpace(expected[:idx])
125+
}
121126
actual := strings.TrimSpace(parser.Explain(stmts[0]))
122127
if actual != expected {
123128
if metadata.Todo {

0 commit comments

Comments
 (0)