psql: Improve psql tab completion for GRANT/REVOKE on large objects.
authorFujii Masao <[email protected]>
Wed, 9 Jul 2025 11:33:50 +0000 (20:33 +0900)
committerFujii Masao <[email protected]>
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 <[email protected]>
Reviewed-by: Yugo Nagata <[email protected]>
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");