Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit fdf5ead

Browse files
committed
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
1 parent ef45832 commit fdf5ead

File tree

1 file changed

+56
-10
lines changed

1 file changed

+56
-10
lines changed

src/bin/psql/tab-complete.c

Lines changed: 56 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2775,49 +2775,95 @@ psql_completion(const char *text, int start, int end)
27752775

27762776
/*
27772777
* complete CREATE TRIGGER <name> BEFORE,AFTER event ON with a list of
2778-
* tables
2778+
* tables. EXECUTE FUNCTION is the recommended grammar instead of EXECUTE
2779+
* PROCEDURE in version 11 and upwards.
27792780
*/
27802781
else if (TailMatches6("CREATE", "TRIGGER", MatchAny, "BEFORE|AFTER", MatchAny, "ON"))
27812782
COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables, NULL);
27822783
/* complete CREATE TRIGGER ... INSTEAD OF event ON with a list of views */
27832784
else if (TailMatches7("CREATE", "TRIGGER", MatchAny, "INSTEAD", "OF", MatchAny, "ON"))
27842785
COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_views, NULL);
27852786
else if (HeadMatches2("CREATE", "TRIGGER") && TailMatches2("ON", MatchAny))
2786-
COMPLETE_WITH_LIST7("NOT DEFERRABLE", "DEFERRABLE", "INITIALLY",
2787-
"REFERENCING", "FOR", "WHEN (", "EXECUTE PROCEDURE");
2787+
{
2788+
if (pset.sversion >= 110000)
2789+
COMPLETE_WITH_LIST7("NOT DEFERRABLE", "DEFERRABLE", "INITIALLY",
2790+
"REFERENCING", "FOR", "WHEN (",
2791+
"EXECUTE FUNCTION");
2792+
else
2793+
COMPLETE_WITH_LIST7("NOT DEFERRABLE", "DEFERRABLE", "INITIALLY",
2794+
"REFERENCING", "FOR", "WHEN (",
2795+
"EXECUTE PROCEDURE");
2796+
}
27882797
else if (HeadMatches2("CREATE", "TRIGGER") &&
27892798
(TailMatches1("DEFERRABLE") || TailMatches2("INITIALLY", "IMMEDIATE|DEFERRED")))
2790-
COMPLETE_WITH_LIST4("REFERENCING", "FOR", "WHEN (", "EXECUTE PROCEDURE");
2799+
{
2800+
if (pset.sversion >= 110000)
2801+
COMPLETE_WITH_LIST4("REFERENCING", "FOR", "WHEN (",
2802+
"EXECUTE FUNCTION");
2803+
else
2804+
COMPLETE_WITH_LIST4("REFERENCING", "FOR", "WHEN (",
2805+
"EXECUTE PROCEDURE");
2806+
}
27912807
else if (HeadMatches2("CREATE", "TRIGGER") && TailMatches1("REFERENCING"))
27922808
COMPLETE_WITH_LIST2("OLD TABLE", "NEW TABLE");
27932809
else if (HeadMatches2("CREATE", "TRIGGER") && TailMatches2("OLD|NEW", "TABLE"))
27942810
COMPLETE_WITH_CONST("AS");
27952811
else if (HeadMatches2("CREATE", "TRIGGER") &&
27962812
(TailMatches5("REFERENCING", "OLD", "TABLE", "AS", MatchAny) ||
27972813
TailMatches4("REFERENCING", "OLD", "TABLE", MatchAny)))
2798-
COMPLETE_WITH_LIST4("NEW TABLE", "FOR", "WHEN (", "EXECUTE PROCEDURE");
2814+
{
2815+
if (pset.sversion >= 110000)
2816+
COMPLETE_WITH_LIST4("NEW TABLE", "FOR", "WHEN (",
2817+
"EXECUTE FUNCTION");
2818+
else
2819+
COMPLETE_WITH_LIST4("NEW TABLE", "FOR", "WHEN (",
2820+
"EXECUTE PROCEDURE");
2821+
}
27992822
else if (HeadMatches2("CREATE", "TRIGGER") &&
28002823
(TailMatches5("REFERENCING", "NEW", "TABLE", "AS", MatchAny) ||
28012824
TailMatches4("REFERENCING", "NEW", "TABLE", MatchAny)))
2802-
COMPLETE_WITH_LIST4("OLD TABLE", "FOR", "WHEN (", "EXECUTE PROCEDURE");
2825+
{
2826+
if (pset.sversion >= 110000)
2827+
COMPLETE_WITH_LIST4("OLD TABLE", "FOR", "WHEN (",
2828+
"EXECUTE FUNCTION");
2829+
else
2830+
COMPLETE_WITH_LIST4("OLD TABLE", "FOR", "WHEN (",
2831+
"EXECUTE PROCEDURE");
2832+
}
28032833
else if (HeadMatches2("CREATE", "TRIGGER") &&
28042834
(TailMatches9("REFERENCING", "OLD|NEW", "TABLE", "AS", MatchAny, "OLD|NEW", "TABLE", "AS", MatchAny) ||
28052835
TailMatches8("REFERENCING", "OLD|NEW", "TABLE", MatchAny, "OLD|NEW", "TABLE", "AS", MatchAny) ||
28062836
TailMatches8("REFERENCING", "OLD|NEW", "TABLE", "AS", MatchAny, "OLD|NEW", "TABLE", MatchAny) ||
28072837
TailMatches7("REFERENCING", "OLD|NEW", "TABLE", MatchAny, "OLD|NEW", "TABLE", MatchAny)))
2808-
COMPLETE_WITH_LIST3("FOR", "WHEN (", "EXECUTE PROCEDURE");
2838+
{
2839+
if (pset.sversion >= 110000)
2840+
COMPLETE_WITH_LIST3("FOR", "WHEN (", "EXECUTE FUNCTION");
2841+
else
2842+
COMPLETE_WITH_LIST3("FOR", "WHEN (", "EXECUTE PROCEDURE");
2843+
}
28092844
else if (HeadMatches2("CREATE", "TRIGGER") && TailMatches1("FOR"))
28102845
COMPLETE_WITH_LIST3("EACH", "ROW", "STATEMENT");
28112846
else if (HeadMatches2("CREATE", "TRIGGER") && TailMatches2("FOR", "EACH"))
28122847
COMPLETE_WITH_LIST2("ROW", "STATEMENT");
28132848
else if (HeadMatches2("CREATE", "TRIGGER") &&
28142849
(TailMatches3("FOR", "EACH", "ROW|STATEMENT") ||
28152850
TailMatches2("FOR", "ROW|STATEMENT")))
2816-
COMPLETE_WITH_LIST2("WHEN (", "EXECUTE PROCEDURE");
2851+
{
2852+
if (pset.sversion >= 110000)
2853+
COMPLETE_WITH_LIST2("WHEN (", "EXECUTE FUNCTION");
2854+
else
2855+
COMPLETE_WITH_LIST2("WHEN (", "EXECUTE PROCEDURE");
2856+
}
28172857
/* complete CREATE TRIGGER ... EXECUTE with PROCEDURE */
28182858
else if (HeadMatches2("CREATE", "TRIGGER") && TailMatches1("EXECUTE"))
2819-
COMPLETE_WITH_CONST("PROCEDURE");
2820-
else if (HeadMatches2("CREATE", "TRIGGER") && TailMatches2("EXECUTE", "PROCEDURE"))
2859+
{
2860+
if (pset.sversion >= 110000)
2861+
COMPLETE_WITH_CONST("FUNCTION");
2862+
else
2863+
COMPLETE_WITH_CONST("PROCEDURE");
2864+
}
2865+
else if (HeadMatches2("CREATE", "TRIGGER") &&
2866+
TailMatches2("EXECUTE", "FUNCTION|PROCEDURE"))
28212867
COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_functions, NULL);
28222868

28232869
/* CREATE ROLE,USER,GROUP <name> */

0 commit comments

Comments
 (0)