" FROM pg_catalog.pg_prepared_statements "\
" 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
* DROP; and there is also a query to get a list of them.
{"DATABASE", Query_for_list_of_databases},
{"DICTIONARY", Query_for_list_of_ts_dictionaries, NULL, THING_NO_SHOW},
{"DOMAIN", NULL, &Query_for_list_of_domains},
+ {"EVENT TRIGGER", NULL, NULL},
{"EXTENSION", Query_for_list_of_extensions},
{"FOREIGN DATA WRAPPER", NULL, NULL},
{"FOREIGN TABLE", NULL, NULL},
{
static const char *const list_ALTER[] =
{"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",
"ROLE", "RULE", "SCHEMA", "SERVER", "SEQUENCE", "SYSTEM SET", "TABLE",
"TABLESPACE", "TEXT SEARCH", "TRIGGER", "TYPE",
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 */
+ 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 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 */
else if (pg_strcasecmp(prev3_wd, "ALTER") == 0 &&
pg_strcasecmp(prev2_wd, "EXTENSION") == 0)
COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables, NULL);
/* ALTER TRIGGER ON */
- 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)
COMPLETE_WITH_CONST("RENAME TO");
pg_strcasecmp(prev_wd, "ON") == 0)
{
static const char *const list_COMMENT[] =
- {"CAST", "COLLATION", "CONVERSION", "DATABASE", "EXTENSION",
+ {"CAST", "COLLATION", "CONVERSION", "DATABASE", "EVENT TRIGGER", "EXTENSION",
"FOREIGN DATA WRAPPER", "FOREIGN TABLE",
"SERVER", "INDEX", "LANGUAGE", "RULE", "SCHEMA", "SEQUENCE",
"TABLE", "TYPE", "VIEW", "MATERIALIZED VIEW", "COLUMN", "AGGREGATE", "FUNCTION",
{
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 &&
pg_strcasecmp(prev3_wd, "ON") == 0) ||
(pg_strcasecmp(prev5_wd, "COMMENT") == 0 &&
pg_strcasecmp(prev_wd, "AS") == 0)
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 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 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 */
else if (pg_strcasecmp(prev2_wd, "DECLARE") == 0)
{
(pg_strcasecmp(prev4_wd, "DROP") == 0 &&
pg_strcasecmp(prev3_wd, "AGGREGATE") == 0 &&
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(prev4_wd, "FOREIGN") == 0 &&
pg_strcasecmp(prev3_wd, "DATA") == 0 &&
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 */
else if (pg_strcasecmp(prev_wd, "EXECUTE") == 0 &&
prev2_wd[0] == '\0')