parseAlterPolicyStatement parses ALTER POLICY statements
(stmt *ast.AlterStatement)
| 213 | |
| 214 | // parseAlterPolicyStatement parses ALTER POLICY statements |
| 215 | func (p *Parser) parseAlterPolicyStatement(stmt *ast.AlterStatement) (*ast.AlterStatement, error) { |
| 216 | stmt.Name = p.parseIdentAsString() |
| 217 | if !p.matchType(models.TokenTypeOn) { |
| 218 | return nil, p.expectedError("ON") |
| 219 | } |
| 220 | p.parseIdentAsString() // table name |
| 221 | |
| 222 | op := &ast.AlterPolicyOperation{} |
| 223 | |
| 224 | if p.matchType(models.TokenTypeRename) { |
| 225 | if !p.matchType(models.TokenTypeTo) { |
| 226 | return nil, p.expectedError("TO") |
| 227 | } |
| 228 | op.Type = ast.RenamePolicy |
| 229 | op.NewName = p.parseIdentAsString() |
| 230 | } else { |
| 231 | op.Type = ast.ModifyPolicy |
| 232 | if p.matchType(models.TokenTypeTo) { |
| 233 | for { |
| 234 | op.To = append(op.To, p.parseIdentAsString()) |
| 235 | if !p.matchType(models.TokenTypeComma) { |
| 236 | break |
| 237 | } |
| 238 | } |
| 239 | } |
| 240 | if p.matchType(models.TokenTypeUsing) { |
| 241 | if !p.matchType(models.TokenTypeLParen) { |
| 242 | return nil, p.expectedError("(") |
| 243 | } |
| 244 | expr, err := p.parseExpression() |
| 245 | if err != nil { |
| 246 | return nil, err |
| 247 | } |
| 248 | op.Using = expr |
| 249 | if !p.matchType(models.TokenTypeRParen) { |
| 250 | return nil, p.expectedError(")") |
| 251 | } |
| 252 | } |
| 253 | if p.matchType(models.TokenTypeWith) && p.matchType(models.TokenTypeCheck) { |
| 254 | if !p.matchType(models.TokenTypeLParen) { |
| 255 | return nil, p.expectedError("(") |
| 256 | } |
| 257 | expr, err := p.parseExpression() |
| 258 | if err != nil { |
| 259 | return nil, err |
| 260 | } |
| 261 | op.WithCheck = expr |
| 262 | if !p.matchType(models.TokenTypeRParen) { |
| 263 | return nil, p.expectedError(")") |
| 264 | } |
| 265 | } |
| 266 | } |
| 267 | |
| 268 | stmt.Operation = op |
| 269 | return stmt, nil |
| 270 | } |
| 271 | |
| 272 | // parseAlterConnectorStatement parses ALTER CONNECTOR statements |
no test coverage detected