(_ Pos)
| 404 | } |
| 405 | |
| 406 | func (p *Parser) parseRoleSetting(_ Pos) (*RoleSetting, error) { |
| 407 | pairs := make([]*SettingPair, 0) |
| 408 | for p.matchTokenKind(TokenKindIdent) { |
| 409 | name, err := p.parseIdent() |
| 410 | if err != nil { |
| 411 | return nil, err |
| 412 | } |
| 413 | switch name.Name { |
| 414 | case "NONE", "READABLE", "WRITABLE", "CONST", "CHANGEABLE_IN_READONLY": |
| 415 | return &RoleSetting{ |
| 416 | Modifier: name, |
| 417 | SettingPairs: pairs, |
| 418 | }, nil |
| 419 | } |
| 420 | switch { |
| 421 | case p.matchTokenKind(TokenKindSingleEQ), |
| 422 | p.matchTokenKind(TokenKindInt), |
| 423 | p.matchTokenKind(TokenKindFloat), |
| 424 | p.matchTokenKind(TokenKindString): |
| 425 | var op TokenKind |
| 426 | if token := p.tryConsumeTokenKind(TokenKindSingleEQ); token != nil { |
| 427 | op = token.Kind |
| 428 | } |
| 429 | value, err := p.parseLiteral(p.Pos()) |
| 430 | if err != nil { |
| 431 | return nil, err |
| 432 | } |
| 433 | // docs: https://clickhouse.com/docs/en/sql-reference/statements/alter/role |
| 434 | // the operator "=" was required if the variable name is NOT in |
| 435 | // ["MIN", "MAX", "PROFILE"] and value is existed. |
| 436 | if value != nil && name.Name != "MIN" && name.Name != "MAX" && name.Name != "PROFILE" && op != TokenKindSingleEQ { |
| 437 | return nil, fmt.Errorf("expected operator = or no value, but got %s", op) |
| 438 | } |
| 439 | pairs = append(pairs, &SettingPair{ |
| 440 | Name: name, |
| 441 | Operation: op, |
| 442 | Value: value, |
| 443 | }) |
| 444 | default: |
| 445 | pairs = append(pairs, &SettingPair{ |
| 446 | Name: name, |
| 447 | }) |
| 448 | } |
| 449 | |
| 450 | } |
| 451 | return &RoleSetting{ |
| 452 | SettingPairs: pairs, |
| 453 | }, nil |
| 454 | } |
| 455 | |
| 456 | func (p *Parser) parseRoleSettings(_ Pos) ([]*RoleSetting, error) { |
| 457 | settings := make([]*RoleSetting, 0) |
no test coverage detected