(pos Pos)
| 821 | } |
| 822 | |
| 823 | func (p *Parser) parseWindowCondition(pos Pos) (*WindowExpr, error) { |
| 824 | if err := p.expectTokenKind(TokenKindLParen); err != nil { |
| 825 | return nil, err |
| 826 | } |
| 827 | var windowName *Ident |
| 828 | if p.canParseWindowNameInParens() { |
| 829 | var err error |
| 830 | windowName, err = p.parseIdent() |
| 831 | if err != nil { |
| 832 | return nil, err |
| 833 | } |
| 834 | } |
| 835 | partitionBy, err := p.tryParsePartitionByClause(pos) |
| 836 | if err != nil { |
| 837 | return nil, err |
| 838 | } |
| 839 | orderBy, err := p.tryParseOrderByClause(p.Pos()) |
| 840 | if err != nil { |
| 841 | return nil, err |
| 842 | } |
| 843 | frame, err := p.tryParseWindowFrameClause(p.Pos()) |
| 844 | if err != nil { |
| 845 | return nil, err |
| 846 | } |
| 847 | rightParenPos := p.Pos() |
| 848 | if err := p.expectTokenKind(TokenKindRParen); err != nil { |
| 849 | return nil, err |
| 850 | } |
| 851 | return &WindowExpr{ |
| 852 | LeftParenPos: pos, |
| 853 | RightParenPos: rightParenPos, |
| 854 | WindowName: windowName, |
| 855 | PartitionBy: partitionBy, |
| 856 | OrderBy: orderBy, |
| 857 | Frame: frame, |
| 858 | }, nil |
| 859 | } |
| 860 | |
| 861 | func (p *Parser) canParseWindowNameInParens() bool { |
| 862 | if !p.matchTokenKind(TokenKindIdent) { |
no test coverage detected