mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-10-01 11:11:19 +02:00
Tab completion for event triggers.
Ian Barwick
This commit is contained in:
parent
e3e6e3af56
commit
7b979524af
@ -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')
|
||||||
|
Loading…
Reference in New Issue
Block a user