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

Commit 292ef6e

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. In passing, add tab completion of EXECUTE FUNCTION/PROCEDURE after a complete WHEN ( … ) clause. 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 1007465 commit 292ef6e

File tree

1 file changed

+56
-11
lines changed

1 file changed

+56
-11
lines changed

src/bin/psql/tab-complete.c

+56-11
Original file line numberDiff line numberDiff line change
@@ -2465,49 +2465,94 @@ psql_completion(const char *text, int start, int end)
24652465

24662466
/*
24672467
* complete CREATE TRIGGER <name> BEFORE,AFTER event ON with a list of
2468-
* tables
2468+
* tables. EXECUTE FUNCTION is the recommended grammar instead of EXECUTE
2469+
* PROCEDURE in version 11 and upwards.
24692470
*/
24702471
else if (TailMatches("CREATE", "TRIGGER", MatchAny, "BEFORE|AFTER", MatchAny, "ON"))
24712472
COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables, NULL);
24722473
/* complete CREATE TRIGGER ... INSTEAD OF event ON with a list of views */
24732474
else if (TailMatches("CREATE", "TRIGGER", MatchAny, "INSTEAD", "OF", MatchAny, "ON"))
24742475
COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_views, NULL);
24752476
else if (HeadMatches("CREATE", "TRIGGER") && TailMatches("ON", MatchAny))
2476-
COMPLETE_WITH("NOT DEFERRABLE", "DEFERRABLE", "INITIALLY",
2477-
"REFERENCING", "FOR", "WHEN (", "EXECUTE PROCEDURE");
2477+
{
2478+
if (pset.sversion >= 110000)
2479+
COMPLETE_WITH("NOT DEFERRABLE", "DEFERRABLE", "INITIALLY",
2480+
"REFERENCING", "FOR", "WHEN (", "EXECUTE FUNCTION");
2481+
else
2482+
COMPLETE_WITH("NOT DEFERRABLE", "DEFERRABLE", "INITIALLY",
2483+
"REFERENCING", "FOR", "WHEN (", "EXECUTE PROCEDURE");
2484+
}
24782485
else if (HeadMatches("CREATE", "TRIGGER") &&
24792486
(TailMatches("DEFERRABLE") || TailMatches("INITIALLY", "IMMEDIATE|DEFERRED")))
2480-
COMPLETE_WITH("REFERENCING", "FOR", "WHEN (", "EXECUTE PROCEDURE");
2487+
{
2488+
if (pset.sversion >= 110000)
2489+
COMPLETE_WITH("REFERENCING", "FOR", "WHEN (", "EXECUTE FUNCTION");
2490+
else
2491+
COMPLETE_WITH("REFERENCING", "FOR", "WHEN (", "EXECUTE PROCEDURE");
2492+
}
24812493
else if (HeadMatches("CREATE", "TRIGGER") && TailMatches("REFERENCING"))
24822494
COMPLETE_WITH("OLD TABLE", "NEW TABLE");
24832495
else if (HeadMatches("CREATE", "TRIGGER") && TailMatches("OLD|NEW", "TABLE"))
24842496
COMPLETE_WITH("AS");
24852497
else if (HeadMatches("CREATE", "TRIGGER") &&
24862498
(TailMatches("REFERENCING", "OLD", "TABLE", "AS", MatchAny) ||
24872499
TailMatches("REFERENCING", "OLD", "TABLE", MatchAny)))
2488-
COMPLETE_WITH("NEW TABLE", "FOR", "WHEN (", "EXECUTE PROCEDURE");
2500+
{
2501+
if (pset.sversion >= 110000)
2502+
COMPLETE_WITH("NEW TABLE", "FOR", "WHEN (", "EXECUTE FUNCTION");
2503+
else
2504+
COMPLETE_WITH("NEW TABLE", "FOR", "WHEN (", "EXECUTE PROCEDURE");
2505+
}
24892506
else if (HeadMatches("CREATE", "TRIGGER") &&
24902507
(TailMatches("REFERENCING", "NEW", "TABLE", "AS", MatchAny) ||
24912508
TailMatches("REFERENCING", "NEW", "TABLE", MatchAny)))
2492-
COMPLETE_WITH("OLD TABLE", "FOR", "WHEN (", "EXECUTE PROCEDURE");
2509+
{
2510+
if (pset.sversion >= 110000)
2511+
COMPLETE_WITH("OLD TABLE", "FOR", "WHEN (", "EXECUTE FUNCTION");
2512+
else
2513+
COMPLETE_WITH("OLD TABLE", "FOR", "WHEN (", "EXECUTE PROCEDURE");
2514+
}
24932515
else if (HeadMatches("CREATE", "TRIGGER") &&
24942516
(TailMatches("REFERENCING", "OLD|NEW", "TABLE", "AS", MatchAny, "OLD|NEW", "TABLE", "AS", MatchAny) ||
24952517
TailMatches("REFERENCING", "OLD|NEW", "TABLE", MatchAny, "OLD|NEW", "TABLE", "AS", MatchAny) ||
24962518
TailMatches("REFERENCING", "OLD|NEW", "TABLE", "AS", MatchAny, "OLD|NEW", "TABLE", MatchAny) ||
24972519
TailMatches("REFERENCING", "OLD|NEW", "TABLE", MatchAny, "OLD|NEW", "TABLE", MatchAny)))
2498-
COMPLETE_WITH("FOR", "WHEN (", "EXECUTE PROCEDURE");
2520+
{
2521+
if (pset.sversion >= 110000)
2522+
COMPLETE_WITH("FOR", "WHEN (", "EXECUTE FUNCTION");
2523+
else
2524+
COMPLETE_WITH("FOR", "WHEN (", "EXECUTE PROCEDURE");
2525+
}
24992526
else if (HeadMatches("CREATE", "TRIGGER") && TailMatches("FOR"))
25002527
COMPLETE_WITH("EACH", "ROW", "STATEMENT");
25012528
else if (HeadMatches("CREATE", "TRIGGER") && TailMatches("FOR", "EACH"))
25022529
COMPLETE_WITH("ROW", "STATEMENT");
25032530
else if (HeadMatches("CREATE", "TRIGGER") &&
25042531
(TailMatches("FOR", "EACH", "ROW|STATEMENT") ||
25052532
TailMatches("FOR", "ROW|STATEMENT")))
2506-
COMPLETE_WITH("WHEN (", "EXECUTE PROCEDURE");
2507-
/* complete CREATE TRIGGER ... EXECUTE with PROCEDURE */
2533+
{
2534+
if (pset.sversion >= 110000)
2535+
COMPLETE_WITH("WHEN (", "EXECUTE FUNCTION");
2536+
else
2537+
COMPLETE_WITH("WHEN (", "EXECUTE PROCEDURE");
2538+
}
2539+
else if (HeadMatches("CREATE", "TRIGGER") && TailMatches("WHEN", "(*)"))
2540+
{
2541+
if (pset.sversion >= 110000)
2542+
COMPLETE_WITH("EXECUTE FUNCTION");
2543+
else
2544+
COMPLETE_WITH("EXECUTE PROCEDURE");
2545+
}
2546+
/* complete CREATE TRIGGER ... EXECUTE with PROCEDURE|FUNCTION */
25082547
else if (HeadMatches("CREATE", "TRIGGER") && TailMatches("EXECUTE"))
2509-
COMPLETE_WITH("PROCEDURE");
2510-
else if (HeadMatches("CREATE", "TRIGGER") && TailMatches("EXECUTE", "PROCEDURE"))
2548+
{
2549+
if (pset.sversion >= 110000)
2550+
COMPLETE_WITH("FUNCTION");
2551+
else
2552+
COMPLETE_WITH("PROCEDURE");
2553+
}
2554+
else if (HeadMatches("CREATE", "TRIGGER") &&
2555+
TailMatches("EXECUTE", "FUNCTION|PROCEDURE"))
25112556
COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_functions, NULL);
25122557

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

0 commit comments

Comments
 (0)