()
| 798 | } |
| 799 | |
| 800 | func (p *Parser) parseSelectItem() (*SelectItem, error) { |
| 801 | expr, err := p.parseExpr(p.Pos()) |
| 802 | if err != nil { |
| 803 | return nil, err |
| 804 | } |
| 805 | |
| 806 | modifiers := make([]*FunctionExpr, 0) |
| 807 | for { |
| 808 | if p.matchKeyword(KeywordExcept) || p.matchKeyword(KeywordApply) || p.matchKeyword(KeywordReplace) { |
| 809 | modifier, err := p.parseFunctionExpr(p.Pos()) |
| 810 | if err != nil { |
| 811 | return nil, err |
| 812 | } |
| 813 | modifiers = append(modifiers, modifier) |
| 814 | } else { |
| 815 | break |
| 816 | } |
| 817 | } |
| 818 | |
| 819 | var alias *Ident |
| 820 | switch { |
| 821 | case p.tryConsumeKeywords(KeywordAs): |
| 822 | alias, err = p.parseIdent() |
| 823 | if err != nil { |
| 824 | return nil, err |
| 825 | } |
| 826 | case p.lastTokenKind() == TokenKindKeyword && !p.isSelectItemTerminatorKeyword(): |
| 827 | alias, err = p.parseIdent() |
| 828 | if err != nil { |
| 829 | return nil, err |
| 830 | } |
| 831 | default: |
| 832 | alias = p.tryParseIdent() |
| 833 | } |
| 834 | |
| 835 | return &SelectItem{ |
| 836 | Expr: expr, |
| 837 | Modifiers: modifiers, |
| 838 | Alias: alias, |
| 839 | }, nil |
| 840 | } |
| 841 | |
| 842 | func (p *Parser) parseColumnCaseExpr(pos Pos) (*CaseExpr, error) { |
| 843 | // CASE expr |
no test coverage detected