@@ -1149,6 +1149,21 @@ static const SchemaQuery Query_for_trigger_of_table = {
1149
1149
"CREATE", "CONNECT", "TEMPORARY", "EXECUTE", "USAGE", "SET", "ALTER SYSTEM", \
1150
1150
"MAINTAIN", "ALL"
1151
1151
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
+
1152
1167
/*
1153
1168
* These object types were introduced later than our support cutoff of
1154
1169
* server version 9.2. We use the VersionedQuery infrastructure so that
@@ -1812,15 +1827,45 @@ psql_completion(const char *text, int start, int end)
1812
1827
else
1813
1828
COMPLETE_WITH_FUNCTION_ARG (prev2_wd );
1814
1829
}
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 ))
1817
1840
{
1818
1841
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 );
1821
1843
else
1822
1844
COMPLETE_WITH_FUNCTION_ARG (prev2_wd );
1823
1845
}
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" );
1824
1869
1825
1870
/* ALTER PUBLICATION <name> */
1826
1871
else if (Matches ("ALTER" , "PUBLICATION" , MatchAny ))
0 commit comments