Skip to content

Commit 9c40543

Browse files
committed
psql tab completion for ALTER DEFAULT PRIVILEGES and USER MAPPING FOR PUBLIC.
1 parent 1a8957a commit 9c40543

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
@@ -3,7 +3,7 @@
33
*
44
* Copyright (c) 2000-2010, PostgreSQL Global Development Group
55
*
6-
* $PostgreSQL: pgsql/src/bin/psql/tab-complete.c,v 1.197 2010/04/05 05:33:24 itagaki Exp $
6+
* $PostgreSQL: pgsql/src/bin/psql/tab-complete.c,v 1.198 2010/04/07 03:51:19 itagaki Exp $
77
*/
88

99
/*----------------------------------------------------------------------
@@ -700,7 +700,7 @@ psql_completion(char *text, int start, int end)
700700
pg_strcasecmp(prev3_wd, "TABLE") != 0)
701701
{
702702
static const char *const list_ALTER[] =
703-
{"AGGREGATE", "CONVERSION", "DATABASE", "DOMAIN", "FOREIGN DATA WRAPPER", "FUNCTION",
703+
{"AGGREGATE", "CONVERSION", "DATABASE", "DEFAULT PRIVILEGES", "DOMAIN", "FOREIGN DATA WRAPPER", "FUNCTION",
704704
"GROUP", "INDEX", "LANGUAGE", "LARGE OBJECT", "OPERATOR", "ROLE", "SCHEMA", "SERVER", "SEQUENCE", "TABLE",
705705
"TABLESPACE", "TEXT SEARCH", "TRIGGER", "TYPE", "USER", "USER MAPPING FOR", "VIEW", NULL};
706706

@@ -846,6 +846,38 @@ psql_completion(char *text, int start, int end)
846846
{
847847
COMPLETE_WITH_CONST("PASSWORD");
848848
}
849+
/* ALTER DEFAULT PRIVILEGES */
850+
else if (pg_strcasecmp(prev3_wd, "ALTER") == 0 &&
851+
pg_strcasecmp(prev2_wd, "DEFAULT") == 0 &&
852+
pg_strcasecmp(prev_wd, "PRIVILEGES") == 0)
853+
{
854+
static const char *const list_ALTER_DEFAULT_PRIVILEGES[] =
855+
{"FOR ROLE", "FOR USER", "IN SCHEMA", NULL};
856+
857+
COMPLETE_WITH_LIST(list_ALTER_DEFAULT_PRIVILEGES);
858+
}
859+
/* ALTER DEFAULT PRIVILEGES FOR */
860+
else if (pg_strcasecmp(prev4_wd, "ALTER") == 0 &&
861+
pg_strcasecmp(prev3_wd, "DEFAULT") == 0 &&
862+
pg_strcasecmp(prev2_wd, "PRIVILEGES") == 0 &&
863+
pg_strcasecmp(prev_wd, "FOR") == 0)
864+
{
865+
static const char *const list_ALTER_DEFAULT_PRIVILEGES_FOR[] =
866+
{"ROLE", "USER", NULL};
867+
868+
COMPLETE_WITH_LIST(list_ALTER_DEFAULT_PRIVILEGES_FOR);
869+
}
870+
/* ALTER DEFAULT PRIVILEGES { FOR ROLE ... | IN SCHEMA ... } */
871+
else if (pg_strcasecmp(prev5_wd, "DEFAULT") == 0 &&
872+
pg_strcasecmp(prev4_wd, "PRIVILEGES") == 0 &&
873+
(pg_strcasecmp(prev3_wd, "FOR") == 0 ||
874+
pg_strcasecmp(prev3_wd, "IN") == 0))
875+
{
876+
static const char *const list_ALTER_DEFAULT_PRIVILEGES_REST[] =
877+
{"GRANT", "REVOKE", NULL};
878+
879+
COMPLETE_WITH_LIST(list_ALTER_DEFAULT_PRIVILEGES_REST);
880+
}
849881
/* ALTER DOMAIN <name> */
850882
else if (pg_strcasecmp(prev3_wd, "ALTER") == 0 &&
851883
pg_strcasecmp(prev2_wd, "DOMAIN") == 0)
@@ -2336,7 +2368,10 @@ psql_completion(char *text, int start, int end)
23362368
pg_strcasecmp(prev3_wd, "USER") == 0 &&
23372369
pg_strcasecmp(prev2_wd, "MAPPING") == 0 &&
23382370
pg_strcasecmp(prev_wd, "FOR") == 0)
2339-
COMPLETE_WITH_QUERY(Query_for_list_of_roles);
2371+
COMPLETE_WITH_QUERY(Query_for_list_of_roles
2372+
" UNION SELECT 'CURRENT_USER'"
2373+
" UNION SELECT 'PUBLIC'"
2374+
" UNION SELECT 'USER'");
23402375
else if ((pg_strcasecmp(prev4_wd, "ALTER") == 0 ||
23412376
pg_strcasecmp(prev4_wd, "DROP") == 0) &&
23422377
pg_strcasecmp(prev3_wd, "USER") == 0 &&

0 commit comments

Comments
 (0)