MCPcopy Create free account
hub / github.com/AfterShip/clickhouse-sql-parser / parseTableExpr

Method parseTableExpr

parser/parser_query.go:367–443  ·  view source on GitHub ↗
(pos Pos)

Source from the content-addressed store, hash-verified

365}
366
367func (p *Parser) parseTableExpr(pos Pos) (*TableExpr, error) {
368 var expr Expr
369 var err error
370 switch {
371 case p.matchTokenKind(TokenKindString), p.matchTokenKind(TokenKindIdent):
372 // table name
373 tableIdentifier, err := p.parseTableIdentifier(p.Pos())
374 if err != nil {
375 return nil, err
376 }
377 // it's a table name
378 if tableIdentifier.Database != nil || !p.matchTokenKind(TokenKindLParen) { // database.table
379 expr = tableIdentifier
380 } else {
381 // table function expr
382 tableArgs, err := p.parseTableArgList(p.Pos())
383 if err != nil {
384 return nil, err
385 }
386 expr = &TableFunctionExpr{
387 Name: tableIdentifier.Table,
388 Args: tableArgs,
389 }
390 }
391 case p.matchTokenKind(TokenKindLParen):
392 expr, err = p.parseSubQuery(p.Pos())
393 default:
394 return nil, errors.New("expect table name or subquery")
395 }
396 if err != nil {
397 return nil, err
398 }
399
400 tableEnd := expr.End()
401 if p.tryConsumeKeywords(KeywordAs) {
402 alias, err := p.parseIdent()
403 if err != nil {
404 return nil, err
405 }
406 expr = &AliasExpr{
407 Expr: expr,
408 AliasPos: alias.Pos(),
409 Alias: alias,
410 }
411 tableEnd = expr.End()
412 } else if p.matchTokenKind(TokenKindIdent) && p.lastTokenKind() != TokenKindKeyword {
413 alias, err := p.parseIdent()
414 if err != nil {
415 return nil, err
416 }
417 expr = &AliasExpr{
418 Expr: expr,
419 AliasPos: alias.Pos(),
420 Alias: alias,
421 }
422 tableEnd = expr.End()
423 }
424

Callers 1

parseJoinTableExprMethod · 0.95

Calls 10

matchTokenKindMethod · 0.95
parseTableIdentifierMethod · 0.95
PosMethod · 0.95
parseTableArgListMethod · 0.95
parseSubQueryMethod · 0.95
EndMethod · 0.95
tryConsumeKeywordsMethod · 0.95
parseIdentMethod · 0.95
lastTokenKindMethod · 0.95
PosMethod · 0.65

Tested by

no test coverage detected