1 /*-------------------------------------------------------------------------
4 * support for foreign-data wrappers, servers and user mappings.
7 * Portions Copyright (c) 1996-2014, PostgreSQL Global Development Group
9 * src/include/foreign/foreign.h
11 *-------------------------------------------------------------------------
16 #include "nodes/parsenodes.h"
19 /* Helper for obtaining username for user mapping */
20 #define MappingUserName(userid) \
21 (OidIsValid(userid) ? GetUserNameFromId(userid) : "public")
25 * Generic option types for validation.
26 * NB! Thes are treated as flags, so use only powers of two here.
30 ServerOpt = 1, /* options applicable to SERVER */
31 UserMappingOpt = 2, /* options for USER MAPPING */
32 FdwOpt = 4 /* options for FOREIGN DATA WRAPPER */
35 typedef struct ForeignDataWrapper
37 Oid fdwid; /* FDW Oid */
38 Oid owner; /* FDW owner user Oid */
39 char *fdwname; /* Name of the FDW */
40 Oid fdwhandler; /* Oid of handler function, or 0 */
41 Oid fdwvalidator; /* Oid of validator function, or 0 */
42 List *options; /* fdwoptions as DefElem list */
45 typedef struct ForeignServer
47 Oid serverid; /* server Oid */
48 Oid fdwid; /* foreign-data wrapper */
49 Oid owner; /* server owner user Oid */
50 char *servername; /* name of the server */
51 char *servertype; /* server type, optional */
52 char *serverversion; /* server version, optional */
53 List *options; /* srvoptions as DefElem list */
56 typedef struct UserMapping
58 Oid userid; /* local user Oid */
59 Oid serverid; /* server Oid */
60 List *options; /* useoptions as DefElem list */
63 typedef struct ForeignTable
65 Oid relid; /* relation Oid */
66 Oid serverid; /* server Oid */
67 List *options; /* ftoptions as DefElem list */
71 extern ForeignServer *GetForeignServer(Oid serverid);
72 extern ForeignServer *GetForeignServerByName(const char *name, bool missing_ok);
73 extern UserMapping *GetUserMapping(Oid userid, Oid serverid);
74 extern ForeignDataWrapper *GetForeignDataWrapper(Oid fdwid);
75 extern ForeignDataWrapper *GetForeignDataWrapperByName(const char *name,
77 extern ForeignTable *GetForeignTable(Oid relid);
79 extern List *GetForeignColumnOptions(Oid relid, AttrNumber attnum);
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);
84 #endif /* FOREIGN_H */