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

Method parseDictionaryArgExpr

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

Source from the content-addressed store, hash-verified

2246}
2247
2248func (p *Parser) parseDictionaryArgExpr(pos Pos) (*DictionaryArgExpr, error) {
2249 name, err := p.parseIdent()
2250 if err != nil {
2251 return nil, err
2252 }
2253
2254 var value Expr
2255 // Parse the value part
2256 switch {
2257 case p.matchTokenKind(TokenKindString):
2258 literal, err := p.parseLiteral(p.Pos())
2259 if err != nil {
2260 return nil, err
2261 }
2262 value = literal
2263 case p.matchTokenKind(TokenKindInt), p.matchTokenKind(TokenKindFloat):
2264 literal, err := p.parseLiteral(p.Pos())
2265 if err != nil {
2266 return nil, err
2267 }
2268 value = literal
2269 case p.matchTokenKind(TokenKindIdent):
2270 ident, err := p.parseIdent()
2271 if err != nil {
2272 return nil, err
2273 }
2274 // Check if it's followed by optional parentheses
2275 if p.matchTokenKind(TokenKindLParen) {
2276 _ = p.lexer.consumeToken() // consume (
2277 if err := p.expectTokenKind(TokenKindRParen); err != nil {
2278 return nil, err
2279 }
2280 value = &FunctionExpr{
2281 Name: ident,
2282 }
2283 } else {
2284 value = ident
2285 }
2286 default:
2287 return nil, fmt.Errorf("expected identifier, string or number in dictionary argument, got %s", p.lastTokenKind())
2288 }
2289
2290 return &DictionaryArgExpr{
2291 ArgPos: pos,
2292 Name: name,
2293 Value: value,
2294 }, nil
2295}
2296
2297func (p *Parser) parseDictionaryLifetimeClause(pos Pos) (*DictionaryLifetimeClause, error) {
2298 if err := p.expectKeyword(KeywordLifetime); err != nil {

Callers 2

Calls 7

parseIdentMethod · 0.95
matchTokenKindMethod · 0.95
parseLiteralMethod · 0.95
PosMethod · 0.95
expectTokenKindMethod · 0.95
lastTokenKindMethod · 0.95
consumeTokenMethod · 0.80

Tested by

no test coverage detected