On Fri, 28 Oct 2022 at 08:02, Dong Wook Lee <sh95...@gmail.com> wrote:
>
> On Fri, Oct 28, 2022 at 12:08 AM vignesh C <vignes...@gmail.com> wrote:
> >
> > Hi,
> >
> > Tab completion for ALTER FUNCTION/PROCEDURE/ROUTINE action was
> > missing, this patch adds the tab completion for the same.
> >
> > Regards,
> > Vignesh
>
> Hi,
> I applied your patch and did some tests.
> Is it okay not to consider SET and RESET commands? (e.g ALTER FUNCTION)

Those also should be handled, attached v2 version includes the changes
for the same.

Regards,
Vignesh
From ed4129144f09d003999028802d2d20e03ce93462 Mon Sep 17 00:00:00 2001
From: "vignesh.c" <vignes...@gmail.com>
Date: Thu, 27 Oct 2022 14:00:46 +0530
Subject: [PATCH v2] 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 | 58 ++++++++++++++++++++++++++++++++++---
 1 file changed, 54 insertions(+), 4 deletions(-)

diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c
index a64571215b..63b9d48c3b 100644
--- a/src/bin/psql/tab-complete.c
+++ b/src/bin/psql/tab-complete.c
@@ -1805,12 +1805,62 @@ 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("OWNER TO", "RENAME TO", "SET SCHEMA",
-						  "DEPENDS ON EXTENSION", "NO DEPENDS ON EXTENSION");
+			COMPLETE_WITH("CALLED ON NULL INPUT", "COST",
+						  "DEPENDS ON EXTENSION", "EXTERNAL SECURITY",
+						  "IMMUTABLE", "LEAKPROOF", "NO DEPENDS ON EXTENSION",
+						  "NOT LEAKPROOF", "OWNER TO", "PARALLEL", "RENAME TO",
+						  "RESET", "RETURNS NULL ON NULL INPUT ", "ROWS",
+						  "SECURITY", "SET", "STABLE", "STRICT", "SUPPORT",
+						  "VOLATILE");
+		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("DEPENDS ON EXTENSION", "EXTERNAL SECURITY",
+						  "NO DEPENDS ON EXTENSION", "OWNER TO", "RENAME TO",
+						  "RESET", "SECURITY", "SET");
+		else
+			COMPLETE_WITH_FUNCTION_ARG(prev2_wd);
+	}
+	/* ALTER ROUTINE <name> (...) */
+	else if (Matches("ALTER", "ROUTINE", MatchAny, MatchAny))
+	{
+		if (ends_with(prev_wd, ')'))
+			COMPLETE_WITH("COST", "DEPENDS ON EXTENSION", "EXTERNAL SECURITY",
+						  "IMMUTABLE", "LEAKPROOF", "NO DEPENDS ON EXTENSION",
+						  "NOT LEAKPROOF", "OWNER TO", "PARALLEL", "RENAME TO",
+						  "RESET", "ROWS", "SECURITY", "SET", "STABLE",
+						  "VOLATILE");
 		else
 			COMPLETE_WITH_FUNCTION_ARG(prev2_wd);
 	}
-- 
2.32.0

Reply via email to