@@ -714,6 +714,11 @@ static const SchemaQuery Query_for_list_of_matviews = {
714
714
" FROM pg_catalog.pg_prepared_statements "\
715
715
" WHERE substring(pg_catalog.quote_ident(name),1,%d)='%s'"
716
716
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
+
717
722
/*
718
723
* This is a list of all "things" in Pgsql, which can show up after CREATE or
719
724
* 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[] = {
746
751
{"DATABASE" , Query_for_list_of_databases },
747
752
{"DICTIONARY" , Query_for_list_of_ts_dictionaries , NULL , THING_NO_SHOW },
748
753
{"DOMAIN" , NULL , & Query_for_list_of_domains },
754
+ {"EVENT TRIGGER" , NULL , NULL },
749
755
{"EXTENSION" , Query_for_list_of_extensions },
750
756
{"FOREIGN DATA WRAPPER" , NULL , NULL },
751
757
{"FOREIGN TABLE" , NULL , NULL },
@@ -934,7 +940,7 @@ psql_completion(const char *text, int start, int end)
934
940
{
935
941
static const char * const list_ALTER [] =
936
942
{"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" ,
938
944
"GROUP" , "INDEX" , "LANGUAGE" , "LARGE OBJECT" , "MATERIALIZED VIEW" , "OPERATOR" ,
939
945
"ROLE" , "RULE" , "SCHEMA" , "SERVER" , "SEQUENCE" , "SYSTEM SET" , "TABLE" ,
940
946
"TABLESPACE" , "TEXT SEARCH" , "TRIGGER" , "TYPE" ,
@@ -1003,6 +1009,37 @@ psql_completion(const char *text, int start, int end)
1003
1009
COMPLETE_WITH_LIST (list_ALTERDATABASE );
1004
1010
}
1005
1011
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
+
1006
1043
/* ALTER EXTENSION <name> */
1007
1044
else if (pg_strcasecmp (prev3_wd , "ALTER" ) == 0 &&
1008
1045
pg_strcasecmp (prev2_wd , "EXTENSION" ) == 0 )
@@ -1334,7 +1371,8 @@ psql_completion(const char *text, int start, int end)
1334
1371
COMPLETE_WITH_SCHEMA_QUERY (Query_for_list_of_tables , NULL );
1335
1372
1336
1373
/* 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 &&
1338
1376
pg_strcasecmp (prev2_wd , "ON" ) == 0 )
1339
1377
COMPLETE_WITH_CONST ("RENAME TO" );
1340
1378
@@ -1876,7 +1914,7 @@ psql_completion(const char *text, int start, int end)
1876
1914
pg_strcasecmp (prev_wd , "ON" ) == 0 )
1877
1915
{
1878
1916
static const char * const list_COMMENT [] =
1879
- {"CAST" , "COLLATION" , "CONVERSION" , "DATABASE" , "EXTENSION" ,
1917
+ {"CAST" , "COLLATION" , "CONVERSION" , "DATABASE" , "EVENT TRIGGER" , " EXTENSION" ,
1880
1918
"FOREIGN DATA WRAPPER" , "FOREIGN TABLE" ,
1881
1919
"SERVER" , "INDEX" , "LANGUAGE" , "RULE" , "SCHEMA" , "SEQUENCE" ,
1882
1920
"TABLE" , "TYPE" , "VIEW" , "MATERIALIZED VIEW" , "COLUMN" , "AGGREGATE" , "FUNCTION" ,
@@ -1931,6 +1969,13 @@ psql_completion(const char *text, int start, int end)
1931
1969
{
1932
1970
COMPLETE_WITH_SCHEMA_QUERY (Query_for_list_of_matviews , NULL );
1933
1971
}
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
+ }
1934
1979
else if ((pg_strcasecmp (prev4_wd , "COMMENT" ) == 0 &&
1935
1980
pg_strcasecmp (prev3_wd , "ON" ) == 0 ) ||
1936
1981
(pg_strcasecmp (prev5_wd , "COMMENT" ) == 0 &&
@@ -2354,6 +2399,27 @@ psql_completion(const char *text, int start, int end)
2354
2399
pg_strcasecmp (prev_wd , "AS" ) == 0 )
2355
2400
COMPLETE_WITH_CONST ("SELECT" );
2356
2401
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
+
2357
2423
/* DECLARE */
2358
2424
else if (pg_strcasecmp (prev2_wd , "DECLARE" ) == 0 )
2359
2425
{
@@ -2446,6 +2512,9 @@ psql_completion(const char *text, int start, int end)
2446
2512
(pg_strcasecmp (prev4_wd , "DROP" ) == 0 &&
2447
2513
pg_strcasecmp (prev3_wd , "AGGREGATE" ) == 0 &&
2448
2514
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 ) ||
2449
2518
(pg_strcasecmp (prev5_wd , "DROP" ) == 0 &&
2450
2519
pg_strcasecmp (prev4_wd , "FOREIGN" ) == 0 &&
2451
2520
pg_strcasecmp (prev3_wd , "DATA" ) == 0 &&
@@ -2518,6 +2587,19 @@ psql_completion(const char *text, int start, int end)
2518
2587
COMPLETE_WITH_LIST (list_ALTERTEXTSEARCH );
2519
2588
}
2520
2589
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
+
2521
2603
/* EXECUTE, but not EXECUTE embedded in other commands */
2522
2604
else if (pg_strcasecmp (prev_wd , "EXECUTE" ) == 0 &&
2523
2605
prev2_wd [0 ] == '\0' )
0 commit comments