@@ -493,6 +493,178 @@ func (a *AlterTableAddIndex) Accept(visitor ASTVisitor) error {
493493 return visitor .VisitAlterTableAddIndex (a )
494494}
495495
496+ type ProjectionOrderBy struct {
497+ OrderByPos Pos
498+ Columns * ColumnExprList
499+ }
500+
501+ func (p * ProjectionOrderBy ) Pos () Pos {
502+ return p .OrderByPos
503+ }
504+
505+ func (p * ProjectionOrderBy ) End () Pos {
506+ return p .Columns .End ()
507+ }
508+
509+ func (p * ProjectionOrderBy ) String (level int ) string {
510+ var builder strings.Builder
511+ builder .WriteString ("ORDER BY " )
512+ builder .WriteString (p .Columns .String (level ))
513+ return builder .String ()
514+ }
515+
516+ func (p * ProjectionOrderBy ) Accept (visitor ASTVisitor ) error {
517+ visitor .enter (p )
518+ defer visitor .leave (p )
519+ return visitor .VisitProjectionOrderBy (p )
520+ }
521+
522+ type ProjectionSelect struct {
523+ LeftParenPos Pos
524+ RightParenPos Pos
525+ With * WithExpr
526+ SelectColumns * ColumnExprList
527+ GroupBy * GroupByExpr
528+ OrderBy * ProjectionOrderBy
529+ }
530+
531+ func (p * ProjectionSelect ) Pos () Pos {
532+ return p .LeftParenPos
533+
534+ }
535+
536+ func (p * ProjectionSelect ) End () Pos {
537+ return p .RightParenPos
538+ }
539+
540+ func (p * ProjectionSelect ) String (level int ) string {
541+ var builder strings.Builder
542+ builder .WriteString ("(" )
543+ if p .With != nil {
544+ builder .WriteString (p .With .String (level ))
545+ builder .WriteByte (' ' )
546+ }
547+ builder .WriteString ("SELECT " )
548+ builder .WriteString (p .SelectColumns .String (level ))
549+ if p .GroupBy != nil {
550+ builder .WriteString (" " )
551+ builder .WriteString (p .GroupBy .String (level ))
552+ }
553+ if p .OrderBy != nil {
554+ builder .WriteString (" " )
555+ builder .WriteString (p .OrderBy .String (level ))
556+ }
557+ builder .WriteString (")" )
558+ return builder .String ()
559+ }
560+
561+ func (p * ProjectionSelect ) Accept (visitor ASTVisitor ) error {
562+ visitor .enter (p )
563+ defer visitor .leave (p )
564+ if p .With != nil {
565+ if err := p .With .Accept (visitor ); err != nil {
566+ return err
567+ }
568+ }
569+ if err := p .SelectColumns .Accept (visitor ); err != nil {
570+ return err
571+ }
572+ if p .GroupBy != nil {
573+ if err := p .GroupBy .Accept (visitor ); err != nil {
574+ return err
575+ }
576+ }
577+ if p .OrderBy != nil {
578+ if err := p .OrderBy .Accept (visitor ); err != nil {
579+ return err
580+ }
581+ }
582+ return visitor .VisitProjectionSelect (p )
583+ }
584+
585+ type TableProjection struct {
586+ ProjectionPos Pos
587+ Identifier * NestedIdentifier
588+ Select * ProjectionSelect
589+ }
590+
591+ func (t * TableProjection ) Pos () Pos {
592+ return t .ProjectionPos
593+ }
594+
595+ func (t * TableProjection ) End () Pos {
596+ return t .Select .End ()
597+ }
598+
599+ func (t * TableProjection ) String (level int ) string {
600+ var builder strings.Builder
601+ builder .WriteString (t .Identifier .String (level ))
602+ builder .WriteString (" " )
603+ builder .WriteString (t .Select .String (level ))
604+ return builder .String ()
605+ }
606+
607+ func (t * TableProjection ) Accept (visitor ASTVisitor ) error {
608+ visitor .enter (t )
609+ defer visitor .leave (t )
610+ if err := t .Identifier .Accept (visitor ); err != nil {
611+ return err
612+ }
613+ if err := t .Select .Accept (visitor ); err != nil {
614+ return err
615+ }
616+ return visitor .VisitTableProjection (t )
617+ }
618+
619+ type AlterTableAddProjection struct {
620+ AddPos Pos
621+ StatementEnd Pos
622+
623+ IfNotExists bool
624+ TableProjection * TableProjection
625+ After * NestedIdentifier
626+ }
627+
628+ func (a * AlterTableAddProjection ) Pos () Pos {
629+ return a .AddPos
630+ }
631+
632+ func (a * AlterTableAddProjection ) End () Pos {
633+ return a .StatementEnd
634+ }
635+
636+ func (a * AlterTableAddProjection ) AlterType () string {
637+ return "ADD_PROJECTION"
638+ }
639+
640+ func (a * AlterTableAddProjection ) String (level int ) string {
641+ var builder strings.Builder
642+ builder .WriteString ("ADD PROJECTION " )
643+ if a .IfNotExists {
644+ builder .WriteString ("IF NOT EXISTS " )
645+ }
646+ builder .WriteString (a .TableProjection .String (level ))
647+ if a .After != nil {
648+ builder .WriteString (" AFTER " )
649+ builder .WriteString (a .After .String (level ))
650+ }
651+ return builder .String ()
652+ }
653+
654+ func (a * AlterTableAddProjection ) Accept (visitor ASTVisitor ) error {
655+ visitor .enter (a )
656+ defer visitor .leave (a )
657+ if err := a .TableProjection .Accept (visitor ); err != nil {
658+ return err
659+ }
660+ if a .After != nil {
661+ if err := a .After .Accept (visitor ); err != nil {
662+ return err
663+ }
664+ }
665+ return visitor .VisitAlterTableAddProjection (a )
666+ }
667+
496668type AlterTableDropColumn struct {
497669 DropPos Pos
498670 ColumnName * NestedIdentifier
0 commit comments