From: Robert Haas Date: Wed, 23 Oct 2013 17:16:25 +0000 (-0400) Subject: Simplify tab completion rules for views and foreign tables. X-Git-Tag: REL9_4_BETA1~1021 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5c4dd2cd9a26cadb3e5234badf2a5eedf89423a2;p=postgresql Simplify tab completion rules for views and foreign tables. Since an increasing number of views and foreign tables are now able to be updated, complete with any table, view, or foreign table in the relevant contexts. This avoids the need to use a complex query that may be both confusing to end-users and nonperformant to construct the list of possible completions. Dean Rasheed, persuant to a complaint from Bernd Helme and a suggestion from Peter Eisentraut --- diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c index 84d2eb4d42..021b6c5a00 100644 --- a/src/bin/psql/tab-complete.c +++ b/src/bin/psql/tab-complete.c @@ -369,47 +369,12 @@ static const SchemaQuery Query_for_list_of_constraints_with_schema = { NULL }; -/* The bit masks for the following three functions come from - * src/include/catalog/pg_trigger.h. - */ -static const SchemaQuery Query_for_list_of_insertables = { - /* catname */ - "pg_catalog.pg_class c", - /* selcondition */ - "(c.relkind = 'r' OR (c.relkind = 'v' AND c.relhastriggers AND EXISTS " - "(SELECT 1 FROM pg_catalog.pg_trigger t WHERE t.tgrelid = c.oid AND t.tgtype & (1 << 2) <> 0)))", - /* viscondition */ - "pg_catalog.pg_table_is_visible(c.oid)", - /* namespace */ - "c.relnamespace", - /* result */ - "pg_catalog.quote_ident(c.relname)", - /* qualresult */ - NULL -}; - -static const SchemaQuery Query_for_list_of_deletables = { - /* catname */ - "pg_catalog.pg_class c", - /* selcondition */ - "(c.relkind = 'r' OR (c.relkind = 'v' AND c.relhastriggers AND EXISTS " - "(SELECT 1 FROM pg_catalog.pg_trigger t WHERE t.tgrelid = c.oid AND t.tgtype & (1 << 3) <> 0)))", - /* viscondition */ - "pg_catalog.pg_table_is_visible(c.oid)", - /* namespace */ - "c.relnamespace", - /* result */ - "pg_catalog.quote_ident(c.relname)", - /* qualresult */ - NULL -}; - +/* Relations supporting INSERT, UPDATE or DELETE */ static const SchemaQuery Query_for_list_of_updatables = { /* catname */ "pg_catalog.pg_class c", /* selcondition */ - "(c.relkind = 'r' OR (c.relkind = 'v' AND c.relhastriggers AND EXISTS " - "(SELECT 1 FROM pg_catalog.pg_trigger t WHERE t.tgrelid = c.oid AND t.tgtype & (1 << 4) <> 0)))", + "c.relkind IN ('r', 'f', 'v')", /* viscondition */ "pg_catalog.pg_table_is_visible(c.oid)", /* namespace */ @@ -2362,7 +2327,7 @@ psql_completion(char *text, int start, int end) /* Complete DELETE FROM with a list of tables */ else if (pg_strcasecmp(prev2_wd, "DELETE") == 0 && pg_strcasecmp(prev_wd, "FROM") == 0) - COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_deletables, NULL); + COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_updatables, NULL); /* Complete DELETE FROM */ else if (pg_strcasecmp(prev3_wd, "DELETE") == 0 && pg_strcasecmp(prev2_wd, "FROM") == 0) @@ -2732,7 +2697,7 @@ psql_completion(char *text, int start, int end) /* Complete INSERT INTO with table names */ else if (pg_strcasecmp(prev2_wd, "INSERT") == 0 && pg_strcasecmp(prev_wd, "INTO") == 0) - COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_insertables, NULL); + COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_updatables, NULL); /* Complete "INSERT INTO
(" with attribute names */ else if (pg_strcasecmp(prev4_wd, "INSERT") == 0 && pg_strcasecmp(prev3_wd, "INTO") == 0 &&