On Fri, Sep 03, 2021 at 08:27:55PM +0200, Daniel Gustafsson wrote: > > On 19 May 2021, at 09:53, Michael Paquier <mich...@paquier.xyz> wrote: > > > > On Tue, Apr 27, 2021 at 12:58:52PM +0300, Aleksander Alekseev wrote: > >> I've noticed there is no tab completion for ALTER TABLE xxx ADD. Here > >> is an alternative version of the patch that fixes this as well. Not > >> sure if this should be in the same commit though. > > > > - /* If we have ALTER TABLE <sth> DROP, provide COLUMN or CONSTRAINT */ > > - else if (Matches("ALTER", "TABLE", MatchAny, "DROP")) > > + /* If we have ALTER TABLE <sth> ADD|DROP, provide COLUMN or CONSTRAINT > > */ > > + else if (Matches("ALTER", "TABLE", MatchAny, "ADD|DROP")) > > Seems to me that the behavior to not complete with COLUMN or > > CONSTRAINT for ADD is intentional, as it is possible to specify a > > constraint or column name without the object type first. This > > introduces a inconsistent behavior with what we do for columns with > > ADD, for one. So a more consistent approach would be to list columns, > > constraints, COLUMN and CONSTRAINT in the list of options available > > after ADD. > > > > + else if (Matches("ALTER", "TABLE", MatchAny, "VALIDATE", "CONSTRAINT")) > > + { > > + completion_info_charp = prev3_wd; > > + COMPLETE_WITH_QUERY(Query_for_nonvalid_constraint_of_table); > > + } > > Specifying valid constraints is an authorized grammar, so it does not > > seem that bad to keep things as they are, either. I would leave that > > alone. > > This has stalled being marked Waiting on Author since May, and reading the > above it sounds like marking it Returned with Feedback is the logical next > step > (patch also no longer applies).
Please find attached the next revision :) Best, David. -- David Fetter <david(at)fetter(dot)org> http://fetter.org/ Phone: +1 415 235 3778 Remember to vote! Consider donating to Postgres: http://www.postgresql.org/about/donate
>From 716e9dde96ef9973fc6b0fc9ca9934df153af9da Mon Sep 17 00:00:00 2001 From: David Fetter <david.fet...@aiven.io> Date: Tue, 14 Sep 2021 15:28:34 -0700 Subject: [PATCH v4] psql: Fix tab completion for ALTER TABLE... ... VALIDATE CONSTRAINT. Completions now include only constraints which have not yet been validated. --- src/bin/psql/tab-complete.c | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git src/bin/psql/tab-complete.c src/bin/psql/tab-complete.c index 5cd5838668..b55166aa64 100644 --- src/bin/psql/tab-complete.c +++ src/bin/psql/tab-complete.c @@ -788,6 +788,15 @@ Query_for_index_of_table \ " and pg_catalog.quote_ident(c1.relname)='%s'"\ " and pg_catalog.pg_table_is_visible(c1.oid)" +/* the silly-looking length condition is just to eat up the current word */ +#define Query_for_constraint_of_table_not_validated \ +"SELECT pg_catalog.quote_ident(conname) "\ +" FROM pg_catalog.pg_class c1, pg_catalog.pg_constraint con "\ +" WHERE c1.oid=conrelid and (%d = pg_catalog.length('%s'))"\ +" and pg_catalog.quote_ident(c1.relname)='%s'"\ +" and pg_catalog.pg_table_is_visible(c1.oid)" \ +" and NOT con.convalidated" + #define Query_for_all_table_constraints \ "SELECT pg_catalog.quote_ident(conname) "\ " FROM pg_catalog.pg_constraint c "\ @@ -2145,14 +2154,22 @@ psql_completion(const char *text, int start, int end) COMPLETE_WITH_ATTR(prev3_wd, ""); /* - * If we have ALTER TABLE <sth> ALTER|DROP|RENAME|VALIDATE CONSTRAINT, + * If we have ALTER TABLE <sth> ALTER|DROP|RENAME CONSTRAINT, * provide list of constraints */ - else if (Matches("ALTER", "TABLE", MatchAny, "ALTER|DROP|RENAME|VALIDATE", "CONSTRAINT")) + else if (Matches("ALTER", "TABLE", MatchAny, "ALTER|DROP|RENAME", "CONSTRAINT")) { completion_info_charp = prev3_wd; COMPLETE_WITH_QUERY(Query_for_constraint_of_table); } + /* + * ALTER TABLE <sth> VALIDATE CONSTRAINT <non-validated constraint> + */ + else if (Matches("ALTER", "TABLE", MatchAny, "VALIDATE", "CONSTRAINT")) + { + completion_info_charp = prev3_wd; + COMPLETE_WITH_QUERY(Query_for_constraint_of_table_not_validated); + } /* ALTER TABLE ALTER [COLUMN] <foo> */ else if (Matches("ALTER", "TABLE", MatchAny, "ALTER", "COLUMN", MatchAny) || Matches("ALTER", "TABLE", MatchAny, "ALTER", MatchAny)) -- 2.31.1