diff options
author | Peter Eisentraut <peter_e@gmx.net> | 2009-02-24 10:06:36 +0000 |
---|---|---|
committer | Peter Eisentraut <peter_e@gmx.net> | 2009-02-24 10:06:36 +0000 |
commit | 7babccb91504fd4a958ff778547af1a8cbc1f8f2 (patch) | |
tree | ce41105b1add6e2c61ae7acc8e3ee6c2175a41af /src/backend/parser | |
parent | f73bed308a8ccaea9082634f417966f7beb71614 (diff) | |
download | postgresql-7babccb91504fd4a958ff778547af1a8cbc1f8f2.tar.gz postgresql-7babccb91504fd4a958ff778547af1a8cbc1f8f2.zip |
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.
Diffstat (limited to 'src/backend/parser')
-rw-r--r-- | src/backend/parser/gram.y | 40 | ||||
-rw-r--r-- | src/backend/parser/keywords.c | 3 |
2 files changed, 21 insertions, 22 deletions
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index 6688324e05a..3dadbcffdeb 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -11,7 +11,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.658 2009/02/11 21:11:16 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.659 2009/02/24 10:06:33 petere Exp $ * * HISTORY * AUTHOR DATE MAJOR EVENT @@ -254,7 +254,7 @@ static TypeName *TableFuncTypeName(List *columns); index_name name file_name cluster_index_specification %type <list> func_name handler_name qual_Op qual_all_Op subquery_Op - opt_class opt_validator + opt_class opt_validator validator_clause %type <range> qualified_name OptConstrFromTable @@ -469,7 +469,7 @@ static TypeName *TableFuncTypeName(List *columns); KEY LANCOMPILER LANGUAGE LARGE_P LAST_P LEADING LEAST LEFT LEVEL - LIBRARY LIKE LIMIT LISTEN LOAD LOCAL LOCALTIME LOCALTIMESTAMP LOCATION + LIKE LIMIT LISTEN LOAD LOCAL LOCALTIME LOCALTIMESTAMP LOCATION LOCK_P LOGIN_P MAPPING MATCH MAXVALUE MINUTE_P MINVALUE MODE MONTH_P MOVE @@ -2724,8 +2724,13 @@ handler_name: | name attrs { $$ = lcons(makeString($1), $2); } ; -opt_validator: +validator_clause: VALIDATOR handler_name { $$ = $2; } + | NO VALIDATOR { $$ = NIL; } + ; + +opt_validator: + validator_clause { $$ = $1; } | /*EMPTY*/ { $$ = NIL; } ; @@ -2808,23 +2813,17 @@ DropTableSpaceStmt: DROP TABLESPACE name /***************************************************************************** * * QUERY: - * CREATE FOREIGN DATA WRAPPER name LIBRARY 'library_name' LANGUAGE C + * CREATE FOREIGN DATA WRAPPER name [ VALIDATOR name ] * *****************************************************************************/ -CreateFdwStmt: CREATE FOREIGN DATA_P WRAPPER name LIBRARY Sconst LANGUAGE ColId create_generic_options +CreateFdwStmt: CREATE FOREIGN DATA_P WRAPPER name opt_validator create_generic_options { CreateFdwStmt *n = makeNode(CreateFdwStmt); n->fdwname = $5; - n->library = $7; - n->options = $10; + n->validator = $6; + n->options = $7; $$ = (Node *) n; - - if (pg_strcasecmp($9, "C") != 0) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("language for foreign-data wrapper must be C"), - scanner_errposition(@9))); } ; @@ -2860,19 +2859,21 @@ DropFdwStmt: DROP FOREIGN DATA_P WRAPPER name opt_drop_behavior * ****************************************************************************/ -AlterFdwStmt: ALTER FOREIGN DATA_P WRAPPER name LIBRARY Sconst alter_generic_options +AlterFdwStmt: ALTER FOREIGN DATA_P WRAPPER name validator_clause alter_generic_options { AlterFdwStmt *n = makeNode(AlterFdwStmt); n->fdwname = $5; - n->library = $7; - n->options = $8; + n->validator = $6; + n->change_validator = true; + n->options = $7; $$ = (Node *) n; } - | ALTER FOREIGN DATA_P WRAPPER name LIBRARY Sconst + | ALTER FOREIGN DATA_P WRAPPER name validator_clause { AlterFdwStmt *n = makeNode(AlterFdwStmt); n->fdwname = $5; - n->library = $7; + n->validator = $6; + n->change_validator = true; $$ = (Node *) n; } | ALTER FOREIGN DATA_P WRAPPER name alter_generic_options @@ -10231,7 +10232,6 @@ unreserved_keyword: | INVOKER | ISOLATION | KEY - | LIBRARY | LANCOMPILER | LANGUAGE | LARGE_P diff --git a/src/backend/parser/keywords.c b/src/backend/parser/keywords.c index 3f3388e7fef..48218df9c4b 100644 --- a/src/backend/parser/keywords.c +++ b/src/backend/parser/keywords.c @@ -11,7 +11,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/parser/keywords.c,v 1.209 2009/01/01 17:23:45 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/parser/keywords.c,v 1.210 2009/02/24 10:06:33 petere Exp $ * *------------------------------------------------------------------------- */ @@ -230,7 +230,6 @@ const ScanKeyword ScanKeywords[] = { {"least", LEAST, COL_NAME_KEYWORD}, {"left", LEFT, TYPE_FUNC_NAME_KEYWORD}, {"level", LEVEL, UNRESERVED_KEYWORD}, - {"library", LIBRARY, UNRESERVED_KEYWORD}, {"like", LIKE, TYPE_FUNC_NAME_KEYWORD}, {"limit", LIMIT, RESERVED_KEYWORD}, {"listen", LISTEN, UNRESERVED_KEYWORD}, |