Syntax: ALTER TABLE UPDATE column1 = expr1 [, column2 = expr2, ...] [IN PARTITION partition_id] WHERE condition
(pos Pos)
| 884 | |
| 885 | // Syntax: ALTER TABLE UPDATE column1 = expr1 [, column2 = expr2, ...] [IN PARTITION partition_id] WHERE condition |
| 886 | func (p *Parser) parseAlterTableUpdate(pos Pos) (AlterTableClause, error) { |
| 887 | if err := p.expectKeyword(KeywordUpdate); err != nil { |
| 888 | return nil, err |
| 889 | } |
| 890 | |
| 891 | // Parse at least one assignment |
| 892 | assignments := make([]*UpdateAssignment, 0) |
| 893 | assignment, err := p.parseUpdateAssignment(p.Pos()) |
| 894 | if err != nil { |
| 895 | return nil, err |
| 896 | } |
| 897 | assignments = append(assignments, assignment) |
| 898 | |
| 899 | // Parse additional comma-separated assignments |
| 900 | for p.tryConsumeTokenKind(TokenKindComma) != nil { |
| 901 | assignment, err = p.parseUpdateAssignment(p.Pos()) |
| 902 | if err != nil { |
| 903 | return nil, err |
| 904 | } |
| 905 | assignments = append(assignments, assignment) |
| 906 | } |
| 907 | |
| 908 | var inPartition *PartitionClause |
| 909 | if p.tryConsumeKeywords(KeywordIn) { |
| 910 | inPartition, err = p.parsePartitionClause(p.Pos()) |
| 911 | if err != nil { |
| 912 | return nil, err |
| 913 | } |
| 914 | } |
| 915 | if err := p.expectKeyword(KeywordWhere); err != nil { |
| 916 | return nil, err |
| 917 | } |
| 918 | |
| 919 | whereExpr, err := p.parseExpr(p.Pos()) |
| 920 | if err != nil { |
| 921 | return nil, err |
| 922 | } |
| 923 | |
| 924 | return &AlterTableUpdate{ |
| 925 | UpdatePos: pos, |
| 926 | StatementEnd: whereExpr.End(), |
| 927 | Assignments: assignments, |
| 928 | InPartition: inPartition, |
| 929 | WhereClause: whereExpr, |
| 930 | }, nil |
| 931 | } |
| 932 | |
| 933 | // Parse column = expression assignment |
| 934 | func (p *Parser) parseUpdateAssignment(pos Pos) (*UpdateAssignment, error) { |
no test coverage detected