diff options
author | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2015-07-20 15:37:17 +0200 |
---|---|---|
committer | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2015-07-20 15:37:17 +0200 |
commit | 691c32f69a7efd6af9cda100c7e5ebf3b0c1937c (patch) | |
tree | 2dee99681eeb7399ed5ac4d11a37bd4afa90f30d | |
parent | b0b6f8d71f03463854576b30c1b01e5d772076d8 (diff) | |
download | postgresql-691c32f69a7efd6af9cda100c7e5ebf3b0c1937c.tar.gz postgresql-691c32f69a7efd6af9cda100c7e5ebf3b0c1937c.zip |
Improve tab-completion for DROP POLICY
Backpatch to 9.5.
Author: Pavel Stěhule
-rw-r--r-- | src/bin/psql/tab-complete.c | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c index 4fd1dba6515..b2d627f471b 100644 --- a/src/bin/psql/tab-complete.c +++ b/src/bin/psql/tab-complete.c @@ -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 && |