MCPcopy Create free account
hub / github.com/apache/cloudberry / GetFdwRoutineByServerId

Function GetFdwRoutineByServerId

src/backend/foreign/foreign.c:630–665  ·  view source on GitHub ↗

* GetFdwRoutineByServerId - look up the handler of the foreign-data wrapper * for the given foreign server, and retrieve its FdwRoutine struct. */

Source from the content-addressed store, hash-verified

628 * for the given foreign server, and retrieve its FdwRoutine struct.
629 */
630FdwRoutine *
631GetFdwRoutineByServerId(Oid serverid)
632{
633 HeapTuple tp;
634 Form_pg_foreign_data_wrapper fdwform;
635 Form_pg_foreign_server serverform;
636 Oid fdwid;
637 Oid fdwhandler;
638
639 /* Get foreign-data wrapper OID for the server. */
640 tp = SearchSysCache1(FOREIGNSERVEROID, ObjectIdGetDatum(serverid));
641 if (!HeapTupleIsValid(tp))
642 elog(ERROR, "cache lookup failed for foreign server %u", serverid);
643 serverform = (Form_pg_foreign_server) GETSTRUCT(tp);
644 fdwid = serverform->srvfdw;
645 ReleaseSysCache(tp);
646
647 /* Get handler function OID for the FDW. */
648 tp = SearchSysCache1(FOREIGNDATAWRAPPEROID, ObjectIdGetDatum(fdwid));
649 if (!HeapTupleIsValid(tp))
650 elog(ERROR, "cache lookup failed for foreign-data wrapper %u", fdwid);
651 fdwform = (Form_pg_foreign_data_wrapper) GETSTRUCT(tp);
652 fdwhandler = fdwform->fdwhandler;
653
654 /* Complain if FDW has been set to NO HANDLER. */
655 if (!OidIsValid(fdwhandler))
656 ereport(ERROR,
657 (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
658 errmsg("foreign-data wrapper \"%s\" has no handler",
659 NameStr(fdwform->fdwname))));
660
661 ReleaseSysCache(tp);
662
663 /* And finally, call the handler function. */
664 return GetFdwRoutine(fdwhandler);
665}
666
667
668/*

Callers 4

ExecuteTruncateGutsFunction · 0.85
truncate_check_relFunction · 0.85
GetFdwRoutineByRelIdFunction · 0.85

Calls 6

SearchSysCache1Function · 0.85
ObjectIdGetDatumFunction · 0.85
ReleaseSysCacheFunction · 0.85
GetFdwRoutineFunction · 0.85
errcodeFunction · 0.50
errmsgFunction · 0.50

Tested by

no test coverage detected