mirror of
https://github.com/postgres/postgres.git
synced 2026-03-27 12:54:24 -04:00
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:
parent
f16f5d608c
commit
11f8018ee6
4 changed files with 20 additions and 42 deletions
|
|
@ -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
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Reference in a new issue