1 /*-------------------------------------------------------------------------
2  *
3  * foreign.h
4  *	  support for foreign-data wrappers, servers and user mappings.
5  *
6  *
7  * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group
8  *
9  * src/include/foreign/foreign.h
10  *
11  *-------------------------------------------------------------------------
12  */
13 #ifndef FOREIGN_H
14 #define FOREIGN_H
15 
16 #include "nodes/parsenodes.h"
17 
18 
19 /* Helper for obtaining username for user mapping */
20 #define MappingUserName(userid) \
21 	(OidIsValid(userid) ? GetUserNameFromId(userid, false) : "public")
22 
23 
24 typedef struct ForeignDataWrapper
25 {
26 	Oid			fdwid;			/* FDW Oid */
27 	Oid			owner;			/* FDW owner user Oid */
28 	char	   *fdwname;		/* Name of the FDW */
29 	Oid			fdwhandler;		/* Oid of handler function, or 0 */
30 	Oid			fdwvalidator;	/* Oid of validator function, or 0 */
31 	List	   *options;		/* fdwoptions as DefElem list */
32 } ForeignDataWrapper;
33 
34 typedef struct ForeignServer
35 {
36 	Oid			serverid;		/* server Oid */
37 	Oid			fdwid;			/* foreign-data wrapper */
38 	Oid			owner;			/* server owner user Oid */
39 	char	   *servername;		/* name of the server */
40 	char	   *servertype;		/* server type, optional */
41 	char	   *serverversion;	/* server version, optional */
42 	List	   *options;		/* srvoptions as DefElem list */
43 } ForeignServer;
44 
45 typedef struct UserMapping
46 {
47 	Oid			umid;			/* Oid of user mapping */
48 	Oid			userid;			/* local user Oid */
49 	Oid			serverid;		/* server Oid */
50 	List	   *options;		/* useoptions as DefElem list */
51 } UserMapping;
52 
53 typedef struct ForeignTable
54 {
55 	Oid			relid;			/* relation Oid */
56 	Oid			serverid;		/* server Oid */
57 	List	   *options;		/* ftoptions as DefElem list */
58 } ForeignTable;
59 
60 /* Flags for GetForeignServerExtended */
61 #define FSV_MISSING_OK	0x01
62 
63 /* Flags for GetForeignDataWrapperExtended */
64 #define FDW_MISSING_OK	0x01
65 
66 
67 extern ForeignServer *GetForeignServer(Oid serverid);
68 extern ForeignServer *GetForeignServerExtended(Oid serverid,
69 											   bits16 flags);
70 extern ForeignServer *GetForeignServerByName(const char *name, bool missing_ok);
71 extern UserMapping *GetUserMapping(Oid userid, Oid serverid);
72 extern ForeignDataWrapper *GetForeignDataWrapper(Oid fdwid);
73 extern ForeignDataWrapper *GetForeignDataWrapperExtended(Oid fdwid,
74 														 bits16 flags);
75 extern ForeignDataWrapper *GetForeignDataWrapperByName(const char *name,
76 													   bool missing_ok);
77 extern ForeignTable *GetForeignTable(Oid relid);
78 
79 extern List *GetForeignColumnOptions(Oid relid, AttrNumber attnum);
80 
81 extern Oid	get_foreign_data_wrapper_oid(const char *fdwname, bool missing_ok);
82 extern Oid	get_foreign_server_oid(const char *servername, bool missing_ok);
83 
84 #endif							/* FOREIGN_H */
85