@@ -1580,7 +1580,7 @@ psql_completion(const char *text, int start, int end)
1580
1580
/* complete with something you can create or replace */
1581
1581
else if (TailMatches ("CREATE" , "OR" , "REPLACE" ))
1582
1582
COMPLETE_WITH ("FUNCTION" , "PROCEDURE" , "LANGUAGE" , "RULE" , "VIEW" ,
1583
- "AGGREGATE" , "TRANSFORM" );
1583
+ "AGGREGATE" , "TRANSFORM" , "TRIGGER" );
1584
1584
1585
1585
/* DROP, but not DROP embedded in other commands */
1586
1586
/* complete with something you can drop */
@@ -2712,31 +2712,56 @@ psql_completion(const char *text, int start, int end)
2712
2712
"slot_name" , "synchronous_commit" );
2713
2713
2714
2714
/* 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 ))
2717
2722
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" ))
2720
2730
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" ))
2723
2734
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
+ */
2725
2740
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 ))
2727
2744
COMPLETE_WITH ("ON" , "OR" );
2728
2745
2729
2746
/*
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.
2733
2750
*/
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" ))
2735
2753
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" ))
2738
2761
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 ))
2740
2765
{
2741
2766
if (pset .sversion >= 110000 )
2742
2767
COMPLETE_WITH ("NOT DEFERRABLE" , "DEFERRABLE" , "INITIALLY" ,
@@ -2745,19 +2770,25 @@ psql_completion(const char *text, int start, int end)
2745
2770
COMPLETE_WITH ("NOT DEFERRABLE" , "DEFERRABLE" , "INITIALLY" ,
2746
2771
"REFERENCING" , "FOR" , "WHEN (" , "EXECUTE PROCEDURE" );
2747
2772
}
2748
- else if (HeadMatches ("CREATE" , "TRIGGER" ) &&
2773
+ else if ((HeadMatches ("CREATE" , "TRIGGER" ) ||
2774
+ HeadMatches ("CREATE" , "OR" , "REPLACE" , "TRIGGER" )) &&
2749
2775
(TailMatches ("DEFERRABLE" ) || TailMatches ("INITIALLY" , "IMMEDIATE|DEFERRED" )))
2750
2776
{
2751
2777
if (pset .sversion >= 110000 )
2752
2778
COMPLETE_WITH ("REFERENCING" , "FOR" , "WHEN (" , "EXECUTE FUNCTION" );
2753
2779
else
2754
2780
COMPLETE_WITH ("REFERENCING" , "FOR" , "WHEN (" , "EXECUTE PROCEDURE" );
2755
2781
}
2756
- else if (HeadMatches ("CREATE" , "TRIGGER" ) && TailMatches ("REFERENCING" ))
2782
+ else if ((HeadMatches ("CREATE" , "TRIGGER" ) ||
2783
+ HeadMatches ("CREATE" , "OR" , "REPLACE" , "TRIGGER" )) &&
2784
+ TailMatches ("REFERENCING" ))
2757
2785
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" ))
2759
2789
COMPLETE_WITH ("AS" );
2760
- else if (HeadMatches ("CREATE" , "TRIGGER" ) &&
2790
+ else if ((HeadMatches ("CREATE" , "TRIGGER" ) ||
2791
+ HeadMatches ("CREATE" , "OR" , "REPLACE" , "TRIGGER" )) &&
2761
2792
(TailMatches ("REFERENCING" , "OLD" , "TABLE" , "AS" , MatchAny ) ||
2762
2793
TailMatches ("REFERENCING" , "OLD" , "TABLE" , MatchAny )))
2763
2794
{
@@ -2766,7 +2797,8 @@ psql_completion(const char *text, int start, int end)
2766
2797
else
2767
2798
COMPLETE_WITH ("NEW TABLE" , "FOR" , "WHEN (" , "EXECUTE PROCEDURE" );
2768
2799
}
2769
- else if (HeadMatches ("CREATE" , "TRIGGER" ) &&
2800
+ else if ((HeadMatches ("CREATE" , "TRIGGER" ) ||
2801
+ HeadMatches ("CREATE" , "OR" , "REPLACE" , "TRIGGER" )) &&
2770
2802
(TailMatches ("REFERENCING" , "NEW" , "TABLE" , "AS" , MatchAny ) ||
2771
2803
TailMatches ("REFERENCING" , "NEW" , "TABLE" , MatchAny )))
2772
2804
{
@@ -2775,7 +2807,8 @@ psql_completion(const char *text, int start, int end)
2775
2807
else
2776
2808
COMPLETE_WITH ("OLD TABLE" , "FOR" , "WHEN (" , "EXECUTE PROCEDURE" );
2777
2809
}
2778
- else if (HeadMatches ("CREATE" , "TRIGGER" ) &&
2810
+ else if ((HeadMatches ("CREATE" , "TRIGGER" ) ||
2811
+ HeadMatches ("CREATE" , "OR" , "REPLACE" , "TRIGGER" )) &&
2779
2812
(TailMatches ("REFERENCING" , "OLD|NEW" , "TABLE" , "AS" , MatchAny , "OLD|NEW" , "TABLE" , "AS" , MatchAny ) ||
2780
2813
TailMatches ("REFERENCING" , "OLD|NEW" , "TABLE" , MatchAny , "OLD|NEW" , "TABLE" , "AS" , MatchAny ) ||
2781
2814
TailMatches ("REFERENCING" , "OLD|NEW" , "TABLE" , "AS" , MatchAny , "OLD|NEW" , "TABLE" , MatchAny ) ||
@@ -2786,11 +2819,16 @@ psql_completion(const char *text, int start, int end)
2786
2819
else
2787
2820
COMPLETE_WITH ("FOR" , "WHEN (" , "EXECUTE PROCEDURE" );
2788
2821
}
2789
- else if (HeadMatches ("CREATE" , "TRIGGER" ) && TailMatches ("FOR" ))
2822
+ else if ((HeadMatches ("CREATE" , "TRIGGER" ) ||
2823
+ HeadMatches ("CREATE" , "OR" , "REPLACE" , "TRIGGER" )) &&
2824
+ TailMatches ("FOR" ))
2790
2825
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" ))
2792
2829
COMPLETE_WITH ("ROW" , "STATEMENT" );
2793
- else if (HeadMatches ("CREATE" , "TRIGGER" ) &&
2830
+ else if ((HeadMatches ("CREATE" , "TRIGGER" ) ||
2831
+ HeadMatches ("CREATE" , "OR" , "REPLACE" , "TRIGGER" )) &&
2794
2832
(TailMatches ("FOR" , "EACH" , "ROW|STATEMENT" ) ||
2795
2833
TailMatches ("FOR" , "ROW|STATEMENT" )))
2796
2834
{
@@ -2799,22 +2837,31 @@ psql_completion(const char *text, int start, int end)
2799
2837
else
2800
2838
COMPLETE_WITH ("WHEN (" , "EXECUTE PROCEDURE" );
2801
2839
}
2802
- else if (HeadMatches ("CREATE" , "TRIGGER" ) && TailMatches ("WHEN" , "(*)" ))
2840
+ else if ((HeadMatches ("CREATE" , "TRIGGER" ) ||
2841
+ HeadMatches ("CREATE" , "OR" , "REPLACE" , "TRIGGER" )) &&
2842
+ TailMatches ("WHEN" , "(*)" ))
2803
2843
{
2804
2844
if (pset .sversion >= 110000 )
2805
2845
COMPLETE_WITH ("EXECUTE FUNCTION" );
2806
2846
else
2807
2847
COMPLETE_WITH ("EXECUTE PROCEDURE" );
2808
2848
}
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" ))
2811
2857
{
2812
2858
if (pset .sversion >= 110000 )
2813
2859
COMPLETE_WITH ("FUNCTION" );
2814
2860
else
2815
2861
COMPLETE_WITH ("PROCEDURE" );
2816
2862
}
2817
- else if (HeadMatches ("CREATE" , "TRIGGER" ) &&
2863
+ else if ((HeadMatches ("CREATE" , "TRIGGER" ) ||
2864
+ HeadMatches ("CREATE" , "OR" , "REPLACE" , "TRIGGER" )) &&
2818
2865
TailMatches ("EXECUTE" , "FUNCTION|PROCEDURE" ))
2819
2866
COMPLETE_WITH_VERSIONED_SCHEMA_QUERY (Query_for_list_of_functions , NULL );
2820
2867
0 commit comments