@@ -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 {
935941 static 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)
10031009 COMPLETE_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> */
10071044 else if (pg_strcasecmp (prev3_wd , "ALTER" ) == 0 &&
10081045 pg_strcasecmp (prev2_wd , "EXTENSION" ) == 0 )
@@ -1334,7 +1371,8 @@ psql_completion(const char *text, int start, int end)
13341371 COMPLETE_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 &&
13381376 pg_strcasecmp (prev2_wd , "ON" ) == 0 )
13391377 COMPLETE_WITH_CONST ("RENAME TO" );
13401378
@@ -1876,7 +1914,7 @@ psql_completion(const char *text, int start, int end)
18761914 pg_strcasecmp (prev_wd , "ON" ) == 0 )
18771915 {
18781916 static 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 {
19321970 COMPLETE_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+ }
19341979 else if ((pg_strcasecmp (prev4_wd , "COMMENT" ) == 0 &&
19351980 pg_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)
23542399 pg_strcasecmp (prev_wd , "AS" ) == 0 )
23552400 COMPLETE_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 */
23582424 else 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 &&
24472513 pg_strcasecmp (prev3_wd , "AGGREGATE" ) == 0 &&
24482514 prev_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 &&
24502519 pg_strcasecmp (prev4_wd , "FOREIGN" ) == 0 &&
24512520 pg_strcasecmp (prev3_wd , "DATA" ) == 0 &&
@@ -2518,6 +2587,19 @@ psql_completion(const char *text, int start, int end)
25182587 COMPLETE_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 */
25222604 else if (pg_strcasecmp (prev_wd , "EXECUTE" ) == 0 &&
25232605 prev2_wd [0 ] == '\0' )
0 commit comments