]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Fix tab completion of ALTER FUNCTION/PROCEDURE/ROUTINE ... SET SCHEMA.
authorDean Rasheed <dean.a.rasheed@gmail.com>
Fri, 6 Jan 2023 11:09:56 +0000 (11:09 +0000)
committerDean Rasheed <dean.a.rasheed@gmail.com>
Fri, 6 Jan 2023 11:09:56 +0000 (11:09 +0000)
The ALTER DATABASE|FUNCTION|PROCEDURE|ROLE|ROUTINE|USER ... SET <name>
case in psql tab completion failed to exclude <name> = "SCHEMA", which
caused ALTER FUNCTION|PROCEDURE|ROUTINE ... SET SCHEMA to complete
with "FROM CURRENT" and "TO", which won't work.

Fix that, so that those cases now complete with the list of schemas,
like other ALTER ... SET SCHEMA commands.

Noticed while testing the recent patch to improve tab completion for
ALTER FUNCTION/PROCEDURE/ROUTINE, but this is not directly related to
that patch. Rather, this is a long-standing bug, so back-patch to all
supported branches.

Discussion: https://postgr.es/m/CALDaNm0s7GQmkLP_mx5Cvk=UzYMnjhPmXBxU8DsHEunFbC5sTg@mail.gmail.com

src/bin/psql/tab-complete.c

index d6b4a5bc31f24889ce9b39e087697df00d54990a..afc9c26259df9a434c3545d6e30be761478e5dc4 100644 (file)
@@ -3528,11 +3528,12 @@ psql_completion(const char *text, int start, int end)
                COMPLETE_WITH_CONST("TO");
 
        /*
-        * Complete ALTER DATABASE|FUNCTION||PROCEDURE|ROLE|ROUTINE|USER ... SET
+        * Complete ALTER DATABASE|FUNCTION|PROCEDURE|ROLE|ROUTINE|USER ... SET
         * <name>
         */
        else if (HeadMatches2("ALTER", "DATABASE|FUNCTION|PROCEDURE|ROLE|ROUTINE|USER") &&
-                        TailMatches2("SET", MatchAny))
+                        TailMatches2("SET", MatchAny) &&
+                        !TailMatches1("SCHEMA"))
                COMPLETE_WITH_LIST2("FROM CURRENT", "TO");
 
        /*