From d8d90d11d195ed0045ae807918e09cd53af5c158 Mon Sep 17 00:00:00 2001 From: TatsuyaKawata Date: Sat, 28 Feb 2026 13:13:34 +0900 Subject: [PATCH v4] Add tab completion for DELETE ... USING This implements the tab completion that was marked as XXX TODO in the source code. The following completion is now supported: - DELETE FROM USING -> list of selectables This uses Query_for_list_of_selectables (instead of Query_for_list_of_tables) because the USING clause can reference not only tables but also views and other selectable objects, following the same syntax as the FROM clause of a SELECT statement. Author: Tatsuya Kawata Reviewed-by: Chao Li Reviewed-by: Kirill Reshke Reviewed-by: Soumya S Murali Reviewed-by: Fujii Masao Discussion: https://www.postgresql.org/message-id/flat/CAHza6qf0CLJuJr+5cQw0oWNebM5VyMB-ghoKBgnEjOQ_JtAiuw@mail.gmail.com --- src/bin/psql/t/010_tab_completion.pl | 8 ++++++++ src/bin/psql/tab-complete.in.c | 4 +++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/bin/psql/t/010_tab_completion.pl b/src/bin/psql/t/010_tab_completion.pl index 1d2e5f5b92a..fd2dcbf1ac1 100644 --- a/src/bin/psql/t/010_tab_completion.pl +++ b/src/bin/psql/t/010_tab_completion.pl @@ -422,6 +422,14 @@ check_completion( clear_line(); +# check DELETE ... USING completion +check_completion( + "DELETE FROM tab1 USING my\t", + qr/mytab/, + "complete DELETE FROM tab USING with table name"); + +clear_query(); + # send psql an explicit \q to shut it down, else pty won't close properly $h->quit or die "psql returned $?"; diff --git a/src/bin/psql/tab-complete.in.c b/src/bin/psql/tab-complete.in.c index b2dba6d10ab..ff041746619 100644 --- a/src/bin/psql/tab-complete.in.c +++ b/src/bin/psql/tab-complete.in.c @@ -4266,7 +4266,9 @@ match_previous_words(int pattern_id, /* Complete DELETE FROM
*/ else if (TailMatches("DELETE", "FROM", MatchAny)) COMPLETE_WITH("USING", "WHERE"); - /* XXX: implement tab completion for DELETE ... USING */ + /* Complete DELETE FROM
USING with a list of selectables */ + else if (TailMatches("DELETE", "FROM", MatchAny, "USING")) + COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_selectables); /* DISCARD */ else if (Matches("DISCARD")) -- 2.34.1