@@ -2860,53 +2860,44 @@ func (n *NestedIdentifier) Accept(visitor ASTVisitor) error {
28602860 return visitor .VisitNestedIdentifier (n )
28612861}
28622862
2863- type ColumnIdentifier struct {
2864- Database * Ident
2865- Table * Ident
2866- Column * Ident
2863+ type Path struct {
2864+ Fields []* Ident
28672865}
28682866
2869- func (c * ColumnIdentifier ) Pos () Pos {
2870- if c .Database != nil {
2871- return c .Database .NamePos
2872- } else if c .Table != nil {
2873- return c .Table .NamePos
2874- } else {
2875- return c .Column .NamePos
2867+ func (p * Path ) Pos () Pos {
2868+ if len (p .Fields ) > 0 {
2869+ return p .Fields [0 ].Pos ()
28762870 }
2871+ return 0
28772872}
28782873
2879- func (c * ColumnIdentifier ) End () Pos {
2880- return c .Column .NameEnd
2881- }
2882-
2883- func (c * ColumnIdentifier ) String () string {
2884- if c .Database != nil {
2885- return c .Database .String () + "." + c .Table .String () + "." + c .Column .String ()
2886- } else if c .Table != nil {
2887- return c .Table .String () + "." + c .Column .String ()
2888- } else {
2889- return c .Column .String ()
2874+ func (p * Path ) End () Pos {
2875+ if len (p .Fields ) > 0 {
2876+ return p .Fields [len (p .Fields )- 1 ].End ()
28902877 }
2878+ return 0
28912879}
28922880
2893- func (c * ColumnIdentifier ) Accept (visitor ASTVisitor ) error {
2894- visitor .Enter (c )
2895- defer visitor .Leave (c )
2896- if c .Database != nil {
2897- if err := c .Database .Accept (visitor ); err != nil {
2898- return err
2881+ func (p * Path ) String () string {
2882+ var builder strings.Builder
2883+ for i , ident := range p .Fields {
2884+ if i > 0 {
2885+ builder .WriteByte ('.' )
28992886 }
2887+ builder .WriteString (ident .String ())
29002888 }
2901- if c .Table != nil {
2902- if err := c .Table .Accept (visitor ); err != nil {
2889+ return builder .String ()
2890+ }
2891+
2892+ func (p * Path ) Accept (visitor ASTVisitor ) error {
2893+ visitor .Enter (p )
2894+ defer visitor .Leave (p )
2895+ for _ , ident := range p .Fields {
2896+ if err := ident .Accept (visitor ); err != nil {
29032897 return err
29042898 }
29052899 }
2906- if err := c .Column .Accept (visitor ); err != nil {
2907- return err
2908- }
2909- return visitor .VisitColumnIdentifier (c )
2900+ return visitor .VisitPath (p )
29102901}
29112902
29122903type TableIdentifier struct {
0 commit comments