(pos Pos)
| 637 | } |
| 638 | |
| 639 | func (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 |
no test coverage detected