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

Method parseTableArgList

parser/parser_table.go:768–840  ·  view source on GitHub ↗
(pos Pos)

Source from the content-addressed store, hash-verified

766}
767
768func (p *Parser) parseTableArgList(pos Pos) (*TableArgListExpr, error) {
769 if err := p.expectTokenKind(TokenKindLParen); err != nil {
770 return nil, err
771 }
772
773 args := make([]Expr, 0)
774 for !p.lexer.isEOF() {
775 // Check if this is a named parameter (identifier followed by =)
776 var arg Expr
777 var err error
778
779 // Try to detect named parameter pattern: last token is identifier, next token is =
780 isNamedParam := false
781 lastKind := p.lastTokenKind()
782 if lastKind == TokenKindIdent || lastKind == TokenKindKeyword {
783 // Last token is an identifier, peek at the next token
784 nextToken, peekErr := p.lexer.peekToken()
785
786 if peekErr == nil && nextToken != nil && nextToken.Kind == TokenKindSingleEQ {
787 isNamedParam = true
788 }
789 }
790
791 if isNamedParam {
792 // Parse as named parameter - the identifier is already the last token
793 // We need to get it, consume the =, and parse the value
794 name := &Ident{
795 NamePos: p.last().Pos,
796 NameEnd: p.last().End,
797 Name: p.last().String,
798 }
799 // Consume the = token
800 if err := p.lexer.consumeToken(); err != nil {
801 return nil, err
802 }
803 if err := p.expectTokenKind(TokenKindSingleEQ); err != nil {
804 return nil, err
805 }
806 // Parse the value
807 value, err := p.parseTableArgExpr(p.Pos())
808 if err != nil {
809 return nil, err
810 }
811 arg = &NamedParameterExpr{
812 NamePos: name.NamePos,
813 Name: name,
814 Value: value,
815 }
816 } else {
817 // Parse as regular table arg expression
818 arg, err = p.parseTableArgExpr(p.Pos())
819 }
820
821 if err != nil {
822 return nil, err
823 }
824 args = append(args, arg)
825 if p.tryConsumeTokenKind(TokenKindComma) == nil {

Callers 4

parseTableExprMethod · 0.95
parseCreateTableMethod · 0.95
parseTableArgExprMethod · 0.95

Calls 9

expectTokenKindMethod · 0.95
lastTokenKindMethod · 0.95
lastMethod · 0.95
parseTableArgExprMethod · 0.95
PosMethod · 0.95
tryConsumeTokenKindMethod · 0.95
isEOFMethod · 0.80
peekTokenMethod · 0.80
consumeTokenMethod · 0.80

Tested by

no test coverage detected