parseAlterRoleStatement parses ALTER ROLE statements
(stmt *ast.AlterStatement)
| 146 | |
| 147 | // parseAlterRoleStatement parses ALTER ROLE statements |
| 148 | func (p *Parser) parseAlterRoleStatement(stmt *ast.AlterStatement) (*ast.AlterStatement, error) { |
| 149 | stmt.Name = p.parseIdentAsString() |
| 150 | op := &ast.AlterRoleOperation{} |
| 151 | |
| 152 | switch { |
| 153 | case p.matchType(models.TokenTypeRename): |
| 154 | if !p.matchType(models.TokenTypeTo) { |
| 155 | return nil, p.expectedError("TO") |
| 156 | } |
| 157 | op.Type = ast.RenameRole |
| 158 | op.NewName = p.parseIdentAsString() |
| 159 | |
| 160 | case p.matchType(models.TokenTypeAdd): |
| 161 | if !p.matchType(models.TokenTypeMember) { |
| 162 | return nil, p.expectedError("MEMBER") |
| 163 | } |
| 164 | op.Type = ast.AddMember |
| 165 | op.MemberName = p.parseIdentAsString() |
| 166 | |
| 167 | case p.matchType(models.TokenTypeDrop): |
| 168 | if !p.matchType(models.TokenTypeMember) { |
| 169 | return nil, p.expectedError("MEMBER") |
| 170 | } |
| 171 | op.Type = ast.DropMember |
| 172 | op.MemberName = p.parseIdentAsString() |
| 173 | |
| 174 | case p.matchType(models.TokenTypeSet): |
| 175 | op.Type = ast.SetConfig |
| 176 | op.ConfigName = p.parseIdentAsString() |
| 177 | if p.matchType(models.TokenTypeTo) || p.matchType(models.TokenTypeEq) { |
| 178 | expr, err := p.parseExpression() |
| 179 | if err != nil { |
| 180 | return nil, err |
| 181 | } |
| 182 | op.ConfigValue = expr |
| 183 | } |
| 184 | |
| 185 | case p.matchType(models.TokenTypeReset): |
| 186 | op.Type = ast.ResetConfig |
| 187 | if p.matchType(models.TokenTypeAll) { |
| 188 | op.ConfigName = "ALL" |
| 189 | } else { |
| 190 | op.ConfigName = p.parseIdentAsString() |
| 191 | } |
| 192 | |
| 193 | case p.matchType(models.TokenTypeWith): |
| 194 | op.Type = ast.WithOptions |
| 195 | for { |
| 196 | option, err := p.parseRoleOption() |
| 197 | if err != nil { |
| 198 | return nil, err |
| 199 | } |
| 200 | op.Options = append(op.Options, *option) |
| 201 | if !p.matchType(models.TokenTypeComma) { |
| 202 | break |
| 203 | } |
| 204 | } |
| 205 |
no test coverage detected