mirror of
https://github.com/postgres/postgres.git
synced 2025-06-26 12:21:12 +03:00
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
This commit is contained in:
@ -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))
|
||||
{
|
||||
if (pset.sversion >= 110000)
|
||||
COMPLETE_WITH_LIST7("NOT DEFERRABLE", "DEFERRABLE", "INITIALLY",
|
||||
"REFERENCING", "FOR", "WHEN (", "EXECUTE PROCEDURE");
|
||||
"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)))
|
||||
{
|
||||
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")))
|
||||
{
|
||||
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"))
|
||||
{
|
||||
if (pset.sversion >= 110000)
|
||||
COMPLETE_WITH_CONST("FUNCTION");
|
||||
else
|
||||
COMPLETE_WITH_CONST("PROCEDURE");
|
||||
else if (HeadMatches2("CREATE", "TRIGGER") && TailMatches2("EXECUTE", "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> */
|
||||
|
Reference in New Issue
Block a user