v1-0001-psql-add-tab-completion-for-ALTER-ROLE-IN-DATABASE.patch

application/x-patch

Filename: v1-0001-psql-add-tab-completion-for-ALTER-ROLE-IN-DATABASE.patch
Type: application/x-patch
Part: 0
Message: [PATCH] psql: tab completion for ALTER ROLE ... IN DATABASE ...

Patch

Same data as JSON: GET /api/v1/attachments/:id/patch the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes. API reference →
Format: format-patch
Series: patch v1-0001
Subject: psql: add tab completion for ALTER ROLE ... IN DATABASE ...
File+
src/bin/psql/tab-complete.in.c 24 2
From de1cb4cb546b9cfac280c44aea2cf112a85bc7e9 Mon Sep 17 00:00:00 2001
From: Ian Barwick <barwick@gmail.com>
Date: Fri, 21 Nov 2025 11:47:26 +0900
Subject: [PATCH v1] psql: add tab completion for ALTER ROLE ... IN DATABASE
 ...

This patch adds tab completion for the "IN DATABASE" clause of ALTER
ROLE.
---
 src/bin/psql/tab-complete.in.c | 26 ++++++++++++++++++++++++--
 1 file changed, 24 insertions(+), 2 deletions(-)

diff --git a/src/bin/psql/tab-complete.in.c b/src/bin/psql/tab-complete.in.c
index 51806597037..1d03d8eb49e 100644
--- a/src/bin/psql/tab-complete.in.c
+++ b/src/bin/psql/tab-complete.in.c
@@ -2536,12 +2536,34 @@ match_previous_words(int pattern_id,
 	else if (Matches("ALTER", "USER|ROLE", MatchAny) &&
 			 !TailMatches("USER", "MAPPING"))
 		COMPLETE_WITH("BYPASSRLS", "CONNECTION LIMIT", "CREATEDB", "CREATEROLE",
-					  "ENCRYPTED PASSWORD", "INHERIT", "LOGIN", "NOBYPASSRLS",
-					  "NOCREATEDB", "NOCREATEROLE", "NOINHERIT",
+					  "ENCRYPTED PASSWORD", "IN DATABASE", "INHERIT", "LOGIN",
+					  "NOBYPASSRLS", "NOCREATEDB", "NOCREATEROLE", "NOINHERIT",
 					  "NOLOGIN", "NOREPLICATION", "NOSUPERUSER", "PASSWORD",
 					  "RENAME TO", "REPLICATION", "RESET", "SET", "SUPERUSER",
 					  "VALID UNTIL", "WITH");
 
+	/* ALTER USER,ROLE <name> IN */
+	else if (Matches("ALTER", "USER|ROLE", MatchAny, "IN"))
+		COMPLETE_WITH("DATABASE");
+
+	/* ALTER USER,ROLE <name> IN DATABASE */
+	else if (HeadMatches("ALTER", "USER|ROLE", MatchAny, "IN"))
+	{
+		if (TailMatches("DATABASE"))
+			COMPLETE_WITH_QUERY(Query_for_list_of_databases);
+
+		else if (TailMatches("DATABASE", MatchAny))
+			COMPLETE_WITH("SET", "RESET");
+
+		else if (TailMatches("DATABASE", MatchAny, "SET"))
+			COMPLETE_WITH_QUERY(Query_for_list_of_set_vars);
+
+		else if (TailMatches("DATABASE", MatchAny, "RESET"))
+		{
+			set_completion_reference(prev5_wd);
+			COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_user_vars, "ALL");
+		}
+	}
 	/* ALTER USER,ROLE <name> RESET */
 	else if (Matches("ALTER", "USER|ROLE", MatchAny, "RESET"))
 	{

base-commit: 266543a62055541ddefe4e66797e0e1e4aa8705a
-- 
2.43.0