Refactor to remove ForeignServerName().

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>
This commit is contained in:
Jeff Davis 2026-03-24 15:20:28 -07:00
parent f16f5d608c
commit 11f8018ee6
4 changed files with 20 additions and 42 deletions

View 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
{

View 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;

View 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));

View 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,