Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit a3bc631

Browse files
committed
Improve tab completion for ALTER FUNCTION/PROCEDURE/ROUTINE.
This adds psql tab completion for each of the actions supported by ALTER FUNCTION/PROCEDURE/ROUTINE. Vignesh C, reviewed by Dong Wook Lee, Michael Paquier, Melih Mutlu and me. Discussion: https://postgr.es/m/CALDaNm0s7GQmkLP_mx5Cvk=UzYMnjhPmXBxU8DsHEunFbC5sTg@mail.gmail.com
1 parent 72aea95 commit a3bc631

File tree

1 file changed

+49
-4
lines changed

1 file changed

+49
-4
lines changed

src/bin/psql/tab-complete.c

+49-4
Original file line numberDiff line numberDiff line change
@@ -1149,6 +1149,21 @@ static const SchemaQuery Query_for_trigger_of_table = {
11491149
"CREATE", "CONNECT", "TEMPORARY", "EXECUTE", "USAGE", "SET", "ALTER SYSTEM", \
11501150
"MAINTAIN", "ALL"
11511151

1152+
/* ALTER PROCEDURE options */
1153+
#define Alter_procedure_options \
1154+
"DEPENDS ON EXTENSION", "EXTERNAL SECURITY", "NO DEPENDS ON EXTENSION", \
1155+
"OWNER TO", "RENAME TO", "RESET", "SECURITY", "SET"
1156+
1157+
/* ALTER ROUTINE options */
1158+
#define Alter_routine_options \
1159+
Alter_procedure_options, "COST", "IMMUTABLE", "LEAKPROOF", "NOT LEAKPROOF", \
1160+
"PARALLEL", "ROWS", "STABLE", "VOLATILE"
1161+
1162+
/* ALTER FUNCTION options */
1163+
#define Alter_function_options \
1164+
Alter_routine_options, "CALLED ON NULL INPUT", "RETURNS NULL ON NULL INPUT", \
1165+
"STRICT", "SUPPORT"
1166+
11521167
/*
11531168
* These object types were introduced later than our support cutoff of
11541169
* server version 9.2. We use the VersionedQuery infrastructure so that
@@ -1812,15 +1827,45 @@ psql_completion(const char *text, int start, int end)
18121827
else
18131828
COMPLETE_WITH_FUNCTION_ARG(prev2_wd);
18141829
}
1815-
/* ALTER FUNCTION,PROCEDURE,ROUTINE <name> (...) */
1816-
else if (Matches("ALTER", "FUNCTION|PROCEDURE|ROUTINE", MatchAny, MatchAny))
1830+
/* ALTER FUNCTION <name> (...) */
1831+
else if (Matches("ALTER", "FUNCTION", MatchAny, MatchAny))
1832+
{
1833+
if (ends_with(prev_wd, ')'))
1834+
COMPLETE_WITH(Alter_function_options);
1835+
else
1836+
COMPLETE_WITH_FUNCTION_ARG(prev2_wd);
1837+
}
1838+
/* ALTER PROCEDURE <name> (...) */
1839+
else if (Matches("ALTER", "PROCEDURE", MatchAny, MatchAny))
18171840
{
18181841
if (ends_with(prev_wd, ')'))
1819-
COMPLETE_WITH("OWNER TO", "RENAME TO", "SET SCHEMA",
1820-
"DEPENDS ON EXTENSION", "NO DEPENDS ON EXTENSION");
1842+
COMPLETE_WITH(Alter_procedure_options);
18211843
else
18221844
COMPLETE_WITH_FUNCTION_ARG(prev2_wd);
18231845
}
1846+
/* ALTER ROUTINE <name> (...) */
1847+
else if (Matches("ALTER", "ROUTINE", MatchAny, MatchAny))
1848+
{
1849+
if (ends_with(prev_wd, ')'))
1850+
COMPLETE_WITH(Alter_routine_options);
1851+
else
1852+
COMPLETE_WITH_FUNCTION_ARG(prev2_wd);
1853+
}
1854+
/* ALTER FUNCTION|ROUTINE <name> (...) PARALLEL */
1855+
else if (Matches("ALTER", "FUNCTION|ROUTINE", MatchAny, MatchAny, "PARALLEL"))
1856+
COMPLETE_WITH("RESTRICTED", "SAFE", "UNSAFE");
1857+
/* ALTER FUNCTION|PROCEDURE|ROUTINE <name> (...) [EXTERNAL] SECURITY */
1858+
else if (Matches("ALTER", "FUNCTION|PROCEDURE|ROUTINE", MatchAny, MatchAny, "SECURITY") ||
1859+
Matches("ALTER", "FUNCTION|PROCEDURE|ROUTINE", MatchAny, MatchAny, "EXTERNAL", "SECURITY"))
1860+
COMPLETE_WITH("DEFINER", "INVOKER");
1861+
/* ALTER FUNCTION|PROCEDURE|ROUTINE <name> (...) RESET */
1862+
else if (Matches("ALTER", "FUNCTION|PROCEDURE|ROUTINE", MatchAny, MatchAny, "RESET"))
1863+
COMPLETE_WITH_QUERY_VERBATIM_PLUS(Query_for_list_of_set_vars,
1864+
"ALL");
1865+
/* ALTER FUNCTION|PROCEDURE|ROUTINE <name> (...) SET */
1866+
else if (Matches("ALTER", "FUNCTION|PROCEDURE|ROUTINE", MatchAny, MatchAny, "SET"))
1867+
COMPLETE_WITH_QUERY_VERBATIM_PLUS(Query_for_list_of_set_vars,
1868+
"SCHEMA");
18241869

18251870
/* ALTER PUBLICATION <name> */
18261871
else if (Matches("ALTER", "PUBLICATION", MatchAny))

0 commit comments

Comments
 (0)