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

Commit bf0aa7c

Browse files
committed
Add tab completion for CREATE [OR REPLACE] TRIGGER in psql
92bf7e2 has added support for this grammar. Author: Noriyoshi Shinoda Discussion: https://postgr.es/m/TU4PR8401MB115244623CF4724DCA0D507FEEE30@TU4PR8401MB1152.NAMPRD84.PROD.OUTLOOK.COM
1 parent cf2acaf commit bf0aa7c

File tree

1 file changed

+76
-29
lines changed

1 file changed

+76
-29
lines changed

src/bin/psql/tab-complete.c

+76-29
Original file line numberDiff line numberDiff line change
@@ -1580,7 +1580,7 @@ psql_completion(const char *text, int start, int end)
15801580
/* complete with something you can create or replace */
15811581
else if (TailMatches("CREATE", "OR", "REPLACE"))
15821582
COMPLETE_WITH("FUNCTION", "PROCEDURE", "LANGUAGE", "RULE", "VIEW",
1583-
"AGGREGATE", "TRANSFORM");
1583+
"AGGREGATE", "TRANSFORM", "TRIGGER");
15841584

15851585
/* DROP, but not DROP embedded in other commands */
15861586
/* complete with something you can drop */
@@ -2712,31 +2712,56 @@ psql_completion(const char *text, int start, int end)
27122712
"slot_name", "synchronous_commit");
27132713

27142714
/* CREATE TRIGGER --- is allowed inside CREATE SCHEMA, so use TailMatches */
2715-
/* complete CREATE TRIGGER <name> with BEFORE,AFTER,INSTEAD OF */
2716-
else if (TailMatches("CREATE", "TRIGGER", MatchAny))
2715+
2716+
/*
2717+
* Complete CREATE [ OR REPLACE ] TRIGGER <name> with BEFORE|AFTER|INSTEAD
2718+
* OF.
2719+
*/
2720+
else if (TailMatches("CREATE", "TRIGGER", MatchAny) ||
2721+
TailMatches("CREATE", "OR", "REPLACE", "TRIGGER", MatchAny))
27172722
COMPLETE_WITH("BEFORE", "AFTER", "INSTEAD OF");
2718-
/* complete CREATE TRIGGER <name> BEFORE,AFTER with an event */
2719-
else if (TailMatches("CREATE", "TRIGGER", MatchAny, "BEFORE|AFTER"))
2723+
2724+
/*
2725+
* Complete CREATE [ OR REPLACE ] TRIGGER <name> BEFORE,AFTER with an
2726+
* event.
2727+
*/
2728+
else if (TailMatches("CREATE", "TRIGGER", MatchAny, "BEFORE|AFTER") ||
2729+
TailMatches("CREATE", "OR", "REPLACE", "TRIGGER", MatchAny, "BEFORE|AFTER"))
27202730
COMPLETE_WITH("INSERT", "DELETE", "UPDATE", "TRUNCATE");
2721-
/* complete CREATE TRIGGER <name> INSTEAD OF with an event */
2722-
else if (TailMatches("CREATE", "TRIGGER", MatchAny, "INSTEAD", "OF"))
2731+
/* Complete CREATE [ OR REPLACE ] TRIGGER <name> INSTEAD OF with an event */
2732+
else if (TailMatches("CREATE", "TRIGGER", MatchAny, "INSTEAD", "OF") ||
2733+
TailMatches("CREATE", "OR", "REPLACE", "TRIGGER", MatchAny, "INSTEAD", "OF"))
27232734
COMPLETE_WITH("INSERT", "DELETE", "UPDATE");
2724-
/* complete CREATE TRIGGER <name> BEFORE,AFTER sth with OR,ON */
2735+
2736+
/*
2737+
* Complete CREATE [ OR REPLACE ] TRIGGER <name> BEFORE,AFTER sth with
2738+
* OR|ON.
2739+
*/
27252740
else if (TailMatches("CREATE", "TRIGGER", MatchAny, "BEFORE|AFTER", MatchAny) ||
2726-
TailMatches("CREATE", "TRIGGER", MatchAny, "INSTEAD", "OF", MatchAny))
2741+
TailMatches("CREATE", "OR", "REPLACE", "TRIGGER", MatchAny, "BEFORE|AFTER", MatchAny) ||
2742+
TailMatches("CREATE", "TRIGGER", MatchAny, "INSTEAD", "OF", MatchAny) ||
2743+
TailMatches("CREATE", "OR", "REPLACE", "TRIGGER", MatchAny, "INSTEAD", "OF", MatchAny))
27272744
COMPLETE_WITH("ON", "OR");
27282745

27292746
/*
2730-
* complete CREATE TRIGGER <name> BEFORE,AFTER event ON with a list of
2731-
* tables. EXECUTE FUNCTION is the recommended grammar instead of EXECUTE
2732-
* PROCEDURE in version 11 and upwards.
2747+
* Complete CREATE [ OR REPLACE ] TRIGGER <name> BEFORE,AFTER event ON
2748+
* with a list of tables. EXECUTE FUNCTION is the recommended grammar
2749+
* instead of EXECUTE PROCEDURE in version 11 and upwards.
27332750
*/
2734-
else if (TailMatches("CREATE", "TRIGGER", MatchAny, "BEFORE|AFTER", MatchAny, "ON"))
2751+
else if (TailMatches("CREATE", "TRIGGER", MatchAny, "BEFORE|AFTER", MatchAny, "ON") ||
2752+
TailMatches("CREATE", "OR", "REPLACE", "TRIGGER", MatchAny, "BEFORE|AFTER", MatchAny, "ON"))
27352753
COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables, NULL);
2736-
/* complete CREATE TRIGGER ... INSTEAD OF event ON with a list of views */
2737-
else if (TailMatches("CREATE", "TRIGGER", MatchAny, "INSTEAD", "OF", MatchAny, "ON"))
2754+
2755+
/*
2756+
* Complete CREATE [ OR REPLACE ] TRIGGER ... INSTEAD OF event ON with a
2757+
* list of views.
2758+
*/
2759+
else if (TailMatches("CREATE", "TRIGGER", MatchAny, "INSTEAD", "OF", MatchAny, "ON") ||
2760+
TailMatches("CREATE", "OR", "REPLACE", "TRIGGER", MatchAny, "INSTEAD", "OF", MatchAny, "ON"))
27382761
COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_views, NULL);
2739-
else if (HeadMatches("CREATE", "TRIGGER") && TailMatches("ON", MatchAny))
2762+
else if ((HeadMatches("CREATE", "TRIGGER") ||
2763+
HeadMatches("CREATE", "OR", "REPLACE", "TRIGGER")) &&
2764+
TailMatches("ON", MatchAny))
27402765
{
27412766
if (pset.sversion >= 110000)
27422767
COMPLETE_WITH("NOT DEFERRABLE", "DEFERRABLE", "INITIALLY",
@@ -2745,19 +2770,25 @@ psql_completion(const char *text, int start, int end)
27452770
COMPLETE_WITH("NOT DEFERRABLE", "DEFERRABLE", "INITIALLY",
27462771
"REFERENCING", "FOR", "WHEN (", "EXECUTE PROCEDURE");
27472772
}
2748-
else if (HeadMatches("CREATE", "TRIGGER") &&
2773+
else if ((HeadMatches("CREATE", "TRIGGER") ||
2774+
HeadMatches("CREATE", "OR", "REPLACE", "TRIGGER")) &&
27492775
(TailMatches("DEFERRABLE") || TailMatches("INITIALLY", "IMMEDIATE|DEFERRED")))
27502776
{
27512777
if (pset.sversion >= 110000)
27522778
COMPLETE_WITH("REFERENCING", "FOR", "WHEN (", "EXECUTE FUNCTION");
27532779
else
27542780
COMPLETE_WITH("REFERENCING", "FOR", "WHEN (", "EXECUTE PROCEDURE");
27552781
}
2756-
else if (HeadMatches("CREATE", "TRIGGER") && TailMatches("REFERENCING"))
2782+
else if ((HeadMatches("CREATE", "TRIGGER") ||
2783+
HeadMatches("CREATE", "OR", "REPLACE", "TRIGGER")) &&
2784+
TailMatches("REFERENCING"))
27572785
COMPLETE_WITH("OLD TABLE", "NEW TABLE");
2758-
else if (HeadMatches("CREATE", "TRIGGER") && TailMatches("OLD|NEW", "TABLE"))
2786+
else if ((HeadMatches("CREATE", "TRIGGER") ||
2787+
HeadMatches("CREATE", "OR", "REPLACE", "TRIGGER")) &&
2788+
TailMatches("OLD|NEW", "TABLE"))
27592789
COMPLETE_WITH("AS");
2760-
else if (HeadMatches("CREATE", "TRIGGER") &&
2790+
else if ((HeadMatches("CREATE", "TRIGGER") ||
2791+
HeadMatches("CREATE", "OR", "REPLACE", "TRIGGER")) &&
27612792
(TailMatches("REFERENCING", "OLD", "TABLE", "AS", MatchAny) ||
27622793
TailMatches("REFERENCING", "OLD", "TABLE", MatchAny)))
27632794
{
@@ -2766,7 +2797,8 @@ psql_completion(const char *text, int start, int end)
27662797
else
27672798
COMPLETE_WITH("NEW TABLE", "FOR", "WHEN (", "EXECUTE PROCEDURE");
27682799
}
2769-
else if (HeadMatches("CREATE", "TRIGGER") &&
2800+
else if ((HeadMatches("CREATE", "TRIGGER") ||
2801+
HeadMatches("CREATE", "OR", "REPLACE", "TRIGGER")) &&
27702802
(TailMatches("REFERENCING", "NEW", "TABLE", "AS", MatchAny) ||
27712803
TailMatches("REFERENCING", "NEW", "TABLE", MatchAny)))
27722804
{
@@ -2775,7 +2807,8 @@ psql_completion(const char *text, int start, int end)
27752807
else
27762808
COMPLETE_WITH("OLD TABLE", "FOR", "WHEN (", "EXECUTE PROCEDURE");
27772809
}
2778-
else if (HeadMatches("CREATE", "TRIGGER") &&
2810+
else if ((HeadMatches("CREATE", "TRIGGER") ||
2811+
HeadMatches("CREATE", "OR", "REPLACE", "TRIGGER")) &&
27792812
(TailMatches("REFERENCING", "OLD|NEW", "TABLE", "AS", MatchAny, "OLD|NEW", "TABLE", "AS", MatchAny) ||
27802813
TailMatches("REFERENCING", "OLD|NEW", "TABLE", MatchAny, "OLD|NEW", "TABLE", "AS", MatchAny) ||
27812814
TailMatches("REFERENCING", "OLD|NEW", "TABLE", "AS", MatchAny, "OLD|NEW", "TABLE", MatchAny) ||
@@ -2786,11 +2819,16 @@ psql_completion(const char *text, int start, int end)
27862819
else
27872820
COMPLETE_WITH("FOR", "WHEN (", "EXECUTE PROCEDURE");
27882821
}
2789-
else if (HeadMatches("CREATE", "TRIGGER") && TailMatches("FOR"))
2822+
else if ((HeadMatches("CREATE", "TRIGGER") ||
2823+
HeadMatches("CREATE", "OR", "REPLACE", "TRIGGER")) &&
2824+
TailMatches("FOR"))
27902825
COMPLETE_WITH("EACH", "ROW", "STATEMENT");
2791-
else if (HeadMatches("CREATE", "TRIGGER") && TailMatches("FOR", "EACH"))
2826+
else if ((HeadMatches("CREATE", "TRIGGER") ||
2827+
HeadMatches("CREATE", "OR", "REPLACE", "TRIGGER")) &&
2828+
TailMatches("FOR", "EACH"))
27922829
COMPLETE_WITH("ROW", "STATEMENT");
2793-
else if (HeadMatches("CREATE", "TRIGGER") &&
2830+
else if ((HeadMatches("CREATE", "TRIGGER") ||
2831+
HeadMatches("CREATE", "OR", "REPLACE", "TRIGGER")) &&
27942832
(TailMatches("FOR", "EACH", "ROW|STATEMENT") ||
27952833
TailMatches("FOR", "ROW|STATEMENT")))
27962834
{
@@ -2799,22 +2837,31 @@ psql_completion(const char *text, int start, int end)
27992837
else
28002838
COMPLETE_WITH("WHEN (", "EXECUTE PROCEDURE");
28012839
}
2802-
else if (HeadMatches("CREATE", "TRIGGER") && TailMatches("WHEN", "(*)"))
2840+
else if ((HeadMatches("CREATE", "TRIGGER") ||
2841+
HeadMatches("CREATE", "OR", "REPLACE", "TRIGGER")) &&
2842+
TailMatches("WHEN", "(*)"))
28032843
{
28042844
if (pset.sversion >= 110000)
28052845
COMPLETE_WITH("EXECUTE FUNCTION");
28062846
else
28072847
COMPLETE_WITH("EXECUTE PROCEDURE");
28082848
}
2809-
/* complete CREATE TRIGGER ... EXECUTE with PROCEDURE|FUNCTION */
2810-
else if (HeadMatches("CREATE", "TRIGGER") && TailMatches("EXECUTE"))
2849+
2850+
/*
2851+
* Complete CREATE [ OR REPLACE ] TRIGGER ... EXECUTE with
2852+
* PROCEDURE|FUNCTION.
2853+
*/
2854+
else if ((HeadMatches("CREATE", "TRIGGER") ||
2855+
HeadMatches("CREATE", "OR", "REPLACE", "TRIGGER")) &&
2856+
TailMatches("EXECUTE"))
28112857
{
28122858
if (pset.sversion >= 110000)
28132859
COMPLETE_WITH("FUNCTION");
28142860
else
28152861
COMPLETE_WITH("PROCEDURE");
28162862
}
2817-
else if (HeadMatches("CREATE", "TRIGGER") &&
2863+
else if ((HeadMatches("CREATE", "TRIGGER") ||
2864+
HeadMatches("CREATE", "OR", "REPLACE", "TRIGGER")) &&
28182865
TailMatches("EXECUTE", "FUNCTION|PROCEDURE"))
28192866
COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_functions, NULL);
28202867

0 commit comments

Comments
 (0)