@@ -471,12 +471,60 @@ func explainAliasedExpr(sb *strings.Builder, n *ast.AliasedExpr, depth int) {
471471 }
472472}
473473
474- func explainAsterisk (sb * strings.Builder , n * ast.Asterisk , indent string ) {
474+ func explainAsterisk (sb * strings.Builder , n * ast.Asterisk , indent string , depth int ) {
475+ // Check if there are any column transformers (EXCEPT, REPLACE)
476+ hasTransformers := len (n .Except ) > 0 || len (n .Replace ) > 0
477+
475478 if n .Table != "" {
476- fmt .Fprintf (sb , "%sQualifiedAsterisk (children %d)\n " , indent , 1 )
477- fmt .Fprintf (sb , "%s Identifier %s\n " , indent , n .Table )
479+ if hasTransformers {
480+ fmt .Fprintf (sb , "%sQualifiedAsterisk (children %d)\n " , indent , 2 )
481+ fmt .Fprintf (sb , "%s Identifier %s\n " , indent , n .Table )
482+ explainColumnsTransformers (sb , n , indent + " " , depth + 1 )
483+ } else {
484+ fmt .Fprintf (sb , "%sQualifiedAsterisk (children %d)\n " , indent , 1 )
485+ fmt .Fprintf (sb , "%s Identifier %s\n " , indent , n .Table )
486+ }
478487 } else {
479- fmt .Fprintf (sb , "%sAsterisk\n " , indent )
488+ if hasTransformers {
489+ fmt .Fprintf (sb , "%sAsterisk (children %d)\n " , indent , 1 )
490+ explainColumnsTransformers (sb , n , indent + " " , depth + 1 )
491+ } else {
492+ fmt .Fprintf (sb , "%sAsterisk\n " , indent )
493+ }
494+ }
495+ }
496+
497+ func explainColumnsTransformers (sb * strings.Builder , n * ast.Asterisk , indent string , depth int ) {
498+ transformerCount := 0
499+ if len (n .Except ) > 0 {
500+ transformerCount ++
501+ }
502+ if len (n .Replace ) > 0 {
503+ transformerCount ++
504+ }
505+
506+ fmt .Fprintf (sb , "%sColumnsTransformerList (children %d)\n " , indent , transformerCount )
507+
508+ if len (n .Except ) > 0 {
509+ fmt .Fprintf (sb , "%s ColumnsExceptTransformer (children %d)\n " , indent , len (n .Except ))
510+ for _ , col := range n .Except {
511+ fmt .Fprintf (sb , "%s Identifier %s\n " , indent , col )
512+ }
513+ }
514+
515+ if len (n .Replace ) > 0 {
516+ fmt .Fprintf (sb , "%s ColumnsReplaceTransformer (children %d)\n " , indent , len (n .Replace ))
517+ for _ , replace := range n .Replace {
518+ children := 0
519+ if replace .Expr != nil {
520+ children = 1
521+ }
522+ fmt .Fprintf (sb , "%s ColumnsReplaceTransformer::Replacement (children %d)\n " , indent , children )
523+ if replace .Expr != nil {
524+ // Output the expression without alias - the replacement name is implied
525+ Node (sb , replace .Expr , depth + 3 )
526+ }
527+ }
480528 }
481529}
482530
0 commit comments