@@ -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