postgresql/src/include/foreign/foreign.h
Tom Lane 090173a3f9 Remove the recently added node types ReloptElem and OptionDefElem in favor
of adding optional namespace and action fields to DefElem.  Having three
node types that do essentially the same thing bloats the code and leads
to errors of confusion, such as in yesterday's bug report from Khee Chin.
2009-04-04 21:12:31 +00:00

71 lines
2.2 KiB
C

/*-------------------------------------------------------------------------
*
* foreign.h
* support for foreign-data wrappers, servers and user mappings.
*
*
* Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
*
* $PostgreSQL: pgsql/src/include/foreign/foreign.h,v 1.4 2009/04/04 21:12:31 tgl Exp $
*
*-------------------------------------------------------------------------
*/
#ifndef FOREIGN_H
#define FOREIGN_H
#include "nodes/parsenodes.h"
/* Helper for obtaining username for user mapping */
#define MappingUserName(userid) \
(OidIsValid(userid) ? GetUserNameFromId(userid) : "public")
/*
* Generic option types for validation.
* NB! Thes are treated as flags, so use only powers of two here.
*/
typedef enum {
ServerOpt = 1, /* options applicable to SERVER */
UserMappingOpt = 2, /* options for USER MAPPING */
FdwOpt = 4 /* options for FOREIGN DATA WRAPPER */
} GenericOptionFlags;
typedef struct ForeignDataWrapper
{
Oid fdwid; /* FDW Oid */
Oid owner; /* FDW owner user Oid */
char *fdwname; /* Name of the FDW */
Oid fdwvalidator;
List *options; /* fdwoptions as DefElem list */
} ForeignDataWrapper;
typedef struct ForeignServer
{
Oid serverid; /* server Oid */
Oid fdwid; /* foreign-data wrapper */
Oid owner; /* server owner user Oid */
char *servername; /* name of the server */
char *servertype; /* server type, optional */
char *serverversion; /* server version, optional */
List *options; /* srvoptions as DefElem list */
} ForeignServer;
typedef struct UserMapping
{
Oid userid; /* local user Oid */
Oid serverid; /* server Oid */
List *options; /* useoptions as DefElem list */
} UserMapping;
extern ForeignServer *GetForeignServer(Oid serverid);
extern ForeignServer *GetForeignServerByName(const char *name, bool missing_ok);
extern Oid GetForeignServerOidByName(const char *name, bool missing_ok);
extern UserMapping *GetUserMapping(Oid userid, Oid serverid);
extern ForeignDataWrapper *GetForeignDataWrapper(Oid fdwid);
extern ForeignDataWrapper *GetForeignDataWrapperByName(const char *name,
bool missing_ok);
extern Oid GetForeignDataWrapperOidByName(const char *name, bool missing_ok);
#endif /* FOREIGN_H */