From 7ff8f79d4295042e09efdc8a0c16ccd660968cf5 Mon Sep 17 00:00:00 2001
From: Shi Yu <shiy.fnst@fujitsu.com>
Date: Wed, 28 Sep 2022 17:59:17 +0800
Subject: [PATCH v2 2/2] Fix tab completion for GRANT/REVOKE

The result of tab completion for GRANT contains GRANT, but there's no such a
privilege. Fix it in this patch.
---
 src/bin/psql/tab-complete.c | 26 ++++++++++++++++++++++----
 1 file changed, 22 insertions(+), 4 deletions(-)

diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c
index 71cfe8aec1..dbd34e4987 100644
--- a/src/bin/psql/tab-complete.c
+++ b/src/bin/psql/tab-complete.c
@@ -3749,9 +3749,29 @@ psql_completion(const char *text, int start, int end)
 			COMPLETE_WITH("SELECT", "INSERT", "UPDATE",
 						  "DELETE", "TRUNCATE", "REFERENCES", "TRIGGER",
 						  "EXECUTE", "USAGE", "ALL");
-		else
+		else if (TailMatches("REVOKE", "GRANT"))
+			COMPLETE_WITH("OPTION FOR");
+		else if (TailMatches("GRANT") ||
+			 TailMatches("REVOKE", "GRANT", "OPTION", "FOR"))
+			COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
+									 "SELECT",
+									 "INSERT",
+									 "UPDATE",
+									 "DELETE",
+									 "TRUNCATE",
+									 "REFERENCES",
+									 "TRIGGER",
+									 "CREATE",
+									 "CONNECT",
+									 "TEMPORARY",
+									 "EXECUTE",
+									 "USAGE",
+									 "SET",
+									 "ALTER SYSTEM",
+									 "ALL");
+		else if (TailMatches("REVOKE"))
 			COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
-									 "GRANT",
+									 "GRANT OPTION FOR",
 									 "SELECT",
 									 "INSERT",
 									 "UPDATE",
@@ -3769,8 +3789,6 @@ psql_completion(const char *text, int start, int end)
 									 "ALL");
 	}
 
-	else if (TailMatches("REVOKE", "GRANT"))
-		COMPLETE_WITH("OPTION FOR");
 	else if (TailMatches("REVOKE", "GRANT", "OPTION"))
 		COMPLETE_WITH("FOR");
 
-- 
2.31.1

