]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
psql: Improve psql tab completion for GRANT/REVOKE on large objects.
authorFujii Masao <fujii@postgresql.org>
Wed, 9 Jul 2025 11:33:50 +0000 (20:33 +0900)
committerFujii Masao <fujii@postgresql.org>
Wed, 9 Jul 2025 11:33:50 +0000 (20:33 +0900)
This commit enhances psql's tab completion to support TO/FROM
after "GRANT/REVOKE ... ON LARGE OBJECT ...". Additionally,
since "ALTER DEFAULT PRIVILEGES" now supports large objects,
tab completion is also updated for "GRANT/REVOKE ... ON LARGE OBJECTS"
with TO/FROM.

Author: Fujii Masao <masao.fujii@gmail.com>
Reviewed-by: Yugo Nagata <nagata@sraoss.co.jp>
Discussion: https://postgr.es/m/ade0ab29-777f-47f6-9d0d-1af67728a86e@oss.nttdata.com

src/bin/psql/tab-complete.in.c

index 53e7d35fe98d3642e5529d6a6d8ff54e796f8459..13db65234487608f18c9d611b3e9058459f49ba6 100644 (file)
@@ -4624,6 +4624,26 @@ match_previous_words(int pattern_id,
                        COMPLETE_WITH("FROM");
        }
 
+       /* Complete "GRANT/REVOKE * ON LARGE OBJECT *" with TO/FROM */
+       else if (TailMatches("GRANT|REVOKE", MatchAny, "ON", "LARGE", "OBJECT", MatchAny) ||
+                        TailMatches("REVOKE", "GRANT", "OPTION", "FOR", MatchAny, "ON", "LARGE", "OBJECT", MatchAny))
+       {
+               if (TailMatches("GRANT", MatchAny, MatchAny, MatchAny, MatchAny, MatchAny))
+                       COMPLETE_WITH("TO");
+               else
+                       COMPLETE_WITH("FROM");
+       }
+
+       /* Complete "GRANT/REVOKE * ON LARGE OBJECTS" with TO/FROM */
+       else if (TailMatches("GRANT|REVOKE", MatchAny, "ON", "LARGE", "OBJECTS") ||
+                        TailMatches("REVOKE", "GRANT", "OPTION", "FOR", MatchAny, "ON", "LARGE", "OBJECTS"))
+       {
+               if (TailMatches("GRANT", MatchAny, MatchAny, MatchAny, MatchAny))
+                       COMPLETE_WITH("TO");
+               else
+                       COMPLETE_WITH("FROM");
+       }
+
 /* GROUP BY */
        else if (TailMatches("FROM", MatchAny, "GROUP"))
                COMPLETE_WITH("BY");