v1-0001-Add-tab-completion-for-DELETE-USING.patch
application/octet-stream
Filename: v1-0001-Add-tab-completion-for-DELETE-USING.patch
Type: application/octet-stream
Part: 0
From a7d1fd0c316086847693e7f780a8199f7f44c120 Mon Sep 17 00:00:00 2001
From: TatsuyaKawata <kawatatatsuya0913@gmail.com>
Date: Fri, 26 Dec 2025 00:33:34 +0900
Subject: [PATCH v1] Add tab completion for DELETE USING
This implements the tab completion that was marked as XXX TODO in the
source code. The following completions are now supported:
- DELETE FROM <table> USING <TAB> -> list of tables
- DELETE FROM <table> USING <table> <TAB> -> AS, WHERE
- DELETE FROM <table> USING <table> AS <alias> <TAB> -> WHERE
- DELETE FROM <table> USING <table> <alias> <TAB> -> WHERE
---
src/bin/psql/t/010_tab_completion.pl | 30 ++++++++++++++++++++++++++++
src/bin/psql/tab-complete.in.c | 13 +++++++++++-
2 files changed, 42 insertions(+), 1 deletion(-)
diff --git a/src/bin/psql/t/010_tab_completion.pl b/src/bin/psql/t/010_tab_completion.pl
index fa7427af8c5..9e3e92f42a2 100644
--- a/src/bin/psql/t/010_tab_completion.pl
+++ b/src/bin/psql/t/010_tab_completion.pl
@@ -423,6 +423,36 @@ 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();
+
+# some versions of readline/libedit require two tabs here, some only need one
+check_completion(
+ "DELETE FROM tab1 USING mytab123 \t\t",
+ qr/AS +WHERE/,
+ "complete DELETE FROM tab USING tab with AS or WHERE");
+
+clear_query();
+
+check_completion(
+ "DELETE FROM tab1 USING mytab123 AS a \t",
+ qr/WHERE /,
+ "complete DELETE FROM tab USING tab AS alias with WHERE");
+
+clear_query();
+
+check_completion(
+ "DELETE FROM tab1 USING mytab123 a \t",
+ qr/WHERE /,
+ "complete DELETE FROM tab USING tab alias with WHERE");
+
+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 ab2712216b5..964da197ec6 100644
--- a/src/bin/psql/tab-complete.in.c
+++ b/src/bin/psql/tab-complete.in.c
@@ -4254,7 +4254,18 @@ match_previous_words(int pattern_id,
/* Complete DELETE FROM <table> */
else if (TailMatches("DELETE", "FROM", MatchAny))
COMPLETE_WITH("USING", "WHERE");
- /* XXX: implement tab completion for DELETE ... USING */
+ /* Complete DELETE FROM <table> USING with a list of tables */
+ else if (TailMatches("DELETE", "FROM", MatchAny, "USING"))
+ COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
+ /* Complete DELETE FROM <table> USING <table> */
+ else if (TailMatches("DELETE", "FROM", MatchAny, "USING", MatchAny))
+ COMPLETE_WITH("AS", "WHERE");
+ /* Complete DELETE FROM <table> USING <table> AS <alias> */
+ else if (TailMatches("DELETE", "FROM", MatchAny, "USING", MatchAny, "AS", MatchAny))
+ COMPLETE_WITH("WHERE");
+ /* Complete DELETE FROM <table> USING <table> <alias> (without AS) */
+ else if (TailMatches("DELETE", "FROM", MatchAny, "USING", MatchAny, MatchAnyExcept("AS|WHERE")))
+ COMPLETE_WITH("WHERE");
/* DISCARD */
else if (Matches("DISCARD"))
--
2.34.1