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

Method parseColumnCastExpr

parser/parser_column.go:484–531  ·  view source on GitHub ↗
(pos Pos)

Source from the content-addressed store, hash-verified

482}
483
484func (p *Parser) parseColumnCastExpr(pos Pos) (Expr, error) {
485 if err := p.expectKeyword(KeywordCast); err != nil {
486 return nil, err
487 }
488
489 if err := p.expectTokenKind(TokenKindLParen); err != nil {
490 return nil, err
491 }
492
493 columnExpr, err := p.parseColumnExpr(p.Pos())
494 if err != nil {
495 return nil, err
496 }
497
498 var separator string
499 asPos := p.Pos()
500 switch {
501 // CAST(x, T) and CAST(x AS T) are equivalent
502 case p.matchKeyword(KeywordAs), p.matchTokenKind(","):
503 separator = p.last().String
504 _ = p.lexer.consumeToken()
505 default:
506 return nil, fmt.Errorf("expected AS or , but got %s", p.lastTokenKind())
507 }
508
509 var asColumnType Expr
510 // CAST(1 AS 'Float') or CAST(1 AS Float) are equivalent
511 if p.matchTokenKind(TokenKindString) {
512 asColumnType, err = p.parseString(p.Pos())
513 } else {
514 asColumnType, err = p.parseColumnType(p.Pos())
515 }
516 if err != nil {
517 return nil, err
518 }
519
520 if err := p.expectTokenKind(TokenKindRParen); err != nil {
521 return nil, err
522 }
523
524 return &CastExpr{
525 CastPos: pos,
526 AsPos: asPos,
527 Separator: separator,
528 Expr: columnExpr,
529 AsType: asColumnType,
530 }, nil
531}
532
533func (p *Parser) parseColumnExprListWithLParen(pos Pos) (*ColumnExprList, error) {
534 return p.parseColumnExprListWithTerm(TokenKindRParen, pos)

Callers 1

parseColumnExprMethod · 0.95

Calls 11

expectKeywordMethod · 0.95
expectTokenKindMethod · 0.95
parseColumnExprMethod · 0.95
PosMethod · 0.95
matchKeywordMethod · 0.95
matchTokenKindMethod · 0.95
lastMethod · 0.95
lastTokenKindMethod · 0.95
parseStringMethod · 0.95
parseColumnTypeMethod · 0.95
consumeTokenMethod · 0.80

Tested by

no test coverage detected