@@ -20,6 +20,9 @@ func explainInsertQuery(sb *strings.Builder, n *ast.InsertQuery, indent string,
2020 children ++
2121 } else if n .Table != "" {
2222 children ++ // Table identifier
23+ if n .Database != "" {
24+ children ++ // Database identifier (separate from table)
25+ }
2326 }
2427 if len (n .Columns ) > 0 {
2528 children ++ // Column list
@@ -45,11 +48,13 @@ func explainInsertQuery(sb *strings.Builder, n *ast.InsertQuery, indent string,
4548 if n .Function != nil {
4649 Node (sb , n .Function , depth + 1 )
4750 } else if n .Table != "" {
48- name := n .Table
4951 if n .Database != "" {
50- name = n .Database + "." + n .Table
52+ // Database-qualified: output separate identifiers
53+ fmt .Fprintf (sb , "%s Identifier %s\n " , indent , n .Database )
54+ fmt .Fprintf (sb , "%s Identifier %s\n " , indent , n .Table )
55+ } else {
56+ fmt .Fprintf (sb , "%s Identifier %s\n " , indent , n .Table )
5157 }
52- fmt .Fprintf (sb , "%s Identifier %s\n " , indent , name )
5358 }
5459
5560 // Column list
@@ -125,8 +130,13 @@ func explainCreateQuery(sb *strings.Builder, n *ast.CreateQuery, indent string,
125130 if n .CreateDatabase {
126131 name = n .Database
127132 }
133+ // Check for database-qualified table/view name
134+ hasDatabase := n .Database != "" && ! n .CreateDatabase && (n .Table != "" || n .View != "" )
128135 // Count children: name + columns + engine/storage
129136 children := 1 // name identifier
137+ if hasDatabase {
138+ children ++ // additional identifier for database
139+ }
130140 if len (n .Columns ) > 0 || len (n .Indexes ) > 0 || len (n .Constraints ) > 0 {
131141 children ++
132142 }
@@ -142,10 +152,16 @@ func explainCreateQuery(sb *strings.Builder, n *ast.CreateQuery, indent string,
142152 // ClickHouse adds an extra space before (children N) for CREATE DATABASE
143153 if n .CreateDatabase {
144154 fmt .Fprintf (sb , "%sCreateQuery %s (children %d)\n " , indent , name , children )
155+ fmt .Fprintf (sb , "%s Identifier %s\n " , indent , name )
156+ } else if hasDatabase {
157+ // Database-qualified: CreateQuery db table (children N)
158+ fmt .Fprintf (sb , "%sCreateQuery %s %s (children %d)\n " , indent , n .Database , name , children )
159+ fmt .Fprintf (sb , "%s Identifier %s\n " , indent , n .Database )
160+ fmt .Fprintf (sb , "%s Identifier %s\n " , indent , name )
145161 } else {
146162 fmt .Fprintf (sb , "%sCreateQuery %s (children %d)\n " , indent , name , children )
163+ fmt .Fprintf (sb , "%s Identifier %s\n " , indent , name )
147164 }
148- fmt .Fprintf (sb , "%s Identifier %s\n " , indent , name )
149165 if len (n .Columns ) > 0 || len (n .Indexes ) > 0 || len (n .Constraints ) > 0 {
150166 childrenCount := 0
151167 if len (n .Columns ) > 0 {
@@ -690,6 +706,15 @@ func explainParameter(sb *strings.Builder, n *ast.Parameter, indent string) {
690706}
691707
692708func explainDetachQuery (sb * strings.Builder , n * ast.DetachQuery , indent string ) {
709+ // Check for database-qualified table name
710+ if n .Database != "" && n .Table != "" {
711+ // Database-qualified: DetachQuery db table (children 2)
712+ fmt .Fprintf (sb , "%sDetachQuery %s %s (children 2)\n " , indent , n .Database , n .Table )
713+ fmt .Fprintf (sb , "%s Identifier %s\n " , indent , n .Database )
714+ fmt .Fprintf (sb , "%s Identifier %s\n " , indent , n .Table )
715+ return
716+ }
717+ // Single name (table only or database only for DETACH DATABASE)
693718 name := n .Table
694719 if name == "" {
695720 name = n .Database
@@ -703,6 +728,15 @@ func explainDetachQuery(sb *strings.Builder, n *ast.DetachQuery, indent string)
703728}
704729
705730func explainAttachQuery (sb * strings.Builder , n * ast.AttachQuery , indent string ) {
731+ // Check for database-qualified table name
732+ if n .Database != "" && n .Table != "" {
733+ // Database-qualified: AttachQuery db table (children 2)
734+ fmt .Fprintf (sb , "%sAttachQuery %s %s (children 2)\n " , indent , n .Database , n .Table )
735+ fmt .Fprintf (sb , "%s Identifier %s\n " , indent , n .Database )
736+ fmt .Fprintf (sb , "%s Identifier %s\n " , indent , n .Table )
737+ return
738+ }
739+ // Single name (table only or database only for ATTACH DATABASE)
706740 name := n .Table
707741 if name == "" {
708742 name = n .Database
0 commit comments