From 7babccb91504fd4a958ff778547af1a8cbc1f8f2 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Tue, 24 Feb 2009 10:06:36 +0000 Subject: Add the possibility to specify an explicit validator function for foreign-data wrappers (similar to procedural languages). This way we don't need to retain the nearly empty libraries, and we are more free in how to implement the wrapper API in the future. --- src/backend/foreign/postgresql/postgresql_fdw.c | 123 ------------------------ 1 file changed, 123 deletions(-) delete mode 100644 src/backend/foreign/postgresql/postgresql_fdw.c (limited to 'src/backend/foreign/postgresql/postgresql_fdw.c') diff --git a/src/backend/foreign/postgresql/postgresql_fdw.c b/src/backend/foreign/postgresql/postgresql_fdw.c deleted file mode 100644 index 3fb4d2f8631..00000000000 --- a/src/backend/foreign/postgresql/postgresql_fdw.c +++ /dev/null @@ -1,123 +0,0 @@ -/*------------------------------------------------------------------------- - * - * postgresql_fdw.c - * foreign-data wrapper for postgresql (libpq) connections. - * - * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group - * - * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/foreign/postgresql/postgresql_fdw.c,v 1.2 2009/01/01 17:23:42 momjian Exp $ - * - *------------------------------------------------------------------------- - */ -#include "postgres.h" - -#include "fmgr.h" -#include "lib/stringinfo.h" -#include "nodes/value.h" -#include "nodes/parsenodes.h" -#include "nodes/makefuncs.h" -#include "foreign/foreign.h" - -PG_MODULE_MAGIC; - - -/* - * Describes the valid options for postgresql FDW, server and user mapping. - */ -typedef struct ConnectionOptions { - const char *optname; /* Option name */ - GenericOptionFlags optflags; /* Option usage bitmap */ -} ConnectionOptions; - -/* - * Copied from fe-connect.c PQconninfoOptions. - * - * The list is small - don't bother with bsearch if it stays so. - */ -static ConnectionOptions libpq_conninfo_options[] = { - { "authtype", ServerOpt }, - { "service", ServerOpt }, - { "user", UserMappingOpt }, - { "password", UserMappingOpt }, - { "connect_timeout", ServerOpt }, - { "dbname", ServerOpt }, - { "host", ServerOpt }, - { "hostaddr", ServerOpt }, - { "port", ServerOpt }, - { "tty", ServerOpt }, - { "options", ServerOpt }, - { "requiressl", ServerOpt }, - { "sslmode", ServerOpt }, - { "gsslib", ServerOpt }, - { NULL, InvalidOpt } -}; - -void _PG_fini(void); - - -/* - * Check if the provided option is one of libpq conninfo options. - * We look at only options with matching flags. - */ -static bool -is_conninfo_option(const char *option, GenericOptionFlags flags) -{ - ConnectionOptions *opt; - - for (opt = libpq_conninfo_options; opt->optname != NULL; opt++) - if (flags & opt->optflags && strcmp(opt->optname, option) == 0) - return true; - return false; -} - -/* - * Validate the generic option given to SERVER or USER MAPPING. - * Raise an ERROR if the option or its value is considered - * invalid. - * - * Valid server options are all libpq conninfo options except - * user and password -- these may only appear in USER MAPPING options. - */ -void -_pg_validateOptionList(ForeignDataWrapper *fdw, GenericOptionFlags flags, - List *options) -{ - ListCell *cell; - - foreach (cell, options) - { - DefElem *def = lfirst(cell); - - if (!is_conninfo_option(def->defname, flags)) - { - ConnectionOptions *opt; - StringInfoData buf; - const char *objtype; - - /* - * Unknown option specified, complain about it. Provide a hint - * with list of valid options for the object. - */ - initStringInfo(&buf); - for (opt = libpq_conninfo_options; opt->optname != NULL; opt++) - if (flags & opt->optflags) - appendStringInfo(&buf, "%s%s", (buf.len > 0) ? ", " : "", - opt->optname); - - if (flags & ServerOpt) - objtype = "server"; - else if (flags & UserMappingOpt) - objtype = "user mapping"; - else if (flags & FdwOpt) - objtype = "foreign-data wrapper"; - else - objtype = "???"; - - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("invalid option \"%s\" to %s", def->defname, objtype), - errhint("valid %s options are: %s", objtype, buf.data))); - } - } -} -- cgit v1.2.3