@@ -714,6 +714,11 @@ static const SchemaQuery Query_for_list_of_matviews = {
714714" FROM pg_catalog.pg_prepared_statements "\
715715" WHERE substring(pg_catalog.quote_ident(name),1,%d)='%s'"
716716
717+ #define Query_for_list_of_event_triggers \
718+ " SELECT pg_catalog.quote_ident(evtname) "\
719+ " FROM pg_catalog.pg_event_trigger "\
720+ " WHERE substring(pg_catalog.quote_ident(evtname),1,%d)='%s'"
721+
717722/*
718723 * This is a list of all "things" in Pgsql, which can show up after CREATE or
719724 * DROP; and there is also a query to get a list of them.
@@ -746,6 +751,7 @@ static const pgsql_thing_t words_after_create[] = {
746751{"DATABASE" ,Query_for_list_of_databases },
747752{"DICTIONARY" ,Query_for_list_of_ts_dictionaries ,NULL ,THING_NO_SHOW },
748753{"DOMAIN" ,NULL ,& Query_for_list_of_domains },
754+ {"EVENT TRIGGER" ,NULL ,NULL },
749755{"EXTENSION" ,Query_for_list_of_extensions },
750756{"FOREIGN DATA WRAPPER" ,NULL ,NULL },
751757{"FOREIGN TABLE" ,NULL ,NULL },
@@ -934,7 +940,7 @@ psql_completion(const char *text, int start, int end)
934940{
935941static const char * const list_ALTER []=
936942{"AGGREGATE" ,"COLLATION" ,"CONVERSION" ,"DATABASE" ,"DEFAULT PRIVILEGES" ,"DOMAIN" ,
937- "EXTENSION" ,"FOREIGN DATA WRAPPER" ,"FOREIGN TABLE" ,"FUNCTION" ,
943+ "EVENT TRIGGER" , " EXTENSION" ,"FOREIGN DATA WRAPPER" ,"FOREIGN TABLE" ,"FUNCTION" ,
938944"GROUP" ,"INDEX" ,"LANGUAGE" ,"LARGE OBJECT" ,"MATERIALIZED VIEW" ,"OPERATOR" ,
939945"ROLE" ,"RULE" ,"SCHEMA" ,"SERVER" ,"SEQUENCE" ,"SYSTEM SET" ,"TABLE" ,
940946"TABLESPACE" ,"TEXT SEARCH" ,"TRIGGER" ,"TYPE" ,
@@ -1003,6 +1009,37 @@ psql_completion(const char *text, int start, int end)
10031009COMPLETE_WITH_LIST (list_ALTERDATABASE );
10041010}
10051011
1012+ /* ALTER EVENT TRIGGER */
1013+ else if (pg_strcasecmp (prev3_wd ,"ALTER" )== 0 &&
1014+ pg_strcasecmp (prev2_wd ,"EVENT" )== 0 &&
1015+ pg_strcasecmp (prev_wd ,"TRIGGER" )== 0 )
1016+ {
1017+ COMPLETE_WITH_QUERY (Query_for_list_of_event_triggers );
1018+ }
1019+
1020+ /* ALTER EVENT TRIGGER <name> */
1021+ else if (pg_strcasecmp (prev4_wd ,"ALTER" )== 0 &&
1022+ pg_strcasecmp (prev3_wd ,"EVENT" )== 0 &&
1023+ pg_strcasecmp (prev2_wd ,"TRIGGER" )== 0 )
1024+ {
1025+ static const char * const list_ALTER_EVENT_TRIGGER []=
1026+ {"DISABLE" ,"ENABLE" ,"OWNER TO" ,"RENAME TO" ,NULL };
1027+
1028+ COMPLETE_WITH_LIST (list_ALTER_EVENT_TRIGGER );
1029+ }
1030+
1031+ /* ALTER EVENT TRIGGER <name> ENABLE */
1032+ else if (pg_strcasecmp (prev5_wd ,"ALTER" )== 0 &&
1033+ pg_strcasecmp (prev4_wd ,"EVENT" )== 0 &&
1034+ pg_strcasecmp (prev3_wd ,"TRIGGER" )== 0 &&
1035+ pg_strcasecmp (prev_wd ,"ENABLE" )== 0 )
1036+ {
1037+ static const char * const list_ALTER_EVENT_TRIGGER_ENABLE []=
1038+ {"REPLICA" ,"ALWAYS" ,NULL };
1039+
1040+ COMPLETE_WITH_LIST (list_ALTER_EVENT_TRIGGER_ENABLE );
1041+ }
1042+
10061043/* ALTER EXTENSION <name> */
10071044else if (pg_strcasecmp (prev3_wd ,"ALTER" )== 0 &&
10081045pg_strcasecmp (prev2_wd ,"EXTENSION" )== 0 )
@@ -1334,7 +1371,8 @@ psql_completion(const char *text, int start, int end)
13341371COMPLETE_WITH_SCHEMA_QUERY (Query_for_list_of_tables ,NULL );
13351372
13361373/* ALTER TRIGGER <name> ON <name> */
1337- else if (pg_strcasecmp (prev4_wd ,"TRIGGER" )== 0 &&
1374+ else if (pg_strcasecmp (prev5_wd ,"ALTER" )== 0 &&
1375+ pg_strcasecmp (prev4_wd ,"TRIGGER" )== 0 &&
13381376pg_strcasecmp (prev2_wd ,"ON" )== 0 )
13391377COMPLETE_WITH_CONST ("RENAME TO" );
13401378
@@ -1876,7 +1914,7 @@ psql_completion(const char *text, int start, int end)
18761914pg_strcasecmp (prev_wd ,"ON" )== 0 )
18771915{
18781916static const char * const list_COMMENT []=
1879- {"CAST" ,"COLLATION" ,"CONVERSION" ,"DATABASE" ,"EXTENSION" ,
1917+ {"CAST" ,"COLLATION" ,"CONVERSION" ,"DATABASE" ,"EVENT TRIGGER" , " EXTENSION" ,
18801918"FOREIGN DATA WRAPPER" ,"FOREIGN TABLE" ,
18811919"SERVER" ,"INDEX" ,"LANGUAGE" ,"RULE" ,"SCHEMA" ,"SEQUENCE" ,
18821920"TABLE" ,"TYPE" ,"VIEW" ,"MATERIALIZED VIEW" ,"COLUMN" ,"AGGREGATE" ,"FUNCTION" ,
@@ -1931,6 +1969,13 @@ psql_completion(const char *text, int start, int end)
19311969{
19321970COMPLETE_WITH_SCHEMA_QUERY (Query_for_list_of_matviews ,NULL );
19331971}
1972+ else if (pg_strcasecmp (prev4_wd ,"COMMENT" )== 0 &&
1973+ pg_strcasecmp (prev3_wd ,"ON" )== 0 &&
1974+ pg_strcasecmp (prev2_wd ,"EVENT" )== 0 &&
1975+ pg_strcasecmp (prev_wd ,"TRIGGER" )== 0 )
1976+ {
1977+ COMPLETE_WITH_QUERY (Query_for_list_of_event_triggers );
1978+ }
19341979else if ((pg_strcasecmp (prev4_wd ,"COMMENT" )== 0 &&
19351980pg_strcasecmp (prev3_wd ,"ON" )== 0 )||
19361981 (pg_strcasecmp (prev5_wd ,"COMMENT" )== 0 &&
@@ -2354,6 +2399,27 @@ psql_completion(const char *text, int start, int end)
23542399pg_strcasecmp (prev_wd ,"AS" )== 0 )
23552400COMPLETE_WITH_CONST ("SELECT" );
23562401
2402+ /* CREATE EVENT TRIGGER */
2403+ else if (pg_strcasecmp (prev2_wd ,"CREATE" )== 0 &&
2404+ pg_strcasecmp (prev_wd ,"EVENT" )== 0 )
2405+ COMPLETE_WITH_CONST ("TRIGGER" );
2406+ /* Complete CREATE EVENT TRIGGER <name> with ON */
2407+ else if (pg_strcasecmp (prev4_wd ,"CREATE" )== 0 &&
2408+ pg_strcasecmp (prev3_wd ,"EVENT" )== 0 &&
2409+ pg_strcasecmp (prev2_wd ,"TRIGGER" )== 0 )
2410+ COMPLETE_WITH_CONST ("ON" );
2411+ /* Complete CREATE EVENT TRIGGER <name> ON with event_type */
2412+ else if (pg_strcasecmp (prev5_wd ,"CREATE" )== 0 &&
2413+ pg_strcasecmp (prev4_wd ,"EVENT" )== 0 &&
2414+ pg_strcasecmp (prev3_wd ,"TRIGGER" )== 0 &&
2415+ pg_strcasecmp (prev_wd ,"ON" )== 0 )
2416+ {
2417+ static const char * const list_CREATE_EVENT_TRIGGER_ON []=
2418+ {"ddl_command_start" ,"ddl_command_end" ,"sql_drop" ,NULL };
2419+
2420+ COMPLETE_WITH_LIST (list_CREATE_EVENT_TRIGGER_ON );
2421+ }
2422+
23572423/* DECLARE */
23582424else if (pg_strcasecmp (prev2_wd ,"DECLARE" )== 0 )
23592425{
@@ -2446,6 +2512,9 @@ psql_completion(const char *text, int start, int end)
24462512 (pg_strcasecmp (prev4_wd ,"DROP" )== 0 &&
24472513pg_strcasecmp (prev3_wd ,"AGGREGATE" )== 0 &&
24482514prev_wd [strlen (prev_wd )- 1 ]== ')' )||
2515+ (pg_strcasecmp (prev4_wd ,"DROP" )== 0 &&
2516+ pg_strcasecmp (prev3_wd ,"EVENT" )== 0 &&
2517+ pg_strcasecmp (prev2_wd ,"TRIGGER" )== 0 )||
24492518 (pg_strcasecmp (prev5_wd ,"DROP" )== 0 &&
24502519pg_strcasecmp (prev4_wd ,"FOREIGN" )== 0 &&
24512520pg_strcasecmp (prev3_wd ,"DATA" )== 0 &&
@@ -2518,6 +2587,19 @@ psql_completion(const char *text, int start, int end)
25182587COMPLETE_WITH_LIST (list_ALTERTEXTSEARCH );
25192588}
25202589
2590+ /* DROP EVENT TRIGGER */
2591+ else if (pg_strcasecmp (prev2_wd ,"DROP" )== 0 &&
2592+ pg_strcasecmp (prev_wd ,"EVENT" )== 0 )
2593+ {
2594+ COMPLETE_WITH_CONST ("TRIGGER" );
2595+ }
2596+ else if (pg_strcasecmp (prev3_wd ,"DROP" )== 0 &&
2597+ pg_strcasecmp (prev2_wd ,"EVENT" )== 0 &&
2598+ pg_strcasecmp (prev_wd ,"TRIGGER" )== 0 )
2599+ {
2600+ COMPLETE_WITH_QUERY (Query_for_list_of_event_triggers );
2601+ }
2602+
25212603/* EXECUTE, but not EXECUTE embedded in other commands */
25222604else if (pg_strcasecmp (prev_wd ,"EXECUTE" )== 0 &&
25232605prev2_wd [0 ]== '\0' )