Syntax: ALTER TABLE CLEAR COLUMN|INDEX|PROJECTION (IF EXISTS)? nestedIdentifier (IN partitionClause)?
(pos Pos)
| 537 | |
| 538 | // Syntax: ALTER TABLE CLEAR COLUMN|INDEX|PROJECTION (IF EXISTS)? nestedIdentifier (IN partitionClause)? |
| 539 | func (p *Parser) parseAlterTableClearClause(pos Pos) (AlterTableClause, error) { |
| 540 | var kind string |
| 541 | switch { |
| 542 | case p.matchKeyword(KeywordColumn): |
| 543 | kind = KeywordColumn |
| 544 | case p.matchKeyword(KeywordIndex): |
| 545 | kind = KeywordIndex |
| 546 | case p.matchKeyword(KeywordProjection): |
| 547 | kind = KeywordProjection |
| 548 | default: |
| 549 | return nil, fmt.Errorf("expected keyword: COLUMN|INDEX|PROJECTION, but got %q", p.lastTokenKind()) |
| 550 | } |
| 551 | _ = p.lexer.consumeToken() |
| 552 | |
| 553 | ifExists, err := p.tryParseIfExists() |
| 554 | if err != nil { |
| 555 | return nil, err |
| 556 | } |
| 557 | |
| 558 | name, err := p.ParseNestedIdentifier(p.Pos()) |
| 559 | if err != nil { |
| 560 | return nil, err |
| 561 | } |
| 562 | statementEnd := name.End() |
| 563 | |
| 564 | var partition *PartitionClause |
| 565 | if p.tryConsumeKeywords(KeywordIn) { |
| 566 | partition, err = p.tryParsePartitionClause(p.Pos()) |
| 567 | if err != nil { |
| 568 | return nil, err |
| 569 | } |
| 570 | if partition != nil { |
| 571 | statementEnd = partition.End() |
| 572 | } |
| 573 | } |
| 574 | |
| 575 | if kind == KeywordProjection { |
| 576 | return &AlterTableClearProjection{ |
| 577 | ClearPos: pos, |
| 578 | StatementEnd: statementEnd, |
| 579 | IfExists: ifExists, |
| 580 | ProjectionName: name, |
| 581 | PartitionExpr: partition, |
| 582 | }, nil |
| 583 | } else if kind == KeywordColumn { |
| 584 | return &AlterTableClearColumn{ |
| 585 | ClearPos: pos, |
| 586 | StatementEnd: statementEnd, |
| 587 | IfExists: ifExists, |
| 588 | ColumnName: name, |
| 589 | PartitionExpr: partition, |
| 590 | }, nil |
| 591 | } else { |
| 592 | return &AlterTableClearIndex{ |
| 593 | ClearPos: pos, |
| 594 | StatementEnd: statementEnd, |
| 595 | IfExists: ifExists, |
| 596 | IndexName: name, |
no test coverage detected