@@ -3636,18 +3636,98 @@ func (t *TTLClause) Accept(visitor ASTVisitor) error {
36363636 return visitor .VisitTTLExprList (t )
36373637}
36383638
3639+ type Fill struct {
3640+ FillPos Pos
3641+ From Expr // optional
3642+ To Expr // optional
3643+ Step Expr // optional
3644+ Staleness Expr // optional
3645+ }
3646+
3647+ func (f * Fill ) Pos () Pos {
3648+ return f .FillPos
3649+ }
3650+
3651+ func (f * Fill ) End () Pos {
3652+ if f .Staleness != nil {
3653+ return f .Staleness .End ()
3654+ }
3655+ if f .Step != nil {
3656+ return f .Step .End ()
3657+ }
3658+ if f .To != nil {
3659+ return f .To .End ()
3660+ }
3661+ if f .From != nil {
3662+ return f .From .End ()
3663+ }
3664+ return f .FillPos + Pos (len ("FILL" ))
3665+ }
3666+
3667+ func (f * Fill ) String () string {
3668+ var builder strings.Builder
3669+ builder .WriteString ("WITH FILL" )
3670+ if f .From != nil {
3671+ builder .WriteString (" FROM " )
3672+ builder .WriteString (f .From .String ())
3673+ }
3674+ if f .To != nil {
3675+ builder .WriteString (" TO " )
3676+ builder .WriteString (f .To .String ())
3677+ }
3678+ if f .Step != nil {
3679+ builder .WriteString (" STEP " )
3680+ builder .WriteString (f .Step .String ())
3681+ }
3682+ if f .Staleness != nil {
3683+ builder .WriteString (" STALENESS " )
3684+ builder .WriteString (f .Staleness .String ())
3685+ }
3686+ return builder .String ()
3687+ }
3688+
3689+ func (f * Fill ) Accept (visitor ASTVisitor ) error {
3690+ visitor .Enter (f )
3691+ defer visitor .Leave (f )
3692+ if f .From != nil {
3693+ if err := f .From .Accept (visitor ); err != nil {
3694+ return err
3695+ }
3696+ }
3697+ if f .To != nil {
3698+ if err := f .To .Accept (visitor ); err != nil {
3699+ return err
3700+ }
3701+ }
3702+ if f .Step != nil {
3703+ if err := f .Step .Accept (visitor ); err != nil {
3704+ return err
3705+ }
3706+ }
3707+ if f .Staleness != nil {
3708+ if err := f .Staleness .Accept (visitor ); err != nil {
3709+ return err
3710+ }
3711+ }
3712+ return visitor .VisitFill (f )
3713+ }
3714+
36393715type OrderExpr struct {
36403716 OrderPos Pos
36413717 Expr Expr
36423718 Alias * Ident
36433719 Direction OrderDirection
3720+ Fill * Fill // optional WITH FILL clause
36443721}
36453722
36463723func (o * OrderExpr ) Pos () Pos {
36473724 return o .OrderPos
36483725}
36493726
36503727func (o * OrderExpr ) End () Pos {
3728+ if o .Fill != nil {
3729+ return o .Fill .End ()
3730+ }
36513731 if o .Alias != nil {
36523732 return o .Alias .End ()
36533733 }
@@ -3665,6 +3745,10 @@ func (o *OrderExpr) String() string {
36653745 builder .WriteByte (' ' )
36663746 builder .WriteString (string (o .Direction ))
36673747 }
3748+ if o .Fill != nil {
3749+ builder .WriteByte (' ' )
3750+ builder .WriteString (o .Fill .String ())
3751+ }
36683752 return builder .String ()
36693753}
36703754
@@ -3679,20 +3763,110 @@ func (o *OrderExpr) Accept(visitor ASTVisitor) error {
36793763 return err
36803764 }
36813765 }
3766+ if o .Fill != nil {
3767+ if err := o .Fill .Accept (visitor ); err != nil {
3768+ return err
3769+ }
3770+ }
36823771 return visitor .VisitOrderByExpr (o )
36833772}
36843773
3774+ type InterpolateItem struct {
3775+ Column * Ident
3776+ Expr Expr // optional AS expression
3777+ }
3778+
3779+ func (i * InterpolateItem ) Pos () Pos {
3780+ return i .Column .Pos ()
3781+ }
3782+
3783+ func (i * InterpolateItem ) End () Pos {
3784+ if i .Expr != nil {
3785+ return i .Expr .End ()
3786+ }
3787+ return i .Column .End ()
3788+ }
3789+
3790+ func (i * InterpolateItem ) String () string {
3791+ var builder strings.Builder
3792+ builder .WriteString (i .Column .String ())
3793+ if i .Expr != nil {
3794+ builder .WriteString (" AS " )
3795+ builder .WriteString (i .Expr .String ())
3796+ }
3797+ return builder .String ()
3798+ }
3799+
3800+ func (i * InterpolateItem ) Accept (visitor ASTVisitor ) error {
3801+ visitor .Enter (i )
3802+ defer visitor .Leave (i )
3803+ if err := i .Column .Accept (visitor ); err != nil {
3804+ return err
3805+ }
3806+ if i .Expr != nil {
3807+ if err := i .Expr .Accept (visitor ); err != nil {
3808+ return err
3809+ }
3810+ }
3811+ return visitor .VisitInterpolateItem (i )
3812+ }
3813+
3814+ type InterpolateClause struct {
3815+ InterpolatePos Pos
3816+ ListEnd Pos
3817+ Items []* InterpolateItem // can be nil for INTERPOLATE without columns
3818+ }
3819+
3820+ func (i * InterpolateClause ) Pos () Pos {
3821+ return i .InterpolatePos
3822+ }
3823+
3824+ func (i * InterpolateClause ) End () Pos {
3825+ return i .ListEnd
3826+ }
3827+
3828+ func (i * InterpolateClause ) String () string {
3829+ var builder strings.Builder
3830+ builder .WriteString ("INTERPOLATE" )
3831+ if len (i .Items ) > 0 {
3832+ builder .WriteString (" (" )
3833+ for idx , item := range i .Items {
3834+ builder .WriteString (item .String ())
3835+ if idx != len (i .Items )- 1 {
3836+ builder .WriteString (", " )
3837+ }
3838+ }
3839+ builder .WriteByte (')' )
3840+ }
3841+ return builder .String ()
3842+ }
3843+
3844+ func (i * InterpolateClause ) Accept (visitor ASTVisitor ) error {
3845+ visitor .Enter (i )
3846+ defer visitor .Leave (i )
3847+ for _ , item := range i .Items {
3848+ if err := item .Accept (visitor ); err != nil {
3849+ return err
3850+ }
3851+ }
3852+ return visitor .VisitInterpolateClause (i )
3853+ }
3854+
36853855type OrderByClause struct {
3686- OrderPos Pos
3687- ListEnd Pos
3688- Items []Expr
3856+ OrderPos Pos
3857+ ListEnd Pos
3858+ Items []Expr
3859+ Interpolate * InterpolateClause // optional INTERPOLATE clause
36893860}
36903861
36913862func (o * OrderByClause ) Pos () Pos {
36923863 return o .OrderPos
36933864}
36943865
36953866func (o * OrderByClause ) End () Pos {
3867+ if o .Interpolate != nil {
3868+ return o .Interpolate .End ()
3869+ }
36963870 return o .ListEnd
36973871}
36983872
@@ -3706,6 +3880,10 @@ func (o *OrderByClause) String() string {
37063880 builder .WriteByte (' ' )
37073881 }
37083882 }
3883+ if o .Interpolate != nil {
3884+ builder .WriteByte (' ' )
3885+ builder .WriteString (o .Interpolate .String ())
3886+ }
37093887 return builder .String ()
37103888}
37113889
@@ -3717,6 +3895,11 @@ func (o *OrderByClause) Accept(visitor ASTVisitor) error {
37173895 return err
37183896 }
37193897 }
3898+ if o .Interpolate != nil {
3899+ if err := o .Interpolate .Accept (visitor ); err != nil {
3900+ return err
3901+ }
3902+ }
37203903 return visitor .VisitOrderByListExpr (o )
37213904}
37223905
0 commit comments