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

Method parseAlterTableModify

parser/parser_alter.go:639–697  ·  view source on GitHub ↗
(pos Pos)

Source from the content-addressed store, hash-verified

637}
638
639func (p *Parser) parseAlterTableModify(pos Pos) (AlterTableClause, error) {
640 if err := p.expectKeyword(KeywordModify); err != nil {
641 return nil, err
642 }
643
644 switch {
645 case p.matchKeyword(KeywordColumn):
646 return p.parseAlterTableModifyColumn(pos)
647 case p.matchKeyword(KeywordTtl):
648 ttlPos := p.Pos()
649 _ = p.lexer.consumeToken()
650 items, err := p.parseTTLClause(ttlPos, true)
651 if err != nil {
652 return nil, err
653 }
654 listEnd := ttlPos
655 if len(items) > 0 {
656 listEnd = items[len(items)-1].End()
657 }
658 ttlClause := &TTLClause{
659 TTLPos: ttlPos,
660 ListEnd: listEnd,
661 Items: items,
662 }
663 return &AlterTableModifyTTL{
664 ModifyPos: pos,
665 StatementEnd: ttlClause.End(),
666 TTL: ttlClause,
667 }, nil
668 case p.matchKeyword(KeywordQuery):
669 _ = p.lexer.consumeToken()
670 selectQuery, err := p.parseSelectQuery(pos)
671 if err != nil {
672 return nil, err
673 }
674 return &AlterTableModifyQuery{
675 ModifyPos: pos,
676 StatementEnd: selectQuery.End(),
677 SelectExpr: selectQuery,
678 }, nil
679 case p.matchKeyword(KeywordSetting):
680 _ = p.lexer.consumeToken() // consume "SETTING"
681 settings, err := p.parseSettingsList(p.Pos())
682 if err != nil {
683 return nil, err
684 }
685 // settings must not be empty
686 statementEnd := settings[len(settings)-1].End()
687 return &AlterTableModifySetting{
688 ModifyPos: pos,
689 StatementEnd: statementEnd,
690 Settings: settings,
691 }, nil
692 default:
693 return nil, fmt.Errorf("expected keyword: COLUMN|TTL|QUERY|SETTING, but got %q",
694 p.last().String)
695 }
696

Callers 1

parseAlterTableMethod · 0.95

Calls 11

expectKeywordMethod · 0.95
matchKeywordMethod · 0.95
PosMethod · 0.95
parseTTLClauseMethod · 0.95
EndMethod · 0.95
parseSelectQueryMethod · 0.95
parseSettingsListMethod · 0.95
lastMethod · 0.95
consumeTokenMethod · 0.80
EndMethod · 0.65

Tested by

no test coverage detected