(pos Pos)
| 1743 | } |
| 1744 | |
| 1745 | func (p *Parser) parseColumnNamesExpr(pos Pos) (*ColumnNamesExpr, error) { |
| 1746 | if err := p.expectTokenKind(TokenKindLParen); err != nil { |
| 1747 | return nil, err |
| 1748 | } |
| 1749 | |
| 1750 | var columnNames []NestedIdentifier |
| 1751 | for !p.lexer.isEOF() && p.tryConsumeTokenKind(TokenKindRParen) == nil { |
| 1752 | name, err := p.ParseNestedIdentifier(p.Pos()) |
| 1753 | if err != nil { |
| 1754 | return nil, err |
| 1755 | } |
| 1756 | |
| 1757 | columnNames = append(columnNames, *name) |
| 1758 | if p.tryConsumeTokenKind(TokenKindComma) == nil { |
| 1759 | break |
| 1760 | } |
| 1761 | } |
| 1762 | rightParenPos := p.Pos() |
| 1763 | if err := p.expectTokenKind(TokenKindRParen); err != nil { |
| 1764 | return nil, err |
| 1765 | } |
| 1766 | return &ColumnNamesExpr{ |
| 1767 | LeftParenPos: pos, |
| 1768 | RightParenPos: rightParenPos, |
| 1769 | ColumnNames: columnNames, |
| 1770 | }, nil |
| 1771 | } |
| 1772 | |
| 1773 | func (p *Parser) parseTypedPlaceholder(pos Pos) (Expr, error) { |
| 1774 | if err := p.expectTokenKind(TokenKindLBrace); err != nil { |
no test coverage detected