@@ -297,10 +297,21 @@ func explainSystemQuery(sb *strings.Builder, indent string) {
297297func explainExplainQuery (sb * strings.Builder , n * ast.ExplainQuery , indent string , depth int ) {
298298 // EXPLAIN CURRENT TRANSACTION has no children
299299 if n .ExplainType == ast .ExplainCurrentTransaction {
300- fmt .Fprintf (sb , "%sExplain %s\n " , indent , n .ExplainType )
300+ // At top level (depth 0), ClickHouse outputs "Explain EXPLAIN <TYPE>"
301+ if depth == 0 {
302+ fmt .Fprintf (sb , "%sExplain EXPLAIN %s\n " , indent , n .ExplainType )
303+ } else {
304+ fmt .Fprintf (sb , "%sExplain %s\n " , indent , n .ExplainType )
305+ }
301306 return
302307 }
303- fmt .Fprintf (sb , "%sExplain %s (children %d)\n " , indent , n .ExplainType , 1 )
308+ // At top level (depth 0), ClickHouse outputs "Explain EXPLAIN <TYPE>"
309+ // Nested in subqueries, it outputs "Explain <TYPE>"
310+ if depth == 0 {
311+ fmt .Fprintf (sb , "%sExplain EXPLAIN %s (children %d)\n " , indent , n .ExplainType , 1 )
312+ } else {
313+ fmt .Fprintf (sb , "%sExplain %s (children %d)\n " , indent , n .ExplainType , 1 )
314+ }
304315 Node (sb , n .Statement , depth + 1 )
305316}
306317
0 commit comments