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

Method parseIdentOrFunction

parser/parser_table.go:402–491  ·  view source on GitHub ↗
(_ Pos)

Source from the content-addressed store, hash-verified

400}
401
402func (p *Parser) parseIdentOrFunction(_ Pos) (Expr, error) {
403 ident, err := p.parseIdent()
404 if err != nil {
405 return nil, err
406 }
407 switch {
408 case p.matchTokenKind(TokenKindLBracket):
409 params, err := p.parseArrayParams(p.Pos())
410 if err != nil {
411 return nil, err
412 }
413 return &ObjectParams{
414 Object: ident,
415 Params: params,
416 }, nil
417 case p.matchTokenKind(TokenKindLParen):
418 params, err := p.parseFunctionParams(p.Pos())
419 if err != nil {
420 return nil, err
421 }
422 funcExpr := &FunctionExpr{
423 Name: ident,
424 Params: params,
425 }
426
427 overPos := p.Pos()
428 if p.tryConsumeKeywords(KeywordOver) {
429 var overExpr Expr
430 switch {
431 case p.matchTokenKind(TokenKindIdent):
432 overExpr, err = p.parseIdent()
433 case p.matchTokenKind(TokenKindLParen):
434 overExpr, err = p.parseWindowCondition(p.Pos())
435 if err != nil {
436 return nil, err
437 }
438 default:
439 return nil, fmt.Errorf("expected window name or (, but got %q", p.lastTokenKind())
440 }
441
442 if err != nil {
443 return nil, err
444 }
445 return &WindowFunctionExpr{
446 Function: funcExpr,
447 OverPos: overPos,
448 OverExpr: overExpr,
449 }, nil
450 }
451 return funcExpr, nil
452 case p.tryConsumeTokenKind(TokenKindDot) != nil:
453 switch {
454 case p.matchTokenKind(TokenKindIdent):
455 fields := []*Ident{ident}
456 for {
457 child, err := p.parseIdent()
458 if err != nil {
459 return nil, err

Callers 1

parseColumnExprMethod · 0.95

Calls 11

parseIdentMethod · 0.95
matchTokenKindMethod · 0.95
parseArrayParamsMethod · 0.95
PosMethod · 0.95
parseFunctionParamsMethod · 0.95
tryConsumeKeywordsMethod · 0.95
parseWindowConditionMethod · 0.95
lastTokenKindMethod · 0.95
tryConsumeTokenKindMethod · 0.95
parseColumnStarMethod · 0.95
parseNumberMethod · 0.95

Tested by

no test coverage detected