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