*** 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 ----