MCPcopy Create free account
hub / github.com/AfterShip/clickhouse-sql-parser / parseRoleSetting

Method parseRoleSetting

parser/parse_system.go:406–454  ·  view source on GitHub ↗
(_ Pos)

Source from the content-addressed store, hash-verified

404}
405
406func (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
456func (p *Parser) parseRoleSettings(_ Pos) ([]*RoleSetting, error) {
457 settings := make([]*RoleSetting, 0)

Callers 1

parseRoleSettingsMethod · 0.95

Calls 5

matchTokenKindMethod · 0.95
parseIdentMethod · 0.95
tryConsumeTokenKindMethod · 0.95
parseLiteralMethod · 0.95
PosMethod · 0.95

Tested by

no test coverage detected