Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit95c63b5

Browse files
committed
psql: Add support for tab completion of GRANT/REVOKE role
Previously, only GRANT/REVOKE privilege was supported.reviewed by Pavel Stehule
1 parentc145349 commit95c63b5

File tree

1 file changed

+53
-10
lines changed

1 file changed

+53
-10
lines changed

‎src/bin/psql/tab-complete.c

Lines changed: 53 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2209,21 +2209,52 @@ psql_completion(char *text, int start, int end)
22092209
COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_foreign_tables,NULL);
22102210

22112211
/* GRANT && REVOKE */
2212-
/* Complete GRANT/REVOKE with a list of privileges */
2212+
/* Complete GRANT/REVOKE with a list ofroles andprivileges */
22132213
elseif (pg_strcasecmp(prev_wd,"GRANT")==0||
22142214
pg_strcasecmp(prev_wd,"REVOKE")==0)
22152215
{
2216-
staticconstchar*constlist_privilege[]=
2217-
{"SELECT","INSERT","UPDATE","DELETE","TRUNCATE","REFERENCES",
2218-
"TRIGGER","CREATE","CONNECT","TEMPORARY","EXECUTE","USAGE",
2219-
"ALL",NULL};
2220-
2221-
COMPLETE_WITH_LIST(list_privilege);
2222-
}
2223-
/* Complete GRANT/REVOKE <sth> with "ON" */
2216+
COMPLETE_WITH_QUERY(Query_for_list_of_roles
2217+
" UNION SELECT 'SELECT'"
2218+
" UNION SELECT 'INSERT'"
2219+
" UNION SELECT 'UPDATE'"
2220+
" UNION SELECT 'DELETE'"
2221+
" UNION SELECT 'TRUNCATE'"
2222+
" UNION SELECT 'REFERENCES'"
2223+
" UNION SELECT 'TRIGGER'"
2224+
" UNION SELECT 'CREATE'"
2225+
" UNION SELECT 'CONNECT'"
2226+
" UNION SELECT 'TEMPORARY'"
2227+
" UNION SELECT 'EXECUTE'"
2228+
" UNION SELECT 'USAGE'"
2229+
" UNION SELECT 'ALL'");
2230+
}
2231+
/* Complete GRANT/REVOKE <privilege> with "ON", GRANT/REVOKE <role> with TO/FROM */
22242232
elseif (pg_strcasecmp(prev2_wd,"GRANT")==0||
22252233
pg_strcasecmp(prev2_wd,"REVOKE")==0)
2226-
COMPLETE_WITH_CONST("ON");
2234+
{
2235+
if (pg_strcasecmp(prev_wd,"SELECT")==0
2236+
||pg_strcasecmp(prev_wd,"INSERT")==0
2237+
||pg_strcasecmp(prev_wd,"UPDATE")==0
2238+
||pg_strcasecmp(prev_wd,"DELETE")==0
2239+
||pg_strcasecmp(prev_wd,"TRUNCATE")==0
2240+
||pg_strcasecmp(prev_wd,"REFERENCES")==0
2241+
||pg_strcasecmp(prev_wd,"TRIGGER")==0
2242+
||pg_strcasecmp(prev_wd,"CREATE")==0
2243+
||pg_strcasecmp(prev_wd,"CONNECT")==0
2244+
||pg_strcasecmp(prev_wd,"TEMPORARY")==0
2245+
||pg_strcasecmp(prev_wd,"TEMP")==0
2246+
||pg_strcasecmp(prev_wd,"EXECUTE")==0
2247+
||pg_strcasecmp(prev_wd,"USAGE")==0
2248+
||pg_strcasecmp(prev_wd,"ALL")==0)
2249+
COMPLETE_WITH_CONST("ON");
2250+
else
2251+
{
2252+
if (pg_strcasecmp(prev2_wd,"GRANT")==0)
2253+
COMPLETE_WITH_CONST("TO");
2254+
else
2255+
COMPLETE_WITH_CONST("FROM");
2256+
}
2257+
}
22272258

22282259
/*
22292260
* Complete GRANT/REVOKE <sth> ON with a list of tables, views, sequences,
@@ -2304,6 +2335,18 @@ psql_completion(char *text, int start, int end)
23042335
COMPLETE_WITH_CONST("FROM");
23052336
}
23062337

2338+
/* Complete "GRANT/REVOKE * TO/FROM" with username, GROUP, or PUBLIC */
2339+
elseif (pg_strcasecmp(prev3_wd,"GRANT")==0&&
2340+
pg_strcasecmp(prev_wd,"TO")==0)
2341+
{
2342+
COMPLETE_WITH_QUERY(Query_for_list_of_grant_roles);
2343+
}
2344+
elseif (pg_strcasecmp(prev3_wd,"REVOKE")==0&&
2345+
pg_strcasecmp(prev_wd,"FROM")==0)
2346+
{
2347+
COMPLETE_WITH_QUERY(Query_for_list_of_grant_roles);
2348+
}
2349+
23072350
/* GROUP BY */
23082351
elseif (pg_strcasecmp(prev3_wd,"FROM")==0&&
23092352
pg_strcasecmp(prev_wd,"GROUP")==0)

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp