diff options
Diffstat (limited to 'src/include')
-rw-r--r-- | src/include/catalog/catversion.h | 6 | ||||
-rw-r--r-- | src/include/catalog/dependency.h | 5 | ||||
-rw-r--r-- | src/include/catalog/indexing.h | 20 | ||||
-rw-r--r-- | src/include/catalog/pg_foreign_data_wrapper.h | 62 | ||||
-rw-r--r-- | src/include/catalog/pg_foreign_server.h | 65 | ||||
-rw-r--r-- | src/include/catalog/pg_proc.h | 31 | ||||
-rw-r--r-- | src/include/catalog/pg_user_mapping.h | 58 | ||||
-rw-r--r-- | src/include/commands/defrem.h | 18 | ||||
-rw-r--r-- | src/include/foreign/foreign.h | 101 | ||||
-rw-r--r-- | src/include/nodes/makefuncs.h | 4 | ||||
-rw-r--r-- | src/include/nodes/nodes.h | 12 | ||||
-rw-r--r-- | src/include/nodes/parsenodes.h | 116 | ||||
-rw-r--r-- | src/include/utils/acl.h | 13 | ||||
-rw-r--r-- | src/include/utils/builtins.h | 14 | ||||
-rw-r--r-- | src/include/utils/syscache.h | 10 |
15 files changed, 520 insertions, 15 deletions
diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h index 2ee189437f2..b1b2a128373 100644 --- a/src/include/catalog/catversion.h +++ b/src/include/catalog/catversion.h @@ -4,7 +4,7 @@ * "Catalog version number" for PostgreSQL. * * The catalog version number is used to flag incompatible changes in - * the PostgreSQL system catalogs. Whenever anyone changes the format of + * the PostgreSQL system catalogs. Whenever anyone changes the format of * a system catalog relation, or adds, deletes, or modifies standard * catalog entries in such a way that an updated backend wouldn't work * with an old database (or vice versa), the catalog version number @@ -37,7 +37,7 @@ * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/catalog/catversion.h,v 1.511 2008/12/04 17:51:27 petere Exp $ + * $PostgreSQL: pgsql/src/include/catalog/catversion.h,v 1.512 2008/12/19 16:25:18 petere Exp $ * *------------------------------------------------------------------------- */ @@ -53,6 +53,6 @@ */ /* yyyymmddN */ -#define CATALOG_VERSION_NO 200812041 +#define CATALOG_VERSION_NO 200812191 #endif diff --git a/src/include/catalog/dependency.h b/src/include/catalog/dependency.h index 8929be6a342..8cd28f7e6c8 100644 --- a/src/include/catalog/dependency.h +++ b/src/include/catalog/dependency.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/catalog/dependency.h,v 1.36 2008/06/08 22:41:04 tgl Exp $ + * $PostgreSQL: pgsql/src/include/catalog/dependency.h,v 1.37 2008/12/19 16:25:18 petere Exp $ * *------------------------------------------------------------------------- */ @@ -143,6 +143,9 @@ typedef enum ObjectClass OCLASS_ROLE, /* pg_authid */ OCLASS_DATABASE, /* pg_database */ OCLASS_TBLSPACE, /* pg_tablespace */ + OCLASS_FDW, /* pg_foreign_data_wrapper */ + OCLASS_FOREIGN_SERVER, /* pg_foreign_server */ + OCLASS_USER_MAPPING, /* pg_user_mapping */ MAX_OCLASS /* MUST BE LAST */ } ObjectClass; diff --git a/src/include/catalog/indexing.h b/src/include/catalog/indexing.h index 18defe8ee78..49b2c17fa8a 100644 --- a/src/include/catalog/indexing.h +++ b/src/include/catalog/indexing.h @@ -8,7 +8,7 @@ * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/catalog/indexing.h,v 1.103 2008/06/19 00:46:06 alvherre Exp $ + * $PostgreSQL: pgsql/src/include/catalog/indexing.h,v 1.104 2008/12/19 16:25:18 petere Exp $ * *------------------------------------------------------------------------- */ @@ -252,6 +252,24 @@ DECLARE_UNIQUE_INDEX(pg_type_oid_index, 2703, on pg_type using btree(oid oid_ops DECLARE_UNIQUE_INDEX(pg_type_typname_nsp_index, 2704, on pg_type using btree(typname name_ops, typnamespace oid_ops)); #define TypeNameNspIndexId 2704 +DECLARE_UNIQUE_INDEX(pg_foreign_data_wrapper_oid_index, 112, on pg_foreign_data_wrapper using btree(oid oid_ops)); +#define ForeignDataWrapperOidIndexId 112 + +DECLARE_UNIQUE_INDEX(pg_foreign_data_wrapper_name_index, 548, on pg_foreign_data_wrapper using btree(fdwname name_ops)); +#define ForeignDataWrapperNameIndexId 548 + +DECLARE_UNIQUE_INDEX(pg_foreign_server_oid_index, 113, on pg_foreign_server using btree(oid oid_ops)); +#define ForeignServerOidIndexId 113 + +DECLARE_UNIQUE_INDEX(pg_foreign_server_name_index, 549, on pg_foreign_server using btree(srvname name_ops)); +#define ForeignServerNameIndexId 549 + +DECLARE_UNIQUE_INDEX(pg_user_mapping_oid_index, 174, on pg_user_mapping using btree(oid oid_ops)); +#define UserMappingOidIndexId 174 + +DECLARE_UNIQUE_INDEX(pg_user_mapping_user_server_index, 175, on pg_user_mapping using btree(umuser oid_ops, umserver oid_ops)); +#define UserMappingUserServerIndexId 175 + /* last step of initialization script: build the indexes declared above */ BUILD_INDICES diff --git a/src/include/catalog/pg_foreign_data_wrapper.h b/src/include/catalog/pg_foreign_data_wrapper.h new file mode 100644 index 00000000000..aa245961f9e --- /dev/null +++ b/src/include/catalog/pg_foreign_data_wrapper.h @@ -0,0 +1,62 @@ +/*------------------------------------------------------------------------- + * + * pg_foreign_data_wrapper.h + * definition of the system "foreign-data wrapper" relation (pg_foreign_data_wrapper) + * along with the relation's initial contents. + * + * + * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * $PostgreSQL: pgsql/src/include/catalog/pg_foreign_data_wrapper.h,v 1.1 2008/12/19 16:25:18 petere Exp $ + * + * NOTES + * the genbki.sh script reads this file and generates .bki + * information from the DATA() statements. + * + *------------------------------------------------------------------------- + */ +#ifndef PG_FOREIGN_DATA_WRAPPER_H +#define PG_FOREIGN_DATA_WRAPPER_H + +#include "catalog/genbki.h" + +/* ---------------- + * pg_foreign_data_wrapper definition. cpp turns this into + * typedef struct FormData_pg_foreign_data_wrapper + * ---------------- + */ +#define ForeignDataWrapperRelationId 2328 + +CATALOG(pg_foreign_data_wrapper,2328) +{ + NameData fdwname; /* foreign-data wrapper name */ + Oid fdwowner; /* FDW owner */ + + /* VARIABLE LENGTH FIELDS start here. */ + + text fdwlibrary; /* FDW shared library location */ + aclitem fdwacl[1]; /* access permissions */ + text fdwoptions[1]; /* FDW options */ +} FormData_pg_foreign_data_wrapper; + +/* ---------------- + * Form_pg_fdw corresponds to a pointer to a tuple with + * the format of pg_fdw relation. + * ---------------- + */ +typedef FormData_pg_foreign_data_wrapper *Form_pg_foreign_data_wrapper; + +/* ---------------- + * compiler constants for pg_fdw + * ---------------- + */ + +#define Natts_pg_foreign_data_wrapper 5 +#define Anum_pg_foreign_data_wrapper_fdwname 1 +#define Anum_pg_foreign_data_wrapper_fdwowner 2 +#define Anum_pg_foreign_data_wrapper_fdwlibrary 3 +#define Anum_pg_foreign_data_wrapper_fdwacl 4 +#define Anum_pg_foreign_data_wrapper_fdwoptions 5 + +#endif /* PG_FOREIGN_DATA_WRAPPER_H */ diff --git a/src/include/catalog/pg_foreign_server.h b/src/include/catalog/pg_foreign_server.h new file mode 100644 index 00000000000..cc334c19159 --- /dev/null +++ b/src/include/catalog/pg_foreign_server.h @@ -0,0 +1,65 @@ +/*------------------------------------------------------------------------- + * + * pg_foreign_server.h + * definition of the system "foreign server" relation (pg_foreign_server) + * + * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * $PostgreSQL: pgsql/src/include/catalog/pg_foreign_server.h,v 1.1 2008/12/19 16:25:18 petere Exp $ + * + * NOTES + * the genbki.sh script reads this file and generates .bki + * information from the DATA() statements. + * + *------------------------------------------------------------------------- + */ +#ifndef PG_FOREIGN_SERVER_H +#define PG_FOREIGN_SERVER_H + +#include "catalog/genbki.h" + +/* ---------------- + * pg_foreign_server definition. cpp turns this into + * typedef struct FormData_pg_foreign_server + * ---------------- + */ +#define ForeignServerRelationId 1417 + +CATALOG(pg_foreign_server,1417) +{ + NameData srvname; /* foreign server name */ + Oid srvowner; /* server owner */ + Oid srvfdw; /* server FDW */ + + /* + * VARIABLE LENGTH FIELDS start here. These fields may be NULL, too. + */ + text srvtype; + text srvversion; + aclitem srvacl[1]; /* access permissions */ + text srvoptions[1]; /* FDW-specific options */ +} FormData_pg_foreign_server; + +/* ---------------- + * Form_pg_foreign_server corresponds to a pointer to a tuple with + * the format of pg_foreign_server relation. + * ---------------- + */ +typedef FormData_pg_foreign_server *Form_pg_foreign_server; + +/* ---------------- + * compiler constants for pg_foreign_server + * ---------------- + */ + +#define Natts_pg_foreign_server 7 +#define Anum_pg_foreign_server_srvname 1 +#define Anum_pg_foreign_server_srvowner 2 +#define Anum_pg_foreign_server_srvfdw 3 +#define Anum_pg_foreign_server_srvtype 4 +#define Anum_pg_foreign_server_srvversion 5 +#define Anum_pg_foreign_server_srvacl 6 +#define Anum_pg_foreign_server_srvoptions 7 + +#endif /* PG_FOREIGN_SERVER_H */ diff --git a/src/include/catalog/pg_proc.h b/src/include/catalog/pg_proc.h index 9d4e6dcfffa..63bcdc7c06e 100644 --- a/src/include/catalog/pg_proc.h +++ b/src/include/catalog/pg_proc.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/catalog/pg_proc.h,v 1.531 2008/12/18 18:20:34 tgl Exp $ + * $PostgreSQL: pgsql/src/include/catalog/pg_proc.h,v 1.532 2008/12/19 16:25:18 petere Exp $ * * NOTES * The script catalog/genbki.sh reads this file and generates .bki @@ -3582,6 +3582,32 @@ DESCR("current user privilege on tablespace by tablespace name"); DATA(insert OID = 2395 ( has_tablespace_privilege PGNSP PGUID 12 1 0 0 f f t f s 2 0 16 "26 25" _null_ _null_ _null_ _null_ has_tablespace_privilege_id _null_ _null_ _null_ )); DESCR("current user privilege on tablespace by tablespace oid"); +DATA(insert OID = 3000 ( has_foreign_data_wrapper_privilege PGNSP PGUID 12 1 0 0 f f t f s 3 0 16 "19 25 25" _null_ _null_ _null_ _null_ has_foreign_data_wrapper_privilege_name_name _null_ _null_ _null_ )); +DESCR("user privilege on foreign data wrapper by username, foreign data wrapper name"); +DATA(insert OID = 3001 ( has_foreign_data_wrapper_privilege PGNSP PGUID 12 1 0 0 f f t f s 3 0 16 "19 26 25" _null_ _null_ _null_ _null_ has_foreign_data_wrapper_privilege_name_id _null_ _null_ _null_ )); +DESCR("user privilege on foreign data wrapper by username, foreign data wrapper oid"); +DATA(insert OID = 3002 ( has_foreign_data_wrapper_privilege PGNSP PGUID 12 1 0 0 f f t f s 3 0 16 "26 25 25" _null_ _null_ _null_ _null_ has_foreign_data_wrapper_privilege_id_name _null_ _null_ _null_ )); +DESCR("user privilege on foreign data wrapper by user oid, foreign data wrapper name"); +DATA(insert OID = 3003 ( has_foreign_data_wrapper_privilege PGNSP PGUID 12 1 0 0 f f t f s 3 0 16 "26 26 25" _null_ _null_ _null_ _null_ has_foreign_data_wrapper_privilege_id_id _null_ _null_ _null_ )); +DESCR("user privilege on foreign data wrapper by user oid, foreign data wrapper oid"); +DATA(insert OID = 3004 ( has_foreign_data_wrapper_privilege PGNSP PGUID 12 1 0 0 f f t f s 2 0 16 "25 25" _null_ _null_ _null_ _null_ has_foreign_data_wrapper_privilege_name _null_ _null_ _null_ )); +DESCR("current user privilege on foreign data wrapper by foreign data wrapper name"); +DATA(insert OID = 3005 ( has_foreign_data_wrapper_privilege PGNSP PGUID 12 1 0 0 f f t f s 2 0 16 "26 25" _null_ _null_ _null_ _null_ has_foreign_data_wrapper_privilege_id _null_ _null_ _null_ )); +DESCR("current user privilege on foreign data wrapper by foreign data wrapper oid"); + +DATA(insert OID = 3006 ( has_server_privilege PGNSP PGUID 12 1 0 0 f f t f s 3 0 16 "19 25 25" _null_ _null_ _null_ _null_ has_server_privilege_name_name _null_ _null_ _null_ )); +DESCR("user privilege on server by username, server name"); +DATA(insert OID = 3007 ( has_server_privilege PGNSP PGUID 12 1 0 0 f f t f s 3 0 16 "19 26 25" _null_ _null_ _null_ _null_ has_server_privilege_name_id _null_ _null_ _null_ )); +DESCR("user privilege on server by username, server oid"); +DATA(insert OID = 3008 ( has_server_privilege PGNSP PGUID 12 1 0 0 f f t f s 3 0 16 "26 25 25" _null_ _null_ _null_ _null_ has_server_privilege_id_name _null_ _null_ _null_ )); +DESCR("user privilege on server by user oid, server name"); +DATA(insert OID = 3009 ( has_server_privilege PGNSP PGUID 12 1 0 0 f f t f s 3 0 16 "26 26 25" _null_ _null_ _null_ _null_ has_server_privilege_id_id _null_ _null_ _null_ )); +DESCR("user privilege on server by user oid, server oid"); +DATA(insert OID = 3010 ( has_server_privilege PGNSP PGUID 12 1 0 0 f f t f s 2 0 16 "25 25" _null_ _null_ _null_ _null_ has_server_privilege_name _null_ _null_ _null_ )); +DESCR("current user privilege on server by server name"); +DATA(insert OID = 3011 ( has_server_privilege PGNSP PGUID 12 1 0 0 f f t f s 2 0 16 "26 25" _null_ _null_ _null_ _null_ has_server_privilege_id _null_ _null_ _null_ )); +DESCR("current user privilege on server by server oid"); + DATA(insert OID = 2705 ( pg_has_role PGNSP PGUID 12 1 0 0 f f t f s 3 0 16 "19 19 25" _null_ _null_ _null_ _null_ pg_has_role_name_name _null_ _null_ _null_ )); DESCR("user privilege on role by username, role name"); DATA(insert OID = 2706 ( pg_has_role PGNSP PGUID 12 1 0 0 f f t f s 3 0 16 "19 26 25" _null_ _null_ _null_ _null_ pg_has_role_name_id _null_ _null_ _null_ )); @@ -4604,6 +4630,9 @@ DESCR("record greater than or equal"); DATA(insert OID = 2987 ( btrecordcmp PGNSP PGUID 12 1 0 0 f f t f i 2 0 23 "2249 2249" _null_ _null_ _null_ _null_ btrecordcmp _null_ _null_ _null_ )); DESCR("btree less-equal-greater"); +DATA(insert OID = 2998 ( pg_options_to_table PGNSP PGUID 12 1 3 0 f f t t s 1 0 2249 "1009" "{1009,25,25}" "{i,o,o}" "{options_array,option_name,option_value}" _null_ pg_options_to_table _null_ _null_ _null_ )); +DESCR("convert generic options array to name/value table"); + /* * Symbolic values for provolatile column: these indicate whether the result diff --git a/src/include/catalog/pg_user_mapping.h b/src/include/catalog/pg_user_mapping.h new file mode 100644 index 00000000000..e1770e01238 --- /dev/null +++ b/src/include/catalog/pg_user_mapping.h @@ -0,0 +1,58 @@ +/*------------------------------------------------------------------------- + * + * pg_user_mapping.h + * definition of the system "user mapping" relation (pg_user_mapping) + * + * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * $PostgreSQL: pgsql/src/include/catalog/pg_user_mapping.h,v 1.1 2008/12/19 16:25:19 petere Exp $ + * + * NOTES + * the genbki.sh script reads this file and generates .bki + * information from the DATA() statements. + * + *------------------------------------------------------------------------- + */ +#ifndef PG_USER_MAPPING_H +#define PG_USER_MAPPING_H + +#include "catalog/genbki.h" + +/* ---------------- + * pg_user_mapping definition. cpp turns this into + * typedef struct FormData_pg_user_mapping + * ---------------- + */ +#define UserMappingRelationId 1418 + +CATALOG(pg_user_mapping,1418) +{ + Oid umuser; /* Id of the user, InvalidOid if PUBLIC is wanted */ + Oid umserver; /* server of this mapping */ + + /* + * VARIABLE LENGTH FIELDS start here. These fields may be NULL, too. + */ + + text umoptions[1]; /* user mapping options */ +} FormData_pg_user_mapping; + +/* ---------------- + * Form_pg_user_mapping corresponds to a pointer to a tuple with + * the format of pg_user_mapping relation. + * ---------------- + */ +typedef FormData_pg_user_mapping *Form_pg_user_mapping; + +/* ---------------- + * compiler constants for pg_user_mapping + * ---------------- + */ + +#define Natts_pg_user_mapping 3 +#define Anum_pg_user_mapping_umuser 1 +#define Anum_pg_user_mapping_umserver 2 +#define Anum_pg_user_mapping_umoptions 3 + +#endif /* PG_USER_MAPPING_H */ diff --git a/src/include/commands/defrem.h b/src/include/commands/defrem.h index 61a852623c3..71f7e715225 100644 --- a/src/include/commands/defrem.h +++ b/src/include/commands/defrem.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/commands/defrem.h,v 1.90 2008/12/04 17:51:27 petere Exp $ + * $PostgreSQL: pgsql/src/include/commands/defrem.h,v 1.91 2008/12/19 16:25:19 petere Exp $ * *------------------------------------------------------------------------- */ @@ -118,6 +118,22 @@ extern void AlterTSConfigurationOwner(List *name, Oid newOwnerId); extern text *serialize_deflist(List *deflist); extern List *deserialize_deflist(Datum txt); +/* commands/foreigncmds.c */ +extern void AlterForeignServerOwner(const char *name, Oid newOwnerId); +extern void AlterForeignDataWrapperOwner(const char *name, Oid newOwnerId); +extern void CreateForeignDataWrapper(CreateFdwStmt *stmt); +extern void AlterForeignDataWrapper(AlterFdwStmt *stmt); +extern void RemoveForeignDataWrapper(DropFdwStmt *stmt); +extern void RemoveForeignDataWrapperById(Oid fdwId); +extern void CreateForeignServer(CreateForeignServerStmt *stmt); +extern void AlterForeignServer(AlterForeignServerStmt *stmt); +extern void RemoveForeignServer(DropForeignServerStmt *stmt); +extern void RemoveForeignServerById(Oid srvId); +extern void CreateUserMapping(CreateUserMappingStmt *stmt); +extern void AlterUserMapping(AlterUserMappingStmt *stmt); +extern void RemoveUserMapping(DropUserMappingStmt *stmt); +extern void RemoveUserMappingById(Oid umId); + /* support routines in commands/define.c */ extern char *case_translate_language_name(const char *input); diff --git a/src/include/foreign/foreign.h b/src/include/foreign/foreign.h new file mode 100644 index 00000000000..7fce532888e --- /dev/null +++ b/src/include/foreign/foreign.h @@ -0,0 +1,101 @@ +/*------------------------------------------------------------------------- + * + * foreign.h + * support for foreign-data wrappers, servers and user mappings. + * + * + * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group + * + * $PostgreSQL: pgsql/src/include/foreign/foreign.h,v 1.1 2008/12/19 16:25:19 petere Exp $ + * + *------------------------------------------------------------------------- + */ +#ifndef FOREIGN_H +#define FOREIGN_H + +#include "nodes/parsenodes.h" +#include "nodes/pg_list.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 { + InvalidOpt = 0, + ServerOpt = 1, /* options applicable to SERVER */ + UserMappingOpt = 2, /* options for USER MAPPING */ + FdwOpt = 4, /* options for FOREIGN DATA WRAPPER */ +} GenericOptionFlags; + +typedef struct ForeignDataWrapperLibrary ForeignDataWrapperLibrary; + +typedef struct ForeignDataWrapper +{ + Oid fdwid; /* FDW Oid */ + Oid owner; /* FDW owner user Oid */ + char *fdwname; /* Name of the FDW */ + char *fdwlibrary; /* Library name */ + List *options; /* fdwoptions as DefElem list */ + + ForeignDataWrapperLibrary *lib; /* interface to the FDW functions */ +} 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; + + +/* + * Foreign-data wrapper library function types. + */ +typedef void (*OptionListValidatorFunc)(ForeignDataWrapper *, + GenericOptionFlags, + List *); + +/* + * Interface functions to the foreign-data wrapper. This is decoupled + * from the FDW as there maybe several FDW-s accessing the same library. + */ +struct ForeignDataWrapperLibrary +{ + char *libname; /* name of the library file */ + + OptionListValidatorFunc validateOptionList; +}; + + +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); +extern ForeignDataWrapperLibrary *GetForeignDataWrapperLibrary(const char *libname); + +/* Foreign data wrapper interface functions */ +extern void _pg_validateOptionList(ForeignDataWrapper *fdw, + GenericOptionFlags flags, List *options); + +#endif /* FOREIGN_H */ diff --git a/src/include/nodes/makefuncs.h b/src/include/nodes/makefuncs.h index d4e58cfe5f3..a863c1369b2 100644 --- a/src/include/nodes/makefuncs.h +++ b/src/include/nodes/makefuncs.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/nodes/makefuncs.h,v 1.63 2008/09/01 20:42:45 tgl Exp $ + * $PostgreSQL: pgsql/src/include/nodes/makefuncs.h,v 1.64 2008/12/19 16:25:19 petere Exp $ * *------------------------------------------------------------------------- */ @@ -67,4 +67,6 @@ extern FuncExpr *makeFuncExpr(Oid funcid, Oid rettype, extern DefElem *makeDefElem(char *name, Node *arg); +extern OptionDefElem *makeOptionDefElem(int op, DefElem *def); + #endif /* MAKEFUNC_H */ diff --git a/src/include/nodes/nodes.h b/src/include/nodes/nodes.h index 4161c08ec54..7383697f6ce 100644 --- a/src/include/nodes/nodes.h +++ b/src/include/nodes/nodes.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/nodes/nodes.h,v 1.215 2008/11/22 22:47:06 tgl Exp $ + * $PostgreSQL: pgsql/src/include/nodes/nodes.h,v 1.216 2008/12/19 16:25:19 petere Exp $ * *------------------------------------------------------------------------- */ @@ -325,6 +325,15 @@ typedef enum NodeTag T_CreateEnumStmt, T_AlterTSDictionaryStmt, T_AlterTSConfigurationStmt, + T_CreateFdwStmt, + T_AlterFdwStmt, + T_DropFdwStmt, + T_CreateForeignServerStmt, + T_AlterForeignServerStmt, + T_DropForeignServerStmt, + T_CreateUserMappingStmt, + T_AlterUserMappingStmt, + T_DropUserMappingStmt, /* * TAGS FOR PARSE TREE NODES (parsenodes.h) @@ -348,6 +357,7 @@ typedef enum NodeTag T_IndexElem, T_Constraint, T_DefElem, + T_OptionDefElem, T_RangeTblEntry, T_SortGroupClause, T_FkConstraint, diff --git a/src/include/nodes/parsenodes.h b/src/include/nodes/parsenodes.h index c84a77585fc..2f22475bf10 100644 --- a/src/include/nodes/parsenodes.h +++ b/src/include/nodes/parsenodes.h @@ -13,7 +13,7 @@ * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/nodes/parsenodes.h,v 1.383 2008/12/18 18:20:35 tgl Exp $ + * $PostgreSQL: pgsql/src/include/nodes/parsenodes.h,v 1.384 2008/12/19 16:25:19 petere Exp $ * *------------------------------------------------------------------------- */ @@ -49,6 +49,13 @@ typedef enum SortByNulls SORTBY_NULLS_LAST } SortByNulls; +/* Alter operations for generic options */ +typedef enum AlterOptionOp +{ + ALTER_OPT_DROP = -1, + ALTER_OPT_SET, + ALTER_OPT_ADD +} AlterOptionOp; /* * Grantable rights are encoded so that we can OR them together in a bitmask. @@ -67,7 +74,7 @@ typedef uint32 AclMode; /* a bitmask of privilege bits */ #define ACL_REFERENCES (1<<5) #define ACL_TRIGGER (1<<6) #define ACL_EXECUTE (1<<7) /* for functions */ -#define ACL_USAGE (1<<8) /* for languages and namespaces */ +#define ACL_USAGE (1<<8) /* for languages, namespaces, FDWs, and servers */ #define ACL_CREATE (1<<9) /* for namespaces and databases */ #define ACL_CREATE_TEMP (1<<10) /* for databases */ #define ACL_CONNECT (1<<11) /* for databases */ @@ -467,6 +474,17 @@ typedef struct DefElem } DefElem; /* + * Option definition. Used in options definition lists, with optional alter + * operation. + */ +typedef struct OptionDefElem +{ + NodeTag type; + AlterOptionOp alter_op; /* Alter operation: ADD/SET/DROP */ + DefElem *def; /* The actual definition */ +} OptionDefElem; + +/* * LockingClause - raw representation of FOR UPDATE/SHARE options * * Note: lockedRels == NIL means "all relations in query". Otherwise it @@ -930,6 +948,8 @@ typedef enum ObjectType OBJECT_CONVERSION, OBJECT_DATABASE, OBJECT_DOMAIN, + OBJECT_FDW, + OBJECT_FOREIGN_SERVER, OBJECT_FUNCTION, OBJECT_INDEX, OBJECT_LANGUAGE, @@ -1076,6 +1096,8 @@ typedef enum GrantObjectType ACL_OBJECT_RELATION, /* table, view */ ACL_OBJECT_SEQUENCE, /* sequence */ ACL_OBJECT_DATABASE, /* database */ + ACL_OBJECT_FDW, /* foreign-data wrapper */ + ACL_OBJECT_FOREIGN_SERVER, /* foreign server */ ACL_OBJECT_FUNCTION, /* function */ ACL_OBJECT_LANGUAGE, /* procedural language */ ACL_OBJECT_NAMESPACE, /* namespace */ @@ -1329,6 +1351,96 @@ typedef struct DropTableSpaceStmt } DropTableSpaceStmt; /* ---------------------- + * Create/Drop FOREIGN DATA WRAPPER Statements + * ---------------------- + */ + +typedef struct CreateFdwStmt +{ + NodeTag type; + char *fdwname; /* foreign-data wrapper name */ + char *library; /* libray name */ + List *options; /* generic options to FDW */ +} CreateFdwStmt; + +typedef struct AlterFdwStmt +{ + NodeTag type; + char *fdwname; /* foreign-data wrapper name */ + char *library; /* libray name */ + List *options; /* generic options to FDW */ +} AlterFdwStmt; + +typedef struct DropFdwStmt +{ + NodeTag type; + char *fdwname; /* foreign-data wrapper name */ + bool missing_ok; /* don't complain if missing */ + DropBehavior behavior; /* drop behavior - cascade/restrict */ +} DropFdwStmt; + +/* ---------------------- + * Create/Drop FOREIGN SERVER Statements + * ---------------------- + */ + +typedef struct CreateForeignServerStmt +{ + NodeTag type; + char *servername; /* server name */ + char *servertype; /* optional server type */ + char *version; /* optional server version */ + char *fdwname; /* FDW name */ + List *options; /* generic options to server */ +} CreateForeignServerStmt; + +typedef struct AlterForeignServerStmt +{ + NodeTag type; + char *servername; /* server name */ + char *version; /* optional server version */ + List *options; /* generic options to server */ + bool has_version; /* version specified */ +} AlterForeignServerStmt; + +typedef struct DropForeignServerStmt +{ + NodeTag type; + char *servername; /* server name */ + bool missing_ok; /* ignore missing servers */ + DropBehavior behavior; /* drop behavior - cascade/restrict */ +} DropForeignServerStmt; + +/* ---------------------- + * Create/Drop USER MAPPING Statements + * ---------------------- + */ + +typedef struct CreateUserMappingStmt +{ + NodeTag type; + char *username; /* username or PUBLIC/CURRENT_USER */ + char *servername; /* server name */ + List *options; /* generic options to server */ +} CreateUserMappingStmt; + +typedef struct AlterUserMappingStmt +{ + NodeTag type; + char *username; /* username or PUBLIC/CURRENT_USER */ + char *servername; /* server name */ + List *options; /* generic options to server */ +} AlterUserMappingStmt; + +typedef struct DropUserMappingStmt +{ + NodeTag type; + char *username; /* username or PUBLIC/CURRENT_USER */ + char *servername; /* server name */ + bool missing_ok; /* ignore missing mappings */ +} DropUserMappingStmt; + +/* ---------------------- * Create/Drop TRIGGER Statements * ---------------------- */ diff --git a/src/include/utils/acl.h b/src/include/utils/acl.h index 553ceabee3b..defbb47eab1 100644 --- a/src/include/utils/acl.h +++ b/src/include/utils/acl.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/utils/acl.h,v 1.104 2008/09/08 00:47:41 tgl Exp $ + * $PostgreSQL: pgsql/src/include/utils/acl.h,v 1.105 2008/12/19 16:25:19 petere Exp $ * * NOTES * An ACL array is simply an array of AclItems, representing the union @@ -146,6 +146,8 @@ typedef ArrayType Acl; #define ACL_ALL_RIGHTS_RELATION (ACL_INSERT|ACL_SELECT|ACL_UPDATE|ACL_DELETE|ACL_TRUNCATE|ACL_REFERENCES|ACL_TRIGGER) #define ACL_ALL_RIGHTS_SEQUENCE (ACL_USAGE|ACL_SELECT|ACL_UPDATE) #define ACL_ALL_RIGHTS_DATABASE (ACL_CREATE|ACL_CREATE_TEMP|ACL_CONNECT) +#define ACL_ALL_RIGHTS_FDW (ACL_USAGE) +#define ACL_ALL_RIGHTS_FOREIGN_SERVER (ACL_USAGE) #define ACL_ALL_RIGHTS_FUNCTION (ACL_EXECUTE) #define ACL_ALL_RIGHTS_LANGUAGE (ACL_USAGE) #define ACL_ALL_RIGHTS_NAMESPACE (ACL_USAGE|ACL_CREATE) @@ -184,6 +186,8 @@ typedef enum AclObjectKind ACL_KIND_TABLESPACE, /* pg_tablespace */ ACL_KIND_TSDICTIONARY, /* pg_ts_dict */ ACL_KIND_TSCONFIGURATION, /* pg_ts_config */ + ACL_KIND_FDW, /* pg_foreign_data_wrapper */ + ACL_KIND_FOREIGN_SERVER, /* pg_foreign_server */ MAX_ACL_KIND /* MUST BE LAST */ } AclObjectKind; @@ -261,6 +265,10 @@ extern AclMode pg_namespace_aclmask(Oid nsp_oid, Oid roleid, AclMode mask, AclMaskHow how); extern AclMode pg_tablespace_aclmask(Oid spc_oid, Oid roleid, AclMode mask, AclMaskHow how); +extern AclMode pg_foreign_data_wrapper_aclmask(Oid fdw_oid, Oid roleid, + AclMode mask, AclMaskHow how); +extern AclMode pg_foreign_server_aclmask(Oid srv_oid, Oid roleid, + AclMode mask, AclMaskHow how); extern AclResult pg_class_aclcheck(Oid table_oid, Oid roleid, AclMode mode); extern AclResult pg_database_aclcheck(Oid db_oid, Oid roleid, AclMode mode); @@ -268,6 +276,8 @@ extern AclResult pg_proc_aclcheck(Oid proc_oid, Oid roleid, AclMode mode); extern AclResult pg_language_aclcheck(Oid lang_oid, Oid roleid, AclMode mode); extern AclResult pg_namespace_aclcheck(Oid nsp_oid, Oid roleid, AclMode mode); extern AclResult pg_tablespace_aclcheck(Oid spc_oid, Oid roleid, AclMode mode); +extern AclResult pg_foreign_data_wrapper_aclcheck(Oid fdw_oid, Oid roleid, AclMode mode); +extern AclResult pg_foreign_server_aclcheck(Oid srv_oid, Oid roleid, AclMode mode); extern void aclcheck_error(AclResult aclerr, AclObjectKind objectkind, const char *objectname); @@ -286,5 +296,6 @@ extern bool pg_database_ownercheck(Oid db_oid, Oid roleid); extern bool pg_conversion_ownercheck(Oid conv_oid, Oid roleid); extern bool pg_ts_dict_ownercheck(Oid dict_oid, Oid roleid); extern bool pg_ts_config_ownercheck(Oid cfg_oid, Oid roleid); +extern bool pg_foreign_server_ownercheck(Oid srv_oid, Oid roleid); #endif /* ACL_H */ diff --git a/src/include/utils/builtins.h b/src/include/utils/builtins.h index 7f20cdf0015..a00415aaa65 100644 --- a/src/include/utils/builtins.h +++ b/src/include/utils/builtins.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/utils/builtins.h,v 1.327 2008/12/04 17:51:28 petere Exp $ + * $PostgreSQL: pgsql/src/include/utils/builtins.h,v 1.328 2008/12/19 16:25:19 petere Exp $ * *------------------------------------------------------------------------- */ @@ -34,6 +34,12 @@ extern Datum has_database_privilege_id_name(PG_FUNCTION_ARGS); extern Datum has_database_privilege_id_id(PG_FUNCTION_ARGS); extern Datum has_database_privilege_name(PG_FUNCTION_ARGS); extern Datum has_database_privilege_id(PG_FUNCTION_ARGS); +extern Datum has_foreign_data_wrapper_privilege_name_name(PG_FUNCTION_ARGS); +extern Datum has_foreign_data_wrapper_privilege_name_id(PG_FUNCTION_ARGS); +extern Datum has_foreign_data_wrapper_privilege_id_name(PG_FUNCTION_ARGS); +extern Datum has_foreign_data_wrapper_privilege_id_id(PG_FUNCTION_ARGS); +extern Datum has_foreign_data_wrapper_privilege_name(PG_FUNCTION_ARGS); +extern Datum has_foreign_data_wrapper_privilege_id(PG_FUNCTION_ARGS); extern Datum has_function_privilege_name_name(PG_FUNCTION_ARGS); extern Datum has_function_privilege_name_id(PG_FUNCTION_ARGS); extern Datum has_function_privilege_id_name(PG_FUNCTION_ARGS); @@ -52,6 +58,12 @@ extern Datum has_schema_privilege_id_name(PG_FUNCTION_ARGS); extern Datum has_schema_privilege_id_id(PG_FUNCTION_ARGS); extern Datum has_schema_privilege_name(PG_FUNCTION_ARGS); extern Datum has_schema_privilege_id(PG_FUNCTION_ARGS); +extern Datum has_server_privilege_name_name(PG_FUNCTION_ARGS); +extern Datum has_server_privilege_name_id(PG_FUNCTION_ARGS); +extern Datum has_server_privilege_id_name(PG_FUNCTION_ARGS); +extern Datum has_server_privilege_id_id(PG_FUNCTION_ARGS); +extern Datum has_server_privilege_name(PG_FUNCTION_ARGS); +extern Datum has_server_privilege_id(PG_FUNCTION_ARGS); extern Datum has_tablespace_privilege_name_name(PG_FUNCTION_ARGS); extern Datum has_tablespace_privilege_name_id(PG_FUNCTION_ARGS); extern Datum has_tablespace_privilege_id_name(PG_FUNCTION_ARGS); diff --git a/src/include/utils/syscache.h b/src/include/utils/syscache.h index e6220477728..ded7a1d0523 100644 --- a/src/include/utils/syscache.h +++ b/src/include/utils/syscache.h @@ -9,7 +9,7 @@ * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/utils/syscache.h,v 1.72 2008/05/07 01:04:49 tgl Exp $ + * $PostgreSQL: pgsql/src/include/utils/syscache.h,v 1.73 2008/12/19 16:25:19 petere Exp $ * *------------------------------------------------------------------------- */ @@ -51,6 +51,10 @@ enum SysCacheIdentifier DATABASEOID, ENUMOID, ENUMTYPOIDNAME, + FOREIGNDATAWRAPPERNAME, + FOREIGNDATAWRAPPEROID, + FOREIGNSERVERNAME, + FOREIGNSERVEROID, INDEXRELID, LANGNAME, LANGOID, @@ -76,7 +80,9 @@ enum SysCacheIdentifier TSTEMPLATENAMENSP, TSTEMPLATEOID, TYPENAMENSP, - TYPEOID + TYPEOID, + USERMAPPINGOID, + USERMAPPINGUSERSERVER }; extern void InitCatalogCache(void); |