diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/bin/psql/tab-complete.c | 66 |
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> */ |