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

Method parseGranteesClause

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

Source from the content-addressed store, hash-verified

665}
666
667func (p *Parser) parseGranteesClause(pos Pos) (*GranteesClause, error) {
668 if err := p.expectKeyword(KeywordGrantees); err != nil {
669 return nil, err
670 }
671
672 grantees := &GranteesClause{GranteesPos: pos}
673
674 if p.tryConsumeKeywords(KeywordAny) {
675 grantees.Any = true
676 grantees.GranteesEnd = p.last().End
677 } else if p.tryConsumeKeywords(KeywordNone) {
678 grantees.None = true
679 grantees.GranteesEnd = p.last().End
680 } else {
681 // Parse list of grantees
682 granteeList := make([]*RoleName, 0)
683 grantee, err := p.parseRoleName(p.Pos())
684 if err != nil {
685 return nil, err
686 }
687 granteeList = append(granteeList, grantee)
688
689 for p.tryConsumeTokenKind(TokenKindComma) != nil {
690 grantee, err := p.parseRoleName(p.Pos())
691 if err != nil {
692 return nil, err
693 }
694 granteeList = append(granteeList, grantee)
695 }
696
697 grantees.Grantees = granteeList
698 grantees.GranteesEnd = granteeList[len(granteeList)-1].End()
699 }
700
701 // Check for EXCEPT clause
702 if p.tryConsumeKeywords(KeywordExcept) {
703 exceptList := make([]*RoleName, 0)
704 except, err := p.parseRoleName(p.Pos())
705 if err != nil {
706 return nil, err
707 }
708 exceptList = append(exceptList, except)
709
710 for p.tryConsumeTokenKind(TokenKindComma) != nil {
711 except, err := p.parseRoleName(p.Pos())
712 if err != nil {
713 return nil, err
714 }
715 exceptList = append(exceptList, except)
716 }
717
718 grantees.ExceptUsers = exceptList
719 grantees.GranteesEnd = exceptList[len(exceptList)-1].End()
720 }
721
722 return grantees, nil
723}
724

Callers 1

parseOptionalClausesMethod · 0.95

Calls 7

expectKeywordMethod · 0.95
tryConsumeKeywordsMethod · 0.95
lastMethod · 0.95
parseRoleNameMethod · 0.95
PosMethod · 0.95
tryConsumeTokenKindMethod · 0.95
EndMethod · 0.65

Tested by

no test coverage detected