Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 1fd832d

Browse files
committed
psql: Add tab completion for CREATE/ALTER ROLE name WITH
Previously, the use of the optional key word WITH was not supported. Josh Kupershmidt
1 parent 1b37a8c commit 1fd832d

File tree

1 file changed

+38
-3
lines changed

1 file changed

+38
-3
lines changed

src/bin/psql/tab-complete.c

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1024,11 +1024,28 @@ psql_completion(char *text, int start, int end)
10241024
"ENCRYPTED", "INHERIT", "LOGIN", "NOCREATEDB", "NOCREATEROLE",
10251025
"NOCREATEUSER", "NOINHERIT", "NOLOGIN", "NOREPLICATION",
10261026
"NOSUPERUSER", "RENAME TO", "REPLICATION", "RESET", "SET",
1027-
"SUPERUSER", "UNENCRYPTED", "VALID UNTIL", NULL};
1027+
"SUPERUSER", "UNENCRYPTED", "VALID UNTIL", "WITH", NULL};
10281028

10291029
COMPLETE_WITH_LIST(list_ALTERUSER);
10301030
}
10311031

1032+
/* ALTER USER,ROLE <name> WITH */
1033+
else if ((pg_strcasecmp(prev4_wd, "ALTER") == 0 &&
1034+
(pg_strcasecmp(prev3_wd, "USER") == 0 ||
1035+
pg_strcasecmp(prev3_wd, "ROLE") == 0) &&
1036+
pg_strcasecmp(prev_wd, "WITH") == 0))
1037+
{
1038+
/* Similar to the above, but don't complete "WITH" again. */
1039+
static const char *const list_ALTERUSER_WITH[] =
1040+
{"CONNECTION LIMIT", "CREATEDB", "CREATEROLE", "CREATEUSER",
1041+
"ENCRYPTED", "INHERIT", "LOGIN", "NOCREATEDB", "NOCREATEROLE",
1042+
"NOCREATEUSER", "NOINHERIT", "NOLOGIN", "NOREPLICATION",
1043+
"NOSUPERUSER", "RENAME TO", "REPLICATION", "RESET", "SET",
1044+
"SUPERUSER", "UNENCRYPTED", "VALID UNTIL", NULL};
1045+
1046+
COMPLETE_WITH_LIST(list_ALTERUSER_WITH);
1047+
}
1048+
10321049
/* complete ALTER USER,ROLE <name> ENCRYPTED,UNENCRYPTED with PASSWORD */
10331050
else if (pg_strcasecmp(prev4_wd, "ALTER") == 0 &&
10341051
(pg_strcasecmp(prev3_wd, "ROLE") == 0 || pg_strcasecmp(prev3_wd, "USER") == 0) &&
@@ -1947,7 +1964,7 @@ psql_completion(char *text, int start, int end)
19471964
prev2_wd[0] != '\0')
19481965
COMPLETE_WITH_CONST("PROCEDURE");
19491966

1950-
/* CREATE ROLE,USER,GROUP */
1967+
/* CREATE ROLE,USER,GROUP <name> */
19511968
else if (pg_strcasecmp(prev3_wd, "CREATE") == 0 &&
19521969
!(pg_strcasecmp(prev2_wd, "USER") == 0 && pg_strcasecmp(prev_wd, "MAPPING") == 0) &&
19531970
(pg_strcasecmp(prev2_wd, "ROLE") == 0 ||
@@ -1958,11 +1975,29 @@ psql_completion(char *text, int start, int end)
19581975
"ENCRYPTED", "IN", "INHERIT", "LOGIN", "NOCREATEDB",
19591976
"NOCREATEROLE", "NOCREATEUSER", "NOINHERIT", "NOLOGIN",
19601977
"NOREPLICATION", "NOSUPERUSER", "REPLICATION", "ROLE",
1961-
"SUPERUSER", "SYSID", "UNENCRYPTED", "VALID UNTIL", NULL};
1978+
"SUPERUSER", "SYSID", "UNENCRYPTED", "VALID UNTIL", "WITH", NULL};
19621979

19631980
COMPLETE_WITH_LIST(list_CREATEROLE);
19641981
}
19651982

1983+
/* CREATE ROLE,USER,GROUP <name> WITH */
1984+
else if ((pg_strcasecmp(prev4_wd, "CREATE") == 0 &&
1985+
(pg_strcasecmp(prev3_wd, "ROLE") == 0 ||
1986+
pg_strcasecmp(prev3_wd, "GROUP") == 0 ||
1987+
pg_strcasecmp(prev3_wd, "USER") == 0) &&
1988+
pg_strcasecmp(prev_wd, "WITH") == 0))
1989+
{
1990+
/* Similar to the above, but don't complete "WITH" again. */
1991+
static const char *const list_CREATEROLE_WITH[] =
1992+
{"ADMIN", "CONNECTION LIMIT", "CREATEDB", "CREATEROLE", "CREATEUSER",
1993+
"ENCRYPTED", "IN", "INHERIT", "LOGIN", "NOCREATEDB",
1994+
"NOCREATEROLE", "NOCREATEUSER", "NOINHERIT", "NOLOGIN",
1995+
"NOREPLICATION", "NOSUPERUSER", "REPLICATION", "ROLE",
1996+
"SUPERUSER", "SYSID", "UNENCRYPTED", "VALID UNTIL", NULL};
1997+
1998+
COMPLETE_WITH_LIST(list_CREATEROLE_WITH);
1999+
}
2000+
19662001
/*
19672002
* complete CREATE ROLE,USER,GROUP <name> ENCRYPTED,UNENCRYPTED with
19682003
* PASSWORD

0 commit comments

Comments
 (0)