v3-0001-psql-Improve-tab-completion-for-large-object.patch
application/octet-stream
Filename: v3-0001-psql-Improve-tab-completion-for-large-object.patch
Type: application/octet-stream
Part: 0
Message:
Re: Tab completion for large objects
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: format-patch
Series: patch v3-0001
Subject: psql: Improve tab completion for large object.
| File | + | − |
|---|---|---|
| src/bin/psql/tab-complete.in.c | 12 | 5 |
From 45e99e7510081fd31fcc2d0b9c2c504bb082f893 Mon Sep 17 00:00:00 2001
From: Fujii Masao <fujii@postgresql.org>
Date: Thu, 23 Oct 2025 14:41:45 +0900
Subject: [PATCH v3] psql: Improve tab completion for large object.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
This commit enhances psql's tab completion support for a large object:
- Completes \lo_export <oid> with a file name
- Completes GRANT/REVOKE ... LARGE with OBJECT
- Completes ALTER DEFAULT PRIVILEGES GRANT/REVOKE ... LARGE with OBJECTS
Author: Dagfinn Ilmari Mannsåker <ilmari@ilmari.org>
Reviewed-by: Fujii Masao <masao.fujii@gmail.com>
Discussion: https://postgr.es/m/87y0syikki.fsf@wibble.ilmari.org
---
src/bin/psql/tab-complete.in.c | 17 ++++++++++++-----
1 file changed, 12 insertions(+), 5 deletions(-)
diff --git a/src/bin/psql/tab-complete.in.c b/src/bin/psql/tab-complete.in.c
index ad37f9f6ed0..00bd7d50e7b 100644
--- a/src/bin/psql/tab-complete.in.c
+++ b/src/bin/psql/tab-complete.in.c
@@ -4553,13 +4553,10 @@ match_previous_words(int pattern_id,
"ROUTINES IN SCHEMA",
"SEQUENCES IN SCHEMA",
"TABLES IN SCHEMA");
- else if (TailMatches("GRANT|REVOKE", MatchAny, "ON", "FOREIGN") ||
- TailMatches("REVOKE", "GRANT", "OPTION", "FOR", MatchAny, "ON", "FOREIGN"))
- COMPLETE_WITH("DATA WRAPPER", "SERVER");
/*
* Complete "GRANT/REVOKE * ON DATABASE/DOMAIN/..." with a list of
- * appropriate objects.
+ * appropriate objects or keywords.
*
* Complete "GRANT/REVOKE * ON *" with "TO/FROM".
*/
@@ -4572,8 +4569,17 @@ match_previous_words(int pattern_id,
COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_domains);
else if (TailMatches("FUNCTION"))
COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_functions);
+ else if (TailMatches("FOREIGN"))
+ COMPLETE_WITH("DATA WRAPPER", "SERVER");
else if (TailMatches("LANGUAGE"))
COMPLETE_WITH_QUERY(Query_for_list_of_languages);
+ else if (TailMatches("LARGE"))
+ {
+ if (HeadMatches("ALTER", "DEFAULT", "PRIVILEGES"))
+ COMPLETE_WITH("OBJECTS");
+ else
+ COMPLETE_WITH("OBJECT");
+ }
else if (TailMatches("PROCEDURE"))
COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_procedures);
else if (TailMatches("ROUTINE"))
@@ -5531,7 +5537,8 @@ match_previous_words(int pattern_id,
COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_views);
else if (TailMatchesCS("\\cd|\\e|\\edit|\\g|\\gx|\\i|\\include|"
"\\ir|\\include_relative|\\o|\\out|"
- "\\s|\\w|\\write|\\lo_import"))
+ "\\s|\\w|\\write|\\lo_import") ||
+ TailMatchesCS("\\lo_export", MatchAny))
COMPLETE_WITH_FILES("\\", false);
/* gen_tabcomplete.pl ends special processing here */
--
2.50.1