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

Method parseCreateRole

parser/parse_system.go:471–537  ·  view source on GitHub ↗
(pos Pos)

Source from the content-addressed store, hash-verified

469}
470
471func (p *Parser) parseCreateRole(pos Pos) (*CreateRole, error) {
472 if err := p.expectKeyword(KeywordRole); err != nil {
473 return nil, err
474 }
475
476 ifNotExists := false
477 orReplace := false
478 switch {
479 case p.matchKeyword(KeywordIf):
480 _ = p.lexer.consumeToken()
481 if err := p.expectKeyword(KeywordNot); err != nil {
482 return nil, err
483 }
484 if err := p.expectKeyword(KeywordExists); err != nil {
485 return nil, err
486 }
487 ifNotExists = true
488 case p.matchKeyword(KeywordOr):
489 _ = p.lexer.consumeToken()
490 if err := p.expectKeyword(KeywordReplace); err != nil {
491 return nil, err
492 }
493 orReplace = true
494 }
495
496 roleNames := make([]*RoleName, 0)
497 roleName, err := p.parseRoleName(p.Pos())
498 if err != nil {
499 return nil, err
500 }
501 roleNames = append(roleNames, roleName)
502 for p.tryConsumeTokenKind(TokenKindComma) != nil {
503 roleName, err := p.parseRoleName(p.Pos())
504 if err != nil {
505 return nil, err
506 }
507 roleNames = append(roleNames, roleName)
508 }
509 statementEnd := roleNames[len(roleNames)-1].End()
510
511 var accessStorageType *Ident
512 if p.tryConsumeKeywords(KeywordIn) {
513 accessStorageType, err = p.parseIdent()
514 if err != nil {
515 return nil, err
516 }
517 statementEnd = accessStorageType.NameEnd
518 }
519
520 settings, err := p.tryParseRoleSettings(p.Pos())
521 if err != nil {
522 return nil, err
523 }
524 if settings != nil {
525 statementEnd = settings[len(settings)-1].End()
526 }
527
528 return &CreateRole{

Callers 1

parseDDLMethod · 0.95

Calls 10

expectKeywordMethod · 0.95
matchKeywordMethod · 0.95
parseRoleNameMethod · 0.95
PosMethod · 0.95
tryConsumeTokenKindMethod · 0.95
tryConsumeKeywordsMethod · 0.95
parseIdentMethod · 0.95
tryParseRoleSettingsMethod · 0.95
consumeTokenMethod · 0.80
EndMethod · 0.65

Tested by

no test coverage detected