if (OidIsValid(subform->subserver))
{
AclResult aclresult;
+ ForeignServer *server;
+
+ server = GetForeignServer(subform->subserver);
/* recheck ACL if requested */
if (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
{
GetUserMapping(owner, server->serverid);
serverid = server->serverid;
- conninfo = ForeignServerConnectionString(owner, serverid);
+ conninfo = ForeignServerConnectionString(owner, server);
}
else
{
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);
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)
*/
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
{
*/
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;
}
-/*
- * 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.
*/
* 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))
connection_datum = OidFunctionCall3(fdw->fdwconnection,
ObjectIdGetDatum(userid),
- ObjectIdGetDatum(serverid),
+ ObjectIdGetDatum(server->serverid),
PointerGetDatum(NULL));
return text_to_cstring(DatumGetTextPP(connection_datum));
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,