(_ Pos)
| 247 | } |
| 248 | |
| 249 | func (p *Parser) parseJoinTableExpr(_ Pos) (Expr, error) { |
| 250 | switch { |
| 251 | case p.matchTokenKind(TokenKindIdent), p.matchTokenKind(TokenKindString), p.matchTokenKind(TokenKindLParen): |
| 252 | tableExpr, err := p.parseTableExpr(p.Pos()) |
| 253 | if err != nil { |
| 254 | return nil, err |
| 255 | } |
| 256 | statementEnd := tableExpr.End() |
| 257 | |
| 258 | hasFinal := p.matchKeyword(KeywordFinal) |
| 259 | if hasFinal { |
| 260 | statementEnd = p.End() |
| 261 | _ = p.lexer.consumeToken() |
| 262 | } |
| 263 | |
| 264 | sampleRatio, err := p.tryParseSampleClause(p.Pos()) |
| 265 | if err != nil { |
| 266 | return nil, err |
| 267 | } |
| 268 | if sampleRatio != nil { |
| 269 | statementEnd = sampleRatio.End() |
| 270 | } |
| 271 | return &JoinTableExpr{ |
| 272 | Table: tableExpr, |
| 273 | SampleRatio: sampleRatio, |
| 274 | HasFinal: hasFinal, |
| 275 | StatementEnd: statementEnd, |
| 276 | }, nil |
| 277 | default: |
| 278 | return nil, fmt.Errorf("expected table name or subquery, got %s", fmt.Sprintf("%v", p.lastTokenKind())) |
| 279 | } |
| 280 | } |
| 281 | |
| 282 | func (p *Parser) parseJoinRightExpr(pos Pos) (expr Expr, err error) { |
| 283 | var rightExpr Expr |
no test coverage detected