]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Refactor to remove ForeignServerName().
authorJeff Davis <jdavis@postgresql.org>
Tue, 24 Mar 2026 22:20:28 +0000 (15:20 -0700)
committerJeff Davis <jdavis@postgresql.org>
Tue, 24 Mar 2026 22:20:28 +0000 (15:20 -0700)
Callers either have a ForeignServer object or can readily construct
one.

Discussion: https://postgr.es/m/CAExHW5vV5znEvecX=ra2-v7UBj9-M6qvdDzuB78M-TxbYD1PEA@mail.gmail.com
Suggested-by: Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>
src/backend/catalog/pg_subscription.c
src/backend/commands/subscriptioncmds.c
src/backend/foreign/foreign.c
src/include/foreign/foreign.h

index 61171c7079c0173f7d11084ed73a59ec960d93a1..5a733585490c4911a8f8f9b1be767a57e253b6f7 100644 (file)
@@ -123,6 +123,9 @@ GetSubscription(Oid subid, bool missing_ok, bool aclcheck)
        if (OidIsValid(subform->subserver))
        {
                AclResult       aclresult;
+               ForeignServer *server;
+
+               server = GetForeignServer(subform->subserver);
 
                /* recheck ACL if requested */
                if (aclcheck)
@@ -136,11 +139,11 @@ GetSubscription(Oid subid, bool missing_ok, bool aclcheck)
                                                (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
                                                 errmsg("subscription owner \"%s\" does not have permission on foreign server \"%s\"",
                                                                GetUserNameFromId(subform->subowner, false),
-                                                               ForeignServerName(subform->subserver))));
+                                                               server->servername)));
                }
 
                sub->conninfo = ForeignServerConnectionString(subform->subowner,
-                                                                                                         subform->subserver);
+                                                                                                         server);
        }
        else
        {
index 724637cff5bd4ab68dc0ea1f64b686b1ae35d10c..7375e214cb4c16ea11e0f7e28020ef04e05cd0e3 100644 (file)
@@ -753,7 +753,7 @@ CreateSubscription(ParseState *pstate, CreateSubscriptionStmt *stmt,
                GetUserMapping(owner, server->serverid);
 
                serverid = server->serverid;
-               conninfo = ForeignServerConnectionString(owner, serverid);
+               conninfo = ForeignServerConnectionString(owner, server);
        }
        else
        {
@@ -1841,13 +1841,13 @@ AlterSubscription(ParseState *pstate, AlterSubscriptionStmt *stmt,
                                                        errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
                                                        errmsg("subscription owner \"%s\" does not have permission on foreign server \"%s\"",
                                                                   GetUserNameFromId(form->subowner, false),
-                                                                  ForeignServerName(new_server->serverid)));
+                                                                  new_server->servername));
 
                                /* make sure a user mapping exists */
                                GetUserMapping(form->subowner, new_server->serverid);
 
                                conninfo = ForeignServerConnectionString(form->subowner,
-                                                                                                                new_server->serverid);
+                                                                                                                new_server);
 
                                /* Load the library providing us libpq calls. */
                                load_file("libpqwalreceiver", false);
@@ -2250,7 +2250,9 @@ DropSubscription(DropSubscriptionStmt *stmt, bool isTopLevel)
        if (OidIsValid(form->subserver))
        {
                AclResult       aclresult;
+               ForeignServer *server;
 
+               server = GetForeignServer(form->subserver);
                aclresult = object_aclcheck(ForeignServerRelationId, form->subserver,
                                                                        form->subowner, ACL_USAGE);
                if (aclresult != ACLCHECK_OK)
@@ -2263,12 +2265,12 @@ DropSubscription(DropSubscriptionStmt *stmt, bool isTopLevel)
                         */
                        err = psprintf(_("subscription owner \"%s\" does not have permission on foreign server \"%s\""),
                                                   GetUserNameFromId(form->subowner, false),
-                                                  ForeignServerName(form->subserver));
+                                                  server->servername);
                        conninfo = NULL;
                }
                else
                        conninfo = ForeignServerConnectionString(form->subowner,
-                                                                                                        form->subserver);
+                                                                                                        server);
        }
        else
        {
@@ -2593,18 +2595,18 @@ AlterSubscriptionOwner_internal(Relation rel, HeapTuple tup, Oid newOwnerId)
         */
        if (OidIsValid(form->subserver))
        {
-               Oid                     serverid = form->subserver;
+               ForeignServer *server = GetForeignServer(form->subserver);
 
-               aclresult = object_aclcheck(ForeignServerRelationId, serverid, newOwnerId, ACL_USAGE);
+               aclresult = object_aclcheck(ForeignServerRelationId, server->serverid, newOwnerId, ACL_USAGE);
                if (aclresult != ACLCHECK_OK)
                        ereport(ERROR,
                                        errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
                                        errmsg("new subscription owner \"%s\" does not have permission on foreign server \"%s\"",
                                                   GetUserNameFromId(newOwnerId, false),
-                                                  ForeignServerName(serverid)));
+                                                  server->servername));
 
                /* make sure a user mapping exists */
-               GetUserMapping(newOwnerId, serverid);
+               GetUserMapping(newOwnerId, server->serverid);
        }
 
        form->subowner = newOwnerId;
index 1b53ca306a031f04f076d63db0252b2823d9bceb..005282f17f6cb16b7d07ad30bfd4ec572d2c2d48 100644 (file)
@@ -178,31 +178,6 @@ GetForeignServerExtended(Oid serverid, bits16 flags)
 }
 
 
-/*
- * ForeignServerName - get name of foreign server.
- */
-char *
-ForeignServerName(Oid serverid)
-{
-       Form_pg_foreign_server serverform;
-       char       *servername;
-       HeapTuple       tp;
-
-       tp = SearchSysCache1(FOREIGNSERVEROID, ObjectIdGetDatum(serverid));
-
-       if (!HeapTupleIsValid(tp))
-               elog(ERROR, "cache lookup failed for foreign server %u", serverid);
-
-       serverform = (Form_pg_foreign_server) GETSTRUCT(tp);
-
-       servername = pstrdup(NameStr(serverform->srvname));
-
-       ReleaseSysCache(tp);
-
-       return servername;
-}
-
-
 /*
  * GetForeignServerByName - look up the foreign server definition by name.
  */
@@ -224,13 +199,11 @@ GetForeignServerByName(const char *srvname, bool missing_ok)
  * NB: leaks into CurrentMemoryContext.
  */
 char *
-ForeignServerConnectionString(Oid userid, Oid serverid)
+ForeignServerConnectionString(Oid userid, ForeignServer *server)
 {
-       ForeignServer *server;
        ForeignDataWrapper *fdw;
        Datum           connection_datum;
 
-       server = GetForeignServer(serverid);
        fdw = GetForeignDataWrapper(server->fdwid);
 
        if (!OidIsValid(fdw->fdwconnection))
@@ -242,7 +215,7 @@ ForeignServerConnectionString(Oid userid, Oid serverid)
 
        connection_datum = OidFunctionCall3(fdw->fdwconnection,
                                                                                ObjectIdGetDatum(userid),
-                                                                               ObjectIdGetDatum(serverid),
+                                                                               ObjectIdGetDatum(server->serverid),
                                                                                PointerGetDatum(NULL));
 
        return text_to_cstring(DatumGetTextPP(connection_datum));
index 65ed9a7f9870a68453d1dfe1379cdbaa10d1e1f8..564c3cc1b7f54afb0c2657dce9345bc904eeb7ad 100644 (file)
@@ -66,12 +66,12 @@ typedef struct ForeignTable
 
 
 extern ForeignServer *GetForeignServer(Oid serverid);
-extern char *ForeignServerName(Oid serverid);
 extern ForeignServer *GetForeignServerExtended(Oid serverid,
                                                                                           bits16 flags);
 extern ForeignServer *GetForeignServerByName(const char *srvname,
                                                                                         bool missing_ok);
-extern char *ForeignServerConnectionString(Oid userid, Oid serverid);
+extern char *ForeignServerConnectionString(Oid userid,
+                                                                                  ForeignServer *server);
 extern UserMapping *GetUserMapping(Oid userid, Oid serverid);
 extern ForeignDataWrapper *GetForeignDataWrapper(Oid fdwid);
 extern ForeignDataWrapper *GetForeignDataWrapperExtended(Oid fdwid,