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