1 /*------------------------------------------------------------------------- 2 * 3 * foreign.h 4 * support for foreign-data wrappers, servers and user mappings. 5 * 6 * 7 * Portions Copyright (c) 1996-2019, 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 /* 25 * Generic option types for validation. 26 * NB! These are treated as flags, so use only powers of two here. 27 */ 28 typedef enum 29 { 30 ServerOpt = 1, /* options applicable to SERVER */ 31 UserMappingOpt = 2, /* options for USER MAPPING */ 32 FdwOpt = 4 /* options for FOREIGN DATA WRAPPER */ 33 } GenericOptionFlags; 34 35 typedef struct ForeignDataWrapper 36 { 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 */ 43 } ForeignDataWrapper; 44 45 typedef struct ForeignServer 46 { 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 */ 54 } ForeignServer; 55 56 typedef struct UserMapping 57 { 58 Oid umid; /* Oid of user mapping */ 59 Oid userid; /* local user Oid */ 60 Oid serverid; /* server Oid */ 61 List *options; /* useoptions as DefElem list */ 62 } UserMapping; 63 64 typedef struct ForeignTable 65 { 66 Oid relid; /* relation Oid */ 67 Oid serverid; /* server Oid */ 68 List *options; /* ftoptions as DefElem list */ 69 } ForeignTable; 70 71 /* Flags for GetForeignServerExtended */ 72 #define FSV_MISSING_OK 0x01 73 74 /* Flags for GetForeignDataWrapperExtended */ 75 #define FDW_MISSING_OK 0x01 76 77 78 extern ForeignServer *GetForeignServer(Oid serverid); 79 extern ForeignServer *GetForeignServerExtended(Oid serverid, 80 bits16 flags); 81 extern ForeignServer *GetForeignServerByName(const char *name, bool missing_ok); 82 extern UserMapping *GetUserMapping(Oid userid, Oid serverid); 83 extern ForeignDataWrapper *GetForeignDataWrapper(Oid fdwid); 84 extern ForeignDataWrapper *GetForeignDataWrapperExtended(Oid fdwid, 85 bits16 flags); 86 extern ForeignDataWrapper *GetForeignDataWrapperByName(const char *name, 87 bool missing_ok); 88 extern ForeignTable *GetForeignTable(Oid relid); 89 90 extern List *GetForeignColumnOptions(Oid relid, AttrNumber attnum); 91 92 extern Oid get_foreign_data_wrapper_oid(const char *fdwname, bool missing_ok); 93 extern Oid get_foreign_server_oid(const char *servername, bool missing_ok); 94 95 #endif /* FOREIGN_H */ 96