]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
psql: Tab-complete ALTER ROLE ... IN DATABASE SET/RESET
authorÁlvaro Herrera <alvherre@kurilemu.de>
Mon, 2 Mar 2026 17:03:44 +0000 (18:03 +0100)
committerÁlvaro Herrera <alvherre@kurilemu.de>
Mon, 2 Mar 2026 17:03:44 +0000 (18:03 +0100)
Detailed completion of the RESET clause is still missing.  Not sure a
detailed implementation is worth the trouble.

Author: Ian Lawrence Barwick <barwick@gmail.com>
Author: Vasuki M <vasukianand0119@gmail.com>
Reviewed-by: zengman <zengman@halodbtech.com>
Reviewed-by: Dharin Shah <dharinshah95@gmail.com>
Reviewed-by: Surya Poondla <suryapoondla4@gmail.com>
Discussion: https://postgr.es/m/CAB8KJ=iH_v1YB2ss1A=BqvOAf28OVYiWRqUdE6TJ3pP-RdsPig@mail.gmail.com

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

index 43451fce1c3709921bf21edba84609cdc7cd6e91..987cce820b99e2c1d6332a25903d789ecc433cfc 100644 (file)
@@ -2536,12 +2536,24 @@ 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",
+                                         "ENCRYPTED PASSWORD", "IN", "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 (Matches("ALTER", "USER|ROLE", MatchAny, "IN", "DATABASE"))
+               COMPLETE_WITH_QUERY(Query_for_list_of_databases);
+       /* ALTER USER,ROLE <name> IN DATABASE <dbname> */
+       else if (Matches("ALTER", "USER|ROLE", MatchAny, "IN", "DATABASE", MatchAny))
+               COMPLETE_WITH("SET", "RESET");
+       /* ALTER USER,ROLE <name> IN DATABASE <dbname> SET */
+       else if (Matches("ALTER", "USER|ROLE", MatchAny, "IN", "DATABASE", MatchAny, "SET"))
+               COMPLETE_WITH_QUERY(Query_for_list_of_set_vars);
+       /* XXX missing support for ALTER ROLE <name> IN DATABASE <dbname> RESET */
        /* ALTER USER,ROLE <name> RESET */
        else if (Matches("ALTER", "USER|ROLE", MatchAny, "RESET"))
        {