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