From ed2bf9a43c906edd291ae8808da8530b9411e5bb Mon Sep 17 00:00:00 2001
From: Kyotaro Horiguchi <horiguchi.kyotaro@lab.ntt.co.jp>
Date: Wed, 14 Dec 2016 16:06:28 +0900
Subject: [PATCH 15/17] Add CURRENT_USER to some completions of role

This is not a part of refactoring, but some completions for role
misses usable keywords such like CURRENT_USER. This patch adds it.
---
 src/bin/psql/tab-complete.c | 28 +++++++++++++++++-----------
 1 file changed, 17 insertions(+), 11 deletions(-)

diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c
index 2d22825..71bfcc9 100644
--- a/src/bin/psql/tab-complete.c
+++ b/src/bin/psql/tab-complete.c
@@ -1142,7 +1142,8 @@ psql_completion_internal(const char *text, char **previous_words,
 		COMPLETE_WITH_LIST2("SET TABLESPACE", "OWNED BY");
 	/* ALTER TABLE,INDEX,MATERIALIZED VIEW ALL IN TABLESPACE xxx OWNED BY */
 	if (TailMatches6("ALL", "IN", "TABLESPACE", MatchAny, "OWNED", "BY"))
-		COMPLETE_WITH_QUERY(Query_for_list_of_roles);
+		COMPLETE_WITH_QUERY_KW(Query_for_list_of_roles,
+							   ADDLIST2("CURRENT_USER", "SESSION_USER"));
 	/* ALTER TABLE,INDEX,MATERIALIZED VIEW ALL IN TABLESPACE xxx OWNED BY xxx */
 	if (TailMatches7("ALL", "IN", "TABLESPACE", MatchAny, "OWNED", "BY", MatchAny))
 		COMPLETE_WITH_CONST("SET TABLESPACE");
@@ -1677,7 +1678,8 @@ psql_completion_internal(const char *text, char **previous_words,
 		COMPLETE_WITH_CONST("USER");
 	/* complete ALTER GROUP <foo> ADD|DROP USER with a user name */
 	if (Matches5("ALTER", "GROUP", MatchAny, "ADD|DROP", "USER"))
-		COMPLETE_WITH_QUERY(Query_for_list_of_roles);
+		COMPLETE_WITH_QUERY_KW(Query_for_list_of_roles,
+							   ADDLIST2("CURRENT_USER", "SESSION_USER"));
 
 	/*
 	 * If we have ALTER TYPE <sth> RENAME VALUE, provide list of enum values
@@ -2226,7 +2228,8 @@ psql_completion_internal(const char *text, char **previous_words,
 	if (Matches2("DROP", "OWNED"))
 		COMPLETE_WITH_CONST("BY");
 	if (Matches3("DROP", "OWNED", "BY"))
-		COMPLETE_WITH_QUERY(Query_for_list_of_roles);
+		COMPLETE_WITH_QUERY_KW(Query_for_list_of_roles,
+							   ADDLIST2("CURRENT_USER", "SESSION_USER"));
 
 	if (Matches3("DROP", "TEXT", "SEARCH"))
 		COMPLETE_WITH_LIST4("CONFIGURATION", "DICTIONARY", "PARSER", "TEMPLATE");
@@ -2357,9 +2360,10 @@ psql_completion_internal(const char *text, char **previous_words,
 						"EXECUTE", "USAGE", "ALL");
 		else
 			COMPLETE_WITH_QUERY_KW(Query_for_list_of_roles,
-				   ADDLIST13("SELECT", "INSERT", "UPDATE", "DELETE", "TRUNCATE",
+				   ADDLIST16("SELECT", "INSERT", "UPDATE", "DELETE", "TRUNCATE",
 							 "REFERENCES", "TRIGGER", "CREATE", "CONNECT",
-							 "TEMPORARY", "EXECUTE", "USAGE", "ALL"));
+							 "TEMPORARY", "EXECUTE", "USAGE", "ALL",
+							 "PUBLIC", "CURRENT_USER", "SESSION_USER"));
 	}
 	/*
 	 * Complete GRANT/REVOKE <privilege> with "ON", GRANT/REVOKE <role> with
@@ -2579,7 +2583,8 @@ psql_completion_internal(const char *text, char **previous_words,
 
 /* OWNER TO  - complete with available roles */
 	if (TailMatches2("OWNER", "TO"))
-		COMPLETE_WITH_QUERY(Query_for_list_of_roles);
+		COMPLETE_WITH_QUERY_KW(Query_for_list_of_roles,
+							   ADDLIST2("CURRENT_USER", "SESSION_USER"));
 
 /* ORDER BY */
 	if (TailMatches3("FROM", MatchAny, "ORDER"))
@@ -2602,11 +2607,13 @@ psql_completion_internal(const char *text, char **previous_words,
 	if (Matches2("REASSIGN", "OWNED"))
 		COMPLETE_WITH_CONST("BY");
 	if (Matches3("REASSIGN", "OWNED", "BY"))
-		COMPLETE_WITH_QUERY(Query_for_list_of_roles);
+		COMPLETE_WITH_QUERY_KW(Query_for_list_of_roles,
+							   ADDLIST2("CURRENT_USER", "SESSION_USER"));
 	if (Matches4("REASSIGN", "OWNED", "BY", MatchAny))
 		COMPLETE_WITH_CONST("TO");
 	if (Matches5("REASSIGN", "OWNED", "BY", MatchAny, "TO"))
-		COMPLETE_WITH_QUERY(Query_for_list_of_roles);
+		COMPLETE_WITH_QUERY_KW(Query_for_list_of_roles,
+							   ADDLIST2("CURRENT_USER", "SESSION_USER"));
 
 /* REFRESH MATERIALIZED VIEW */
 	if (Matches1("REFRESH"))
@@ -2717,14 +2724,13 @@ psql_completion_internal(const char *text, char **previous_words,
 		COMPLETE_WITH_LIST2("DEFERRED", "IMMEDIATE");
 	/* Complete SET ROLE */
 	if (Matches2("SET", "ROLE"))
-		COMPLETE_WITH_QUERY(Query_for_list_of_roles);
+		COMPLETE_WITH_QUERY_KW(Query_for_list_of_roles, ADDLIST1("NONE"));
 	/* Complete SET SESSION with AUTHORIZATION or CHARACTERISTICS... */
 	if (Matches2("SET", "SESSION"))
 		COMPLETE_WITH_LIST2("AUTHORIZATION", "CHARACTERISTICS AS TRANSACTION");
 	/* Complete SET SESSION AUTHORIZATION with username */
 	if (Matches3("SET", "SESSION", "AUTHORIZATION"))
-		COMPLETE_WITH_QUERY_KW(Query_for_list_of_roles,
-							   ADDLIST1("DEFAULT"));
+		COMPLETE_WITH_QUERY_KW(Query_for_list_of_roles, ADDLIST1("DEFAULT"));
 	/* Complete RESET SESSION with AUTHORIZATION */
 	if (Matches2("RESET", "SESSION"))
 		COMPLETE_WITH_CONST("AUTHORIZATION");
-- 
2.9.2

