From 850076a343f8a084a34df71cfb187db417086d98 Mon Sep 17 00:00:00 2001 From: Fujii Masao Date: Sun, 27 Jul 2025 15:22:39 +0900 Subject: [PATCH v2] 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 with a file name - Completes GRANT/REVOKE ... LARGE with OBJECT - Completes ALTER DEFAULT PRIVILEGES GRANT/REVOKE ... LARGE with OBJECTS Author: Dagfinn Ilmari Mannsåker Reviewed-by: Fujii Masao 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 dbc586c5bc3..897773434b6 100644 --- a/src/bin/psql/tab-complete.in.c +++ b/src/bin/psql/tab-complete.in.c @@ -4542,13 +4542,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". */ @@ -4561,8 +4558,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")) @@ -5520,7 +5526,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)) { completion_charp = "\\"; completion_force_quote = false; -- 2.50.1