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

Method parseNumber

parser/parser_common.go:263–296  ·  view source on GitHub ↗
(pos Pos)

Source from the content-addressed store, hash-verified

261}
262
263func (p *Parser) parseNumber(pos Pos) (*NumberLiteral, error) {
264 var err error
265
266 lastToken := p.last()
267 switch {
268 case p.matchTokenKind(TokenKindInt):
269 err = p.expectTokenKind(TokenKindInt)
270 case p.matchTokenKind(TokenKindFloat):
271 err = p.expectTokenKind(TokenKindFloat)
272 case p.matchTokenKind(TokenKindDot):
273 _ = p.lexer.consumeToken()
274 lastToken = p.last()
275 if err := p.expectTokenKind(TokenKindInt); err != nil {
276 return nil, err
277 }
278 if lastToken.Base != 10 {
279 return nil, fmt.Errorf("invalid decimal literal: %q", lastToken.String)
280 }
281 lastToken.String = "." + lastToken.String
282 lastToken.Kind = TokenKindFloat
283 default:
284 return nil, fmt.Errorf("expected <int> or <float>, but got %q", p.lastTokenKind())
285 }
286 if err != nil {
287 return nil, err
288 }
289 number := &NumberLiteral{
290 NumPos: pos,
291 NumEnd: lastToken.End,
292 Literal: lastToken.String,
293 Base: lastToken.Base,
294 }
295 return number, nil
296}
297
298func (p *Parser) parseString(pos Pos) (*StringLiteral, error) {
299 lastToken := p.last()

Callers 13

parseColumnExprMethod · 0.95
parseJSONOptionMethod · 0.95
parseEnumValueExprMethod · 0.95
parseTopClauseMethod · 0.95
parseFrameNumberMethod · 0.95
parseIdentOrFunctionMethod · 0.95
parseSettingsExprMethod · 0.95
parseDecimalMethod · 0.95
parseLiteralMethod · 0.95

Calls 5

lastMethod · 0.95
matchTokenKindMethod · 0.95
expectTokenKindMethod · 0.95
lastTokenKindMethod · 0.95
consumeTokenMethod · 0.80

Tested by

no test coverage detected