Improve tab-completion for DROP POLICY

Backpatch to 9.5.

Author: Pavel Stěhule
This commit is contained in:
Alvaro Herrera 2015-07-20 15:37:17 +02:00
parent f8d67ca8d4
commit 1a51180080
1 changed files with 25 additions and 1 deletions

View File

@ -742,6 +742,19 @@ static const SchemaQuery Query_for_list_of_matviews = {
" FROM pg_catalog.pg_tablesample_method "\
" WHERE substring(pg_catalog.quote_ident(tsmname),1,%d)='%s'"
#define Query_for_list_of_policies \
" SELECT pg_catalog.quote_ident(polname) "\
" FROM pg_catalog.pg_policy " \
" WHERE substring(pg_catalog.quote_ident(polname),1,%d)='%s'"
#define Query_for_list_of_tables_for_policy \
"SELECT pg_catalog.quote_ident(relname) "\
" FROM pg_catalog.pg_class"\
" WHERE (%d = pg_catalog.length('%s'))"\
" AND oid IN "\
" (SELECT polrelid FROM pg_catalog.pg_policy "\
" WHERE pg_catalog.quote_ident(polname)='%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.
@ -2891,15 +2904,26 @@ psql_completion(const char *text, int start, int end)
COMPLETE_WITH_QUERY(Query_for_list_of_event_triggers);
}
/* DROP POLICY <name> */
else if (pg_strcasecmp(prev2_wd, "DROP") == 0 &&
pg_strcasecmp(prev_wd, "POLICY") == 0)
{
COMPLETE_WITH_QUERY(Query_for_list_of_policies);
}
/* DROP POLICY <name> ON */
else if (pg_strcasecmp(prev3_wd, "DROP") == 0 &&
pg_strcasecmp(prev2_wd, "POLICY") == 0)
{
COMPLETE_WITH_CONST("ON");
}
/* DROP POLICY <name> ON <table> */
else if (pg_strcasecmp(prev4_wd, "DROP") == 0 &&
pg_strcasecmp(prev3_wd, "POLICY") == 0 &&
pg_strcasecmp(prev_wd, "ON") == 0)
COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables, NULL);
{
completion_info_charp = prev2_wd;
COMPLETE_WITH_QUERY(Query_for_list_of_tables_for_policy);
}
/* DROP RULE */
else if (pg_strcasecmp(prev3_wd, "DROP") == 0 &&