(pos Pos)
| 727 | } |
| 728 | |
| 729 | func (p *Parser) parseTableArgExpr(pos Pos) (Expr, error) { |
| 730 | switch { |
| 731 | case p.matchTokenKind(TokenKindIdent): |
| 732 | ident, err := p.parseIdent() |
| 733 | if err != nil { |
| 734 | return nil, err |
| 735 | } |
| 736 | switch { |
| 737 | // nest identifier |
| 738 | case p.matchTokenKind(TokenKindDot): |
| 739 | dotIdent, err := p.tryParseDotIdent(p.Pos()) |
| 740 | if err != nil { |
| 741 | return nil, err |
| 742 | } |
| 743 | return &NestedIdentifier{ |
| 744 | Ident: ident, |
| 745 | DotIdent: dotIdent, |
| 746 | }, nil |
| 747 | case p.matchTokenKind(TokenKindLParen): |
| 748 | argsExpr, err := p.parseTableArgList(pos) |
| 749 | if err != nil { |
| 750 | return nil, err |
| 751 | } |
| 752 | return &TableFunctionExpr{ |
| 753 | Name: ident, |
| 754 | Args: argsExpr, |
| 755 | }, nil |
| 756 | default: |
| 757 | return ident, nil |
| 758 | } |
| 759 | case p.matchTokenKind(TokenKindLParen): |
| 760 | return p.parseSubQuery(p.Pos()) |
| 761 | case p.matchTokenKind(TokenKindInt), p.matchTokenKind(TokenKindString), p.matchKeyword(KeywordNull): |
| 762 | return p.parseLiteral(p.Pos()) |
| 763 | default: |
| 764 | return nil, fmt.Errorf("unexpected token: %q, expected <Name>, <literal>", p.last().String) |
| 765 | } |
| 766 | } |
| 767 | |
| 768 | func (p *Parser) parseTableArgList(pos Pos) (*TableArgListExpr, error) { |
| 769 | if err := p.expectTokenKind(TokenKindLParen); err != nil { |
no test coverage detected