*** a/doc/src/sgml/fdwhandler.sgml
--- b/doc/src/sgml/fdwhandler.sgml
***************
*** 1323,1342 **** GetForeignTable(Oid relid);
- UserMapping *
- GetUserMappingById(Oid umid);
-
-
- This function returns the UserMapping object for
- the given user mapping OID. The OID of a user mapping for a foreign scan
- is available in the RelOptInfo.
- If there is no mapping for the OID, this function will throw an error.
- A UserMapping object contains properties of the
- user mapping (see foreign/foreign.h for details).
-
-
-
-
List *
GetForeignColumnOptions(Oid relid, AttrNumber attnum);
--- 1323,1328 ----
*** a/src/backend/foreign/foreign.c
--- b/src/backend/foreign/foreign.c
***************
*** 31,38 ****
extern Datum pg_options_to_table(PG_FUNCTION_ARGS);
extern Datum postgresql_fdw_validator(PG_FUNCTION_ARGS);
- static HeapTuple find_user_mapping(Oid userid, Oid serverid);
-
/*
* GetForeignDataWrapper - look up the foreign-data wrapper by OID.
--- 31,36 ----
***************
*** 161,214 **** GetForeignServerByName(const char *srvname, bool missing_ok)
return GetForeignServer(serverid);
}
- /*
- * GetUserMappingById - look up the user mapping by its OID.
- */
- UserMapping *
- GetUserMappingById(Oid umid)
- {
- Datum datum;
- HeapTuple tp;
- bool isnull;
- UserMapping *um;
-
- tp = SearchSysCache1(USERMAPPINGOID, ObjectIdGetDatum(umid));
- if (!HeapTupleIsValid(tp))
- elog(ERROR, "cache lookup failed for user mapping %u", umid);
-
- um = (UserMapping *) palloc(sizeof(UserMapping));
- um->umid = umid;
-
- /* Extract the umuser */
- datum = SysCacheGetAttr(USERMAPPINGOID,
- tp,
- Anum_pg_user_mapping_umuser,
- &isnull);
- Assert(!isnull);
- um->userid = DatumGetObjectId(datum);
-
- /* Extract the umserver */
- datum = SysCacheGetAttr(USERMAPPINGOID,
- tp,
- Anum_pg_user_mapping_umserver,
- &isnull);
- Assert(!isnull);
- um->serverid = DatumGetObjectId(datum);
-
- /* Extract the umoptions */
- datum = SysCacheGetAttr(USERMAPPINGOID,
- tp,
- Anum_pg_user_mapping_umoptions,
- &isnull);
- if (isnull)
- um->options = NIL;
- else
- um->options = untransformRelOptions(datum);
-
- ReleaseSysCache(tp);
-
- return um;
- }
/*
* GetUserMapping - look up the user mapping.
--- 159,164 ----
***************
*** 224,230 **** GetUserMapping(Oid userid, Oid serverid)
bool isnull;
UserMapping *um;
! tp = find_user_mapping(userid, serverid);
um = (UserMapping *) palloc(sizeof(UserMapping));
um->umid = HeapTupleGetOid(tp);
--- 174,196 ----
bool isnull;
UserMapping *um;
! tp = SearchSysCache2(USERMAPPINGUSERSERVER,
! ObjectIdGetDatum(userid),
! ObjectIdGetDatum(serverid));
!
! if (!HeapTupleIsValid(tp))
! {
! /* Not found for the specific user -- try PUBLIC */
! tp = SearchSysCache2(USERMAPPINGUSERSERVER,
! ObjectIdGetDatum(InvalidOid),
! ObjectIdGetDatum(serverid));
! }
!
! if (!HeapTupleIsValid(tp))
! ereport(ERROR,
! (errcode(ERRCODE_UNDEFINED_OBJECT),
! errmsg("user mapping not found for \"%s\"",
! MappingUserName(userid))));
um = (UserMapping *) palloc(sizeof(UserMapping));
um->umid = HeapTupleGetOid(tp);
***************
*** 246,305 **** GetUserMapping(Oid userid, Oid serverid)
return um;
}
- /*
- * GetUserMappingId - look up the user mapping, and return its OID
- *
- * If no mapping is found for the supplied user, we also look for
- * PUBLIC mappings (userid == InvalidOid).
- */
- Oid
- GetUserMappingId(Oid userid, Oid serverid)
- {
- HeapTuple tp;
- Oid umid;
-
- tp = find_user_mapping(userid, serverid);
-
- /* Extract the Oid */
- umid = HeapTupleGetOid(tp);
-
- ReleaseSysCache(tp);
-
- return umid;
- }
-
- /*
- * find_user_mapping - Guts of GetUserMapping family.
- *
- * If no mapping is found for the supplied user, we also look for
- * PUBLIC mappings (userid == InvalidOid).
- */
- static HeapTuple
- find_user_mapping(Oid userid, Oid serverid)
- {
- HeapTuple tp;
-
- tp = SearchSysCache2(USERMAPPINGUSERSERVER,
- ObjectIdGetDatum(userid),
- ObjectIdGetDatum(serverid));
-
- if (HeapTupleIsValid(tp))
- return tp;
-
- /* Not found for the specific user -- try PUBLIC */
- tp = SearchSysCache2(USERMAPPINGUSERSERVER,
- ObjectIdGetDatum(InvalidOid),
- ObjectIdGetDatum(serverid));
-
- if (!HeapTupleIsValid(tp))
- ereport(ERROR,
- (errcode(ERRCODE_UNDEFINED_OBJECT),
- errmsg("user mapping not found for \"%s\"",
- MappingUserName(userid))));
-
- return tp;
- }
-
/*
* GetForeignTable - look up the foreign table definition by relation oid.
--- 212,217 ----
*** a/src/include/foreign/foreign.h
--- b/src/include/foreign/foreign.h
***************
*** 72,79 **** typedef struct ForeignTable
extern ForeignServer *GetForeignServer(Oid serverid);
extern ForeignServer *GetForeignServerByName(const char *name, bool missing_ok);
extern UserMapping *GetUserMapping(Oid userid, Oid serverid);
- extern Oid GetUserMappingId(Oid userid, Oid serverid);
- extern UserMapping *GetUserMappingById(Oid umid);
extern ForeignDataWrapper *GetForeignDataWrapper(Oid fdwid);
extern ForeignDataWrapper *GetForeignDataWrapperByName(const char *name,
bool missing_ok);
--- 72,77 ----