On Tue, 22 Nov 2022 at 05:59, Michael Paquier <mich...@paquier.xyz> wrote: > > On Fri, Oct 28, 2022 at 05:34:37PM +0530, vignesh C wrote: > > Those also should be handled, attached v2 version includes the changes > > for the same. > > The basic options supported by PROCEDURE are a subset of ROUTINE with a > difference of COST, IMMUTABLE, [NOT] LEAKPROOF, ROWS, STABLE > and VOLATILE. > > The basic options supported by ROUTINE are a subset of FUNCTION with a > difference of { CALLED | RETURNS NULL } ON NULL INPUT, STRICT and > SUPPORT. Is it worth refactoring a bit with common lists?
Modified > + "RESET", "RETURNS NULL ON NULL INPUT ", "ROWS", > Extra space after INPUT here, that's easy to miss. Good catch, the attached v3 patch has the changes for the same. Regards, Vignesh
From fab9d9f34979650a63b3be59ea69962923ac6617 Mon Sep 17 00:00:00 2001 From: "vignesh.c" <vignes...@gmail.com> Date: Thu, 27 Oct 2022 14:00:46 +0530 Subject: [PATCH v3] Tab completion for ALTER FUNCTION/PROCEDURE/ROUTINE. Tab completion for ALTER FUNCTION/PROCEDURE/ROUTINE action was missing, added the tab completion for the same. --- src/bin/psql/tab-complete.c | 57 ++++++++++++++++++++++++++++++++++--- 1 file changed, 53 insertions(+), 4 deletions(-) diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c index 13014f074f..4d0bbc034d 100644 --- a/src/bin/psql/tab-complete.c +++ b/src/bin/psql/tab-complete.c @@ -1149,6 +1149,16 @@ static const SchemaQuery Query_for_trigger_of_table = { "CREATE", "CONNECT", "TEMPORARY", "EXECUTE", "USAGE", "SET", "ALTER SYSTEM", \ "ALL" +/* ALTER PROCEDURE options */ +#define Alter_procedure_options \ +"DEPENDS ON EXTENSION", "EXTERNAL SECURITY", "NO DEPENDS ON EXTENSION", \ +"OWNER TO", "RENAME TO", "RESET", "SECURITY", "SET" + +/* ALTER ROUTINE options */ +#define Alter_routine_options \ +Alter_procedure_options, "COST", "IMMUTABLE", "LEAKPROOF", "NOT LEAKPROOF", \ +"PARALLEL", "ROWS", "STABLE", "VOLATILE" + /* * These object types were introduced later than our support cutoff of * server version 9.2. We use the VersionedQuery infrastructure so that @@ -1812,12 +1822,51 @@ psql_completion(const char *text, int start, int end) else COMPLETE_WITH_FUNCTION_ARG(prev2_wd); } - /* ALTER FUNCTION,PROCEDURE,ROUTINE <name> (...) */ - else if (Matches("ALTER", "FUNCTION|PROCEDURE|ROUTINE", MatchAny, MatchAny)) + /* ALTER FUNCTION <name> (...) */ + else if (Matches("ALTER", "FUNCTION", MatchAny, MatchAny)) + { + if (ends_with(prev_wd, ')')) + COMPLETE_WITH(Alter_routine_options, "CALLED ON NULL INPUT", + "RETURNS NULL ON NULL INPUT", "STRICT", "SUPPORT"); + else + COMPLETE_WITH_FUNCTION_ARG(prev2_wd); + } + /* ALTER FUNCTION|ROUTINE <name> (...) PARALLEL */ + else if (Matches("ALTER", "FUNCTION|ROUTINE", MatchAny, MatchAny, + "PARALLEL")) + COMPLETE_WITH("RESTRICTED", "SAFE", "UNSAFE"); + /* + * ALTER FUNCTION|PROCEDURE|ROUTINE <name> (...) + * [EXTERNAL] SECURITY + */ + else if (Matches("ALTER", "FUNCTION|PROCEDURE|ROUTINE", MatchAny, MatchAny, + "SECURITY") || + Matches("ALTER", "FUNCTION|PROCEDURE|ROUTINE", MatchAny, MatchAny, + "EXTERNAL", "SECURITY")) + COMPLETE_WITH("DEFINER" ,"INVOKER"); + /* ALTER FUNCTION|PROCEDURE|ROUTINE <name> (...) RESET */ + else if (Matches("ALTER", "FUNCTION|PROCEDURE|ROUTINE", MatchAny, MatchAny, + "RESET")) + COMPLETE_WITH_QUERY_VERBATIM_PLUS(Query_for_list_of_set_vars, + "ALL"); + /* ALTER FUNCTION|PROCEDURE|ROUTINE <name> (...) SET */ + else if (Matches("ALTER", "FUNCTION|PROCEDURE|ROUTINE", MatchAny, MatchAny, + "SET")) + COMPLETE_WITH_QUERY_VERBATIM_PLUS(Query_for_list_of_set_vars, + "SCHEMA"); + /* ALTER PROCEDURE <name> (...) */ + else if (Matches("ALTER", "PROCEDURE", MatchAny, MatchAny)) + { + if (ends_with(prev_wd, ')')) + COMPLETE_WITH(Alter_procedure_options); + else + COMPLETE_WITH_FUNCTION_ARG(prev2_wd); + } + /* ALTER ROUTINE <name> (...) */ + else if (Matches("ALTER", "ROUTINE", MatchAny, MatchAny)) { if (ends_with(prev_wd, ')')) - COMPLETE_WITH("OWNER TO", "RENAME TO", "SET SCHEMA", - "DEPENDS ON EXTENSION", "NO DEPENDS ON EXTENSION"); + COMPLETE_WITH(Alter_routine_options); else COMPLETE_WITH_FUNCTION_ARG(prev2_wd); } -- 2.34.1