Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 7b97952

Browse files
committed
Tab completion for event triggers.
Ian Barwick
1 parent e3e6e3a commit 7b97952

File tree

1 file changed

+85
-3
lines changed

1 file changed

+85
-3
lines changed

src/bin/psql/tab-complete.c

+85-3
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)