Skip to content

Commit fabedf3

Browse files
committed
Fix autocompletion for role names/user names
patch by Francisco Guerrero; reviewed by TBD for CASSANDRA-20175
1 parent 8fcbe3f commit fabedf3

File tree

2 files changed

+6
-15
lines changed

2 files changed

+6
-15
lines changed

pylib/cqlshlib/cql3handling.py

+5-14
Original file line numberDiff line numberDiff line change
@@ -1500,9 +1500,9 @@ def alter_type_field_completer(ctxt, cass):
15001500
'''
15011501

15021502
syntax_rules += r'''
1503-
<rolename> ::= <identifier>
1503+
<rolename> ::= role=( <identifier>
15041504
| <quotedName>
1505-
| <unreservedKeyword>
1505+
| <unreservedKeyword> )
15061506
;
15071507
15081508
<createRoleStatement> ::= "CREATE" "ROLE" ("IF" "NOT" "EXISTS")? <rolename>
@@ -1611,32 +1611,23 @@ def permission_completer(ctxt, _):
16111611

16121612
@completer_for('username', 'name')
16131613
def username_name_completer(ctxt, cass):
1614-
def maybe_quote(name):
1615-
if CqlRuleSet.is_valid_cql3_name(name):
1616-
return name
1617-
return "'%s'" % name
1618-
16191614
# disable completion for CREATE USER.
16201615
if ctxt.matched[0][1].upper() == 'CREATE':
16211616
return [Hint('<username>')]
16221617

16231618
session = cass.session
1624-
return [maybe_quote(list(row.values())[0].replace("'", "''")) for row in session.execute("LIST USERS")]
1619+
return map(maybe_escape_name, [row['name'] for row in session.execute("LIST USERS")])
1620+
16251621

16261622

16271623
@completer_for('rolename', 'role')
16281624
def rolename_completer(ctxt, cass):
1629-
def maybe_quote(name):
1630-
if CqlRuleSet.is_valid_cql3_name(name):
1631-
return name
1632-
return "'%s'" % name
1633-
16341625
# disable completion for CREATE ROLE.
16351626
if ctxt.matched[0][1].upper() == 'CREATE':
16361627
return [Hint('<rolename>')]
16371628

16381629
session = cass.session
1639-
return [maybe_quote(row[0].replace("'", "''")) for row in session.execute("LIST ROLES")]
1630+
return map(maybe_escape_name, [row['role'] for row in session.execute("LIST ROLES")])
16401631

16411632

16421633
syntax_rules += r'''

pylib/cqlshlib/test/test_cqlsh_completion.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1033,7 +1033,7 @@ def test_complete_in_alter_user(self):
10331033
self.trycompletions('ALTER USER ', choices=['<identifier>', 'IF', '<pgStringLiteral>', '<quotedStringLiteral>'])
10341034

10351035
def test_complete_in_create_role(self):
1036-
self.trycompletions('CREATE ROLE ', choices=['<identifier>', 'IF', '<quotedName>'])
1036+
self.trycompletions('CREATE ROLE ', choices=['<rolename>', 'IF'])
10371037
self.trycompletions('CREATE ROLE IF ', immediate='NOT EXISTS ')
10381038
self.trycompletions('CREATE ROLE foo WITH ', choices=['ACCESS', 'HASHED', 'LOGIN', 'OPTIONS', 'PASSWORD', 'SUPERUSER', 'GENERATED'])
10391039
self.trycompletions('CREATE ROLE foo WITH HASHED ', immediate='PASSWORD = ')

0 commit comments

Comments
 (0)