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

Method parseEngineExpr

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

Source from the content-addressed store, hash-verified

1336}
1337
1338func (p *Parser) parseEngineExpr(pos Pos) (*EngineExpr, error) {
1339 if err := p.expectKeyword(KeywordEngine); err != nil {
1340 return nil, err
1341 }
1342 _ = p.tryConsumeTokenKind(TokenKindSingleEQ)
1343
1344 engineExpr := &EngineExpr{EnginePos: pos}
1345 var engineEnd Pos
1346 switch {
1347 case p.matchTokenKind(TokenKindIdent):
1348 ident, err := p.parseIdent()
1349 if err != nil {
1350 return nil, err
1351 }
1352 engineExpr.Name = ident.Name
1353 engineEnd = ident.End()
1354 if p.matchTokenKind(TokenKindLParen) {
1355 params, err := p.parseFunctionParams(p.Pos())
1356 if err != nil {
1357 return nil, err
1358 }
1359 engineExpr.Params = params
1360 engineExpr.EngineEnd = params.End()
1361 }
1362 default:
1363 return nil, fmt.Errorf("unexpected token: %s", p.lastTokenKind())
1364 }
1365
1366 for !p.lexer.isEOF() {
1367 switch {
1368 case p.matchKeyword(KeywordOrder):
1369 orderBy, err := p.tryParseOrderByClause(p.Pos())
1370 if err != nil {
1371 return nil, err
1372 }
1373 engineExpr.OrderBy = orderBy
1374 engineEnd = orderBy.End()
1375 case p.matchKeyword(KeywordPartition):
1376 partitionBy, err := p.tryParsePartitionByClause(p.Pos())
1377 if err != nil {
1378 return nil, err
1379 }
1380 engineExpr.PartitionBy = partitionBy
1381 engineEnd = partitionBy.End()
1382 case p.matchKeyword(KeywordPrimary):
1383 primaryKey, err := p.tryParsePrimaryKeyClause(p.Pos())
1384 if err != nil {
1385 return nil, err
1386 }
1387 engineExpr.PrimaryKey = primaryKey
1388 engineEnd = primaryKey.End()
1389 case p.matchKeyword(KeywordSample):
1390 sampleBy, err := p.tryParseSampleByClause(p.Pos())
1391 if err != nil {
1392 return nil, err
1393 }
1394 engineExpr.SampleBy = sampleBy
1395 engineEnd = sampleBy.End()

Callers 2

tryParseEngineExprMethod · 0.95

Calls 15

expectKeywordMethod · 0.95
tryConsumeTokenKindMethod · 0.95
matchTokenKindMethod · 0.95
parseIdentMethod · 0.95
parseFunctionParamsMethod · 0.95
PosMethod · 0.95
lastTokenKindMethod · 0.95
matchKeywordMethod · 0.95
tryParseOrderByClauseMethod · 0.95

Tested by

no test coverage detected