aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Paquier <michael@paquier.xyz>2018-10-26 23:36:40 +0900
committerMichael Paquier <michael@paquier.xyz>2018-10-26 23:36:40 +0900
commitfdf5eade96267d86af9efaf9213f5b3624e02354 (patch)
treece0775f0a25052bab3597df0d34fe3b6b449cbb6 /src
parentef4583238b9ceaca728a27aea711a5f467dc49d5 (diff)
downloadpostgresql-fdf5eade96267d86af9efaf9213f5b3624e02354.tar.gz
postgresql-fdf5eade96267d86af9efaf9213f5b3624e02354.zip
Add tab completion of EXECUTE FUNCTION for CREATE TRIGGER in psql
The change to accept EXECUTE FUNCTION as well as EXECUTE PROCEDURE in CREATE TRIGGER (added by 0a63f99) forgot to tell psql's tab completion system about this. This change is version-aware, with FUNCTION being selected automatically instead of PROCEDURE depending on the backend version, PROCEDURE being an historical grammar kept for compatibility and considered as deprecated in v11. Author: Dagfinn Ilmari Mannsåker Reviewed-by: Tom Lane, Michael Paquier Discussion: https://postgr.es/m/d8jmur4q4yc.fsf@dalvik.ping.uio.no
Diffstat (limited to 'src')
-rw-r--r--src/bin/psql/tab-complete.c66
1 files changed, 56 insertions, 10 deletions
diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c
index 2dda6f1bb4f..7817bd72d78 100644
--- a/src/bin/psql/tab-complete.c
+++ b/src/bin/psql/tab-complete.c
@@ -2775,7 +2775,8 @@ psql_completion(const char *text, int start, int end)
/*
* complete CREATE TRIGGER <name> BEFORE,AFTER event ON with a list of
- * tables
+ * tables. EXECUTE FUNCTION is the recommended grammar instead of EXECUTE
+ * PROCEDURE in version 11 and upwards.
*/
else if (TailMatches6("CREATE", "TRIGGER", MatchAny, "BEFORE|AFTER", MatchAny, "ON"))
COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables, NULL);
@@ -2783,11 +2784,26 @@ psql_completion(const char *text, int start, int end)
else if (TailMatches7("CREATE", "TRIGGER", MatchAny, "INSTEAD", "OF", MatchAny, "ON"))
COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_views, NULL);
else if (HeadMatches2("CREATE", "TRIGGER") && TailMatches2("ON", MatchAny))
- COMPLETE_WITH_LIST7("NOT DEFERRABLE", "DEFERRABLE", "INITIALLY",
- "REFERENCING", "FOR", "WHEN (", "EXECUTE PROCEDURE");
+ {
+ if (pset.sversion >= 110000)
+ COMPLETE_WITH_LIST7("NOT DEFERRABLE", "DEFERRABLE", "INITIALLY",
+ "REFERENCING", "FOR", "WHEN (",
+ "EXECUTE FUNCTION");
+ else
+ COMPLETE_WITH_LIST7("NOT DEFERRABLE", "DEFERRABLE", "INITIALLY",
+ "REFERENCING", "FOR", "WHEN (",
+ "EXECUTE PROCEDURE");
+ }
else if (HeadMatches2("CREATE", "TRIGGER") &&
(TailMatches1("DEFERRABLE") || TailMatches2("INITIALLY", "IMMEDIATE|DEFERRED")))
- COMPLETE_WITH_LIST4("REFERENCING", "FOR", "WHEN (", "EXECUTE PROCEDURE");
+ {
+ if (pset.sversion >= 110000)
+ COMPLETE_WITH_LIST4("REFERENCING", "FOR", "WHEN (",
+ "EXECUTE FUNCTION");
+ else
+ COMPLETE_WITH_LIST4("REFERENCING", "FOR", "WHEN (",
+ "EXECUTE PROCEDURE");
+ }
else if (HeadMatches2("CREATE", "TRIGGER") && TailMatches1("REFERENCING"))
COMPLETE_WITH_LIST2("OLD TABLE", "NEW TABLE");
else if (HeadMatches2("CREATE", "TRIGGER") && TailMatches2("OLD|NEW", "TABLE"))
@@ -2795,17 +2811,36 @@ psql_completion(const char *text, int start, int end)
else if (HeadMatches2("CREATE", "TRIGGER") &&
(TailMatches5("REFERENCING", "OLD", "TABLE", "AS", MatchAny) ||
TailMatches4("REFERENCING", "OLD", "TABLE", MatchAny)))
- COMPLETE_WITH_LIST4("NEW TABLE", "FOR", "WHEN (", "EXECUTE PROCEDURE");
+ {
+ if (pset.sversion >= 110000)
+ COMPLETE_WITH_LIST4("NEW TABLE", "FOR", "WHEN (",
+ "EXECUTE FUNCTION");
+ else
+ COMPLETE_WITH_LIST4("NEW TABLE", "FOR", "WHEN (",
+ "EXECUTE PROCEDURE");
+ }
else if (HeadMatches2("CREATE", "TRIGGER") &&
(TailMatches5("REFERENCING", "NEW", "TABLE", "AS", MatchAny) ||
TailMatches4("REFERENCING", "NEW", "TABLE", MatchAny)))
- COMPLETE_WITH_LIST4("OLD TABLE", "FOR", "WHEN (", "EXECUTE PROCEDURE");
+ {
+ if (pset.sversion >= 110000)
+ COMPLETE_WITH_LIST4("OLD TABLE", "FOR", "WHEN (",
+ "EXECUTE FUNCTION");
+ else
+ COMPLETE_WITH_LIST4("OLD TABLE", "FOR", "WHEN (",
+ "EXECUTE PROCEDURE");
+ }
else if (HeadMatches2("CREATE", "TRIGGER") &&
(TailMatches9("REFERENCING", "OLD|NEW", "TABLE", "AS", MatchAny, "OLD|NEW", "TABLE", "AS", MatchAny) ||
TailMatches8("REFERENCING", "OLD|NEW", "TABLE", MatchAny, "OLD|NEW", "TABLE", "AS", MatchAny) ||
TailMatches8("REFERENCING", "OLD|NEW", "TABLE", "AS", MatchAny, "OLD|NEW", "TABLE", MatchAny) ||
TailMatches7("REFERENCING", "OLD|NEW", "TABLE", MatchAny, "OLD|NEW", "TABLE", MatchAny)))
- COMPLETE_WITH_LIST3("FOR", "WHEN (", "EXECUTE PROCEDURE");
+ {
+ if (pset.sversion >= 110000)
+ COMPLETE_WITH_LIST3("FOR", "WHEN (", "EXECUTE FUNCTION");
+ else
+ COMPLETE_WITH_LIST3("FOR", "WHEN (", "EXECUTE PROCEDURE");
+ }
else if (HeadMatches2("CREATE", "TRIGGER") && TailMatches1("FOR"))
COMPLETE_WITH_LIST3("EACH", "ROW", "STATEMENT");
else if (HeadMatches2("CREATE", "TRIGGER") && TailMatches2("FOR", "EACH"))
@@ -2813,11 +2848,22 @@ psql_completion(const char *text, int start, int end)
else if (HeadMatches2("CREATE", "TRIGGER") &&
(TailMatches3("FOR", "EACH", "ROW|STATEMENT") ||
TailMatches2("FOR", "ROW|STATEMENT")))
- COMPLETE_WITH_LIST2("WHEN (", "EXECUTE PROCEDURE");
+ {
+ if (pset.sversion >= 110000)
+ COMPLETE_WITH_LIST2("WHEN (", "EXECUTE FUNCTION");
+ else
+ COMPLETE_WITH_LIST2("WHEN (", "EXECUTE PROCEDURE");
+ }
/* complete CREATE TRIGGER ... EXECUTE with PROCEDURE */
else if (HeadMatches2("CREATE", "TRIGGER") && TailMatches1("EXECUTE"))
- COMPLETE_WITH_CONST("PROCEDURE");
- else if (HeadMatches2("CREATE", "TRIGGER") && TailMatches2("EXECUTE", "PROCEDURE"))
+ {
+ if (pset.sversion >= 110000)
+ COMPLETE_WITH_CONST("FUNCTION");
+ else
+ COMPLETE_WITH_CONST("PROCEDURE");
+ }
+ else if (HeadMatches2("CREATE", "TRIGGER") &&
+ TailMatches2("EXECUTE", "FUNCTION|PROCEDURE"))
COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_functions, NULL);
/* CREATE ROLE,USER,GROUP <name> */