@@ -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