From de1cb4cb546b9cfac280c44aea2cf112a85bc7e9 Mon Sep 17 00:00:00 2001 From: Ian Barwick 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 IN */ + else if (Matches("ALTER", "USER|ROLE", MatchAny, "IN")) + COMPLETE_WITH("DATABASE"); + + /* ALTER USER,ROLE 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 RESET */ else if (Matches("ALTER", "USER|ROLE", MatchAny, "RESET")) { base-commit: 266543a62055541ddefe4e66797e0e1e4aa8705a -- 2.43.0