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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy