parseTruncateStatement parses TRUNCATE TABLE statement Syntax: TRUNCATE [TABLE] table_name [, table_name ...] [RESTART IDENTITY | CONTINUE IDENTITY] [CASCADE | RESTRICT]
()
| 676 | // parseTruncateStatement parses TRUNCATE TABLE statement |
| 677 | // Syntax: TRUNCATE [TABLE] table_name [, table_name ...] [RESTART IDENTITY | CONTINUE IDENTITY] [CASCADE | RESTRICT] |
| 678 | func (p *Parser) parseTruncateStatement() (*ast.TruncateStatement, error) { |
| 679 | stmt := &ast.TruncateStatement{} |
| 680 | |
| 681 | // Optional TABLE keyword |
| 682 | if p.isType(models.TokenTypeTable) { |
| 683 | p.advance() // Consume TABLE |
| 684 | } |
| 685 | |
| 686 | // Parse table names (can be comma-separated, supports schema.table qualification) |
| 687 | for { |
| 688 | truncTableName, err := p.parseQualifiedName() |
| 689 | if err != nil { |
| 690 | return nil, p.expectedError("table name") |
| 691 | } |
| 692 | stmt.Tables = append(stmt.Tables, truncTableName) |
| 693 | |
| 694 | if p.isType(models.TokenTypeComma) { |
| 695 | p.advance() // Consume comma |
| 696 | continue |
| 697 | } |
| 698 | break |
| 699 | } |
| 700 | |
| 701 | // Parse optional RESTART IDENTITY / CONTINUE IDENTITY |
| 702 | if p.isTokenMatch("RESTART") { |
| 703 | p.advance() // Consume RESTART |
| 704 | if !p.isTokenMatch("IDENTITY") { |
| 705 | return nil, p.expectedError("IDENTITY after RESTART") |
| 706 | } |
| 707 | p.advance() // Consume IDENTITY |
| 708 | stmt.RestartIdentity = true |
| 709 | } else if p.isTokenMatch("CONTINUE") { |
| 710 | p.advance() // Consume CONTINUE |
| 711 | if !p.isTokenMatch("IDENTITY") { |
| 712 | return nil, p.expectedError("IDENTITY after CONTINUE") |
| 713 | } |
| 714 | p.advance() // Consume IDENTITY |
| 715 | stmt.ContinueIdentity = true |
| 716 | } |
| 717 | |
| 718 | // Parse optional CASCADE/RESTRICT |
| 719 | if p.isType(models.TokenTypeCascade) { |
| 720 | stmt.CascadeType = "CASCADE" |
| 721 | p.advance() |
| 722 | } else if p.isType(models.TokenTypeRestrict) { |
| 723 | stmt.CascadeType = "RESTRICT" |
| 724 | p.advance() |
| 725 | } |
| 726 | |
| 727 | return stmt, nil |
| 728 | } |
| 729 | |
| 730 | // skipClickHouseClauseExpr consumes the expression following a ClickHouse |
| 731 | // CREATE TABLE trailing clause (ORDER BY, PARTITION BY, PRIMARY KEY, SAMPLE BY). |
no test coverage detected