Tab completion for event triggers.

Ian Barwick
This commit is contained in:
Robert Haas 2014-04-14 08:44:21 -04:00
parent e3e6e3af56
commit 7b979524af
1 changed files with 85 additions and 3 deletions

View File

@ -714,6 +714,11 @@ static const SchemaQuery Query_for_list_of_matviews = {
" FROM pg_catalog.pg_prepared_statements "\ " FROM pg_catalog.pg_prepared_statements "\
" WHERE substring(pg_catalog.quote_ident(name),1,%d)='%s'" " WHERE substring(pg_catalog.quote_ident(name),1,%d)='%s'"
#define Query_for_list_of_event_triggers \
" SELECT pg_catalog.quote_ident(evtname) "\
" FROM pg_catalog.pg_event_trigger "\
" WHERE substring(pg_catalog.quote_ident(evtname),1,%d)='%s'"
/* /*
* This is a list of all "things" in Pgsql, which can show up after CREATE or * This is a list of all "things" in Pgsql, which can show up after CREATE or
* DROP; and there is also a query to get a list of them. * 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[] = {
{"DATABASE", Query_for_list_of_databases}, {"DATABASE", Query_for_list_of_databases},
{"DICTIONARY", Query_for_list_of_ts_dictionaries, NULL, THING_NO_SHOW}, {"DICTIONARY", Query_for_list_of_ts_dictionaries, NULL, THING_NO_SHOW},
{"DOMAIN", NULL, &Query_for_list_of_domains}, {"DOMAIN", NULL, &Query_for_list_of_domains},
{"EVENT TRIGGER", NULL, NULL},
{"EXTENSION", Query_for_list_of_extensions}, {"EXTENSION", Query_for_list_of_extensions},
{"FOREIGN DATA WRAPPER", NULL, NULL}, {"FOREIGN DATA WRAPPER", NULL, NULL},
{"FOREIGN TABLE", NULL, NULL}, {"FOREIGN TABLE", NULL, NULL},
@ -934,7 +940,7 @@ psql_completion(const char *text, int start, int end)
{ {
static const char *const list_ALTER[] = static const char *const list_ALTER[] =
{"AGGREGATE", "COLLATION", "CONVERSION", "DATABASE", "DEFAULT PRIVILEGES", "DOMAIN", {"AGGREGATE", "COLLATION", "CONVERSION", "DATABASE", "DEFAULT PRIVILEGES", "DOMAIN",
"EXTENSION", "FOREIGN DATA WRAPPER", "FOREIGN TABLE", "FUNCTION", "EVENT TRIGGER", "EXTENSION", "FOREIGN DATA WRAPPER", "FOREIGN TABLE", "FUNCTION",
"GROUP", "INDEX", "LANGUAGE", "LARGE OBJECT", "MATERIALIZED VIEW", "OPERATOR", "GROUP", "INDEX", "LANGUAGE", "LARGE OBJECT", "MATERIALIZED VIEW", "OPERATOR",
"ROLE", "RULE", "SCHEMA", "SERVER", "SEQUENCE", "SYSTEM SET", "TABLE", "ROLE", "RULE", "SCHEMA", "SERVER", "SEQUENCE", "SYSTEM SET", "TABLE",
"TABLESPACE", "TEXT SEARCH", "TRIGGER", "TYPE", "TABLESPACE", "TEXT SEARCH", "TRIGGER", "TYPE",
@ -1003,6 +1009,37 @@ psql_completion(const char *text, int start, int end)
COMPLETE_WITH_LIST(list_ALTERDATABASE); COMPLETE_WITH_LIST(list_ALTERDATABASE);
} }
/* ALTER EVENT TRIGGER */
else if (pg_strcasecmp(prev3_wd, "ALTER") == 0 &&
pg_strcasecmp(prev2_wd, "EVENT") == 0 &&
pg_strcasecmp(prev_wd, "TRIGGER") == 0)
{
COMPLETE_WITH_QUERY(Query_for_list_of_event_triggers);
}
/* ALTER EVENT TRIGGER <name> */
else if (pg_strcasecmp(prev4_wd, "ALTER") == 0 &&
pg_strcasecmp(prev3_wd, "EVENT") == 0 &&
pg_strcasecmp(prev2_wd, "TRIGGER") == 0)
{
static const char *const list_ALTER_EVENT_TRIGGER[] =
{"DISABLE", "ENABLE", "OWNER TO", "RENAME TO", NULL};
COMPLETE_WITH_LIST(list_ALTER_EVENT_TRIGGER);
}
/* ALTER EVENT TRIGGER <name> ENABLE */
else if (pg_strcasecmp(prev5_wd, "ALTER") == 0 &&
pg_strcasecmp(prev4_wd, "EVENT") == 0 &&
pg_strcasecmp(prev3_wd, "TRIGGER") == 0 &&
pg_strcasecmp(prev_wd, "ENABLE") == 0)
{
static const char *const list_ALTER_EVENT_TRIGGER_ENABLE[] =
{"REPLICA", "ALWAYS", NULL};
COMPLETE_WITH_LIST(list_ALTER_EVENT_TRIGGER_ENABLE);
}
/* ALTER EXTENSION <name> */ /* ALTER EXTENSION <name> */
else if (pg_strcasecmp(prev3_wd, "ALTER") == 0 && else if (pg_strcasecmp(prev3_wd, "ALTER") == 0 &&
pg_strcasecmp(prev2_wd, "EXTENSION") == 0) pg_strcasecmp(prev2_wd, "EXTENSION") == 0)
@ -1334,7 +1371,8 @@ psql_completion(const char *text, int start, int end)
COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables, NULL); COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables, NULL);
/* ALTER TRIGGER <name> ON <name> */ /* ALTER TRIGGER <name> ON <name> */
else if (pg_strcasecmp(prev4_wd, "TRIGGER") == 0 && else if (pg_strcasecmp(prev5_wd, "ALTER") == 0 &&
pg_strcasecmp(prev4_wd, "TRIGGER") == 0 &&
pg_strcasecmp(prev2_wd, "ON") == 0) pg_strcasecmp(prev2_wd, "ON") == 0)
COMPLETE_WITH_CONST("RENAME TO"); COMPLETE_WITH_CONST("RENAME TO");
@ -1876,7 +1914,7 @@ psql_completion(const char *text, int start, int end)
pg_strcasecmp(prev_wd, "ON") == 0) pg_strcasecmp(prev_wd, "ON") == 0)
{ {
static const char *const list_COMMENT[] = static const char *const list_COMMENT[] =
{"CAST", "COLLATION", "CONVERSION", "DATABASE", "EXTENSION", {"CAST", "COLLATION", "CONVERSION", "DATABASE", "EVENT TRIGGER", "EXTENSION",
"FOREIGN DATA WRAPPER", "FOREIGN TABLE", "FOREIGN DATA WRAPPER", "FOREIGN TABLE",
"SERVER", "INDEX", "LANGUAGE", "RULE", "SCHEMA", "SEQUENCE", "SERVER", "INDEX", "LANGUAGE", "RULE", "SCHEMA", "SEQUENCE",
"TABLE", "TYPE", "VIEW", "MATERIALIZED VIEW", "COLUMN", "AGGREGATE", "FUNCTION", "TABLE", "TYPE", "VIEW", "MATERIALIZED VIEW", "COLUMN", "AGGREGATE", "FUNCTION",
@ -1931,6 +1969,13 @@ psql_completion(const char *text, int start, int end)
{ {
COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_matviews, NULL); COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_matviews, NULL);
} }
else if (pg_strcasecmp(prev4_wd, "COMMENT") == 0 &&
pg_strcasecmp(prev3_wd, "ON") == 0 &&
pg_strcasecmp(prev2_wd, "EVENT") == 0 &&
pg_strcasecmp(prev_wd, "TRIGGER") == 0)
{
COMPLETE_WITH_QUERY(Query_for_list_of_event_triggers);
}
else if ((pg_strcasecmp(prev4_wd, "COMMENT") == 0 && else if ((pg_strcasecmp(prev4_wd, "COMMENT") == 0 &&
pg_strcasecmp(prev3_wd, "ON") == 0) || pg_strcasecmp(prev3_wd, "ON") == 0) ||
(pg_strcasecmp(prev5_wd, "COMMENT") == 0 && (pg_strcasecmp(prev5_wd, "COMMENT") == 0 &&
@ -2354,6 +2399,27 @@ psql_completion(const char *text, int start, int end)
pg_strcasecmp(prev_wd, "AS") == 0) pg_strcasecmp(prev_wd, "AS") == 0)
COMPLETE_WITH_CONST("SELECT"); COMPLETE_WITH_CONST("SELECT");
/* CREATE EVENT TRIGGER */
else if (pg_strcasecmp(prev2_wd, "CREATE") == 0 &&
pg_strcasecmp(prev_wd, "EVENT") == 0)
COMPLETE_WITH_CONST("TRIGGER");
/* Complete CREATE EVENT TRIGGER <name> with ON */
else if (pg_strcasecmp(prev4_wd, "CREATE") == 0 &&
pg_strcasecmp(prev3_wd, "EVENT") == 0 &&
pg_strcasecmp(prev2_wd, "TRIGGER") == 0)
COMPLETE_WITH_CONST("ON");
/* Complete CREATE EVENT TRIGGER <name> ON with event_type */
else if (pg_strcasecmp(prev5_wd, "CREATE") == 0 &&
pg_strcasecmp(prev4_wd, "EVENT") == 0 &&
pg_strcasecmp(prev3_wd, "TRIGGER") == 0 &&
pg_strcasecmp(prev_wd, "ON") == 0)
{
static const char *const list_CREATE_EVENT_TRIGGER_ON[] =
{"ddl_command_start", "ddl_command_end", "sql_drop", NULL};
COMPLETE_WITH_LIST(list_CREATE_EVENT_TRIGGER_ON);
}
/* DECLARE */ /* DECLARE */
else if (pg_strcasecmp(prev2_wd, "DECLARE") == 0) else if (pg_strcasecmp(prev2_wd, "DECLARE") == 0)
{ {
@ -2446,6 +2512,9 @@ psql_completion(const char *text, int start, int end)
(pg_strcasecmp(prev4_wd, "DROP") == 0 && (pg_strcasecmp(prev4_wd, "DROP") == 0 &&
pg_strcasecmp(prev3_wd, "AGGREGATE") == 0 && pg_strcasecmp(prev3_wd, "AGGREGATE") == 0 &&
prev_wd[strlen(prev_wd) - 1] == ')') || prev_wd[strlen(prev_wd) - 1] == ')') ||
(pg_strcasecmp(prev4_wd, "DROP") == 0 &&
pg_strcasecmp(prev3_wd, "EVENT") == 0 &&
pg_strcasecmp(prev2_wd, "TRIGGER") == 0) ||
(pg_strcasecmp(prev5_wd, "DROP") == 0 && (pg_strcasecmp(prev5_wd, "DROP") == 0 &&
pg_strcasecmp(prev4_wd, "FOREIGN") == 0 && pg_strcasecmp(prev4_wd, "FOREIGN") == 0 &&
pg_strcasecmp(prev3_wd, "DATA") == 0 && pg_strcasecmp(prev3_wd, "DATA") == 0 &&
@ -2518,6 +2587,19 @@ psql_completion(const char *text, int start, int end)
COMPLETE_WITH_LIST(list_ALTERTEXTSEARCH); COMPLETE_WITH_LIST(list_ALTERTEXTSEARCH);
} }
/* DROP EVENT TRIGGER */
else if (pg_strcasecmp(prev2_wd, "DROP") == 0 &&
pg_strcasecmp(prev_wd, "EVENT") == 0)
{
COMPLETE_WITH_CONST("TRIGGER");
}
else if (pg_strcasecmp(prev3_wd, "DROP") == 0 &&
pg_strcasecmp(prev2_wd, "EVENT") == 0 &&
pg_strcasecmp(prev_wd, "TRIGGER") == 0)
{
COMPLETE_WITH_QUERY(Query_for_list_of_event_triggers);
}
/* EXECUTE, but not EXECUTE embedded in other commands */ /* EXECUTE, but not EXECUTE embedded in other commands */
else if (pg_strcasecmp(prev_wd, "EXECUTE") == 0 && else if (pg_strcasecmp(prev_wd, "EXECUTE") == 0 &&
prev2_wd[0] == '\0') prev2_wd[0] == '\0')