mirror of
https://github.com/postgres/postgres.git
synced 2025-10-18 04:29:09 +03:00
Create the catalog infrastructure for foreign-data-wrapper handlers.
Add a fdwhandler column to pg_foreign_data_wrapper, plus HANDLER options in the CREATE FOREIGN DATA WRAPPER and ALTER FOREIGN DATA WRAPPER commands, plus pg_dump support for same. Also invent a new pseudotype fdw_handler with properties similar to language_handler. This is split out of the "FDW API" patch for ease of review; it's all stuff we will certainly need, regardless of any other details of the FDW API. FDW handler functions will not actually get called yet. In passing, fix some omissions and infelicities in foreigncmds.c. Shigeru Hanada, Jan Urbanski, Heikki Linnakangas
This commit is contained in:
@@ -309,6 +309,9 @@ static RangeVar *makeRangeVarFromAnyName(List *names, int position, core_yyscan_
|
||||
create_generic_options alter_generic_options
|
||||
relation_expr_list dostmt_opt_list
|
||||
|
||||
%type <list> opt_fdw_options fdw_options
|
||||
%type <defelt> fdw_option
|
||||
|
||||
%type <range> OptTempTableName
|
||||
%type <into> into_clause create_as_target
|
||||
|
||||
@@ -3505,20 +3508,37 @@ AlterExtensionContentsStmt:
|
||||
/*****************************************************************************
|
||||
*
|
||||
* QUERY:
|
||||
* CREATE FOREIGN DATA WRAPPER name [ VALIDATOR name ]
|
||||
* CREATE FOREIGN DATA WRAPPER name options
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
CreateFdwStmt: CREATE FOREIGN DATA_P WRAPPER name opt_validator create_generic_options
|
||||
CreateFdwStmt: CREATE FOREIGN DATA_P WRAPPER name opt_fdw_options create_generic_options
|
||||
{
|
||||
CreateFdwStmt *n = makeNode(CreateFdwStmt);
|
||||
n->fdwname = $5;
|
||||
n->validator = $6;
|
||||
n->func_options = $6;
|
||||
n->options = $7;
|
||||
$$ = (Node *) n;
|
||||
}
|
||||
;
|
||||
|
||||
fdw_option:
|
||||
HANDLER handler_name { $$ = makeDefElem("handler", (Node *)$2); }
|
||||
| NO HANDLER { $$ = makeDefElem("handler", NULL); }
|
||||
| VALIDATOR handler_name { $$ = makeDefElem("validator", (Node *)$2); }
|
||||
| NO VALIDATOR { $$ = makeDefElem("validator", NULL); }
|
||||
;
|
||||
|
||||
fdw_options:
|
||||
fdw_option { $$ = list_make1($1); }
|
||||
| fdw_options fdw_option { $$ = lappend($1, $2); }
|
||||
;
|
||||
|
||||
opt_fdw_options:
|
||||
fdw_options { $$ = $1; }
|
||||
| /*EMPTY*/ { $$ = NIL; }
|
||||
;
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* QUERY :
|
||||
@@ -3547,32 +3567,24 @@ DropFdwStmt: DROP FOREIGN DATA_P WRAPPER name opt_drop_behavior
|
||||
/*****************************************************************************
|
||||
*
|
||||
* QUERY :
|
||||
* ALTER FOREIGN DATA WRAPPER name
|
||||
* ALTER FOREIGN DATA WRAPPER name options
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
AlterFdwStmt: ALTER FOREIGN DATA_P WRAPPER name validator_clause alter_generic_options
|
||||
AlterFdwStmt: ALTER FOREIGN DATA_P WRAPPER name opt_fdw_options alter_generic_options
|
||||
{
|
||||
AlterFdwStmt *n = makeNode(AlterFdwStmt);
|
||||
n->fdwname = $5;
|
||||
n->validator = $6;
|
||||
n->change_validator = true;
|
||||
n->func_options = $6;
|
||||
n->options = $7;
|
||||
$$ = (Node *) n;
|
||||
}
|
||||
| ALTER FOREIGN DATA_P WRAPPER name validator_clause
|
||||
| ALTER FOREIGN DATA_P WRAPPER name fdw_options
|
||||
{
|
||||
AlterFdwStmt *n = makeNode(AlterFdwStmt);
|
||||
n->fdwname = $5;
|
||||
n->validator = $6;
|
||||
n->change_validator = true;
|
||||
$$ = (Node *) n;
|
||||
}
|
||||
| ALTER FOREIGN DATA_P WRAPPER name alter_generic_options
|
||||
{
|
||||
AlterFdwStmt *n = makeNode(AlterFdwStmt);
|
||||
n->fdwname = $5;
|
||||
n->options = $6;
|
||||
n->func_options = $6;
|
||||
n->options = NIL;
|
||||
$$ = (Node *) n;
|
||||
}
|
||||
;
|
||||
|
Reference in New Issue
Block a user