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