summaryrefslogtreecommitdiff
path: root/src/backend/parser
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/parser')
-rw-r--r--src/backend/parser/gram.y116
-rw-r--r--src/backend/parser/parse_clause.c11
2 files changed, 64 insertions, 63 deletions
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index 7a890091a8..9821bc15b5 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.660 2009/03/07 00:13:57 alvherre Exp $
+ * $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.661 2009/04/04 21:12:31 tgl Exp $
*
* HISTORY
* AUTHOR DATE MAJOR EVENT
@@ -163,8 +163,6 @@ static TypeName *TableFuncTypeName(List *columns);
FunctionParameterMode fun_param_mode;
FuncWithArgs *funwithargs;
DefElem *defelt;
- OptionDefElem *optdef;
- ReloptElem *reloptel;
SortBy *sortby;
WindowDef *windef;
JoinExpr *jexpr;
@@ -343,8 +341,7 @@ static TypeName *TableFuncTypeName(List *columns);
%type <node> TableElement ConstraintElem TableFuncElement
%type <node> columnDef
-%type <defelt> def_elem old_aggr_elem
-%type <reloptel> reloption_elem
+%type <defelt> def_elem reloption_elem old_aggr_elem
%type <node> def_arg columnElem where_clause where_or_current_clause
a_expr b_expr c_expr func_expr AexprConst indirection_el
columnref in_expr having_clause func_table array_expr
@@ -366,8 +363,7 @@ static TypeName *TableFuncTypeName(List *columns);
%type <str> generic_option_name
%type <node> generic_option_arg
-%type <defelt> generic_option_elem
-%type <optdef> alter_generic_option_elem
+%type <defelt> generic_option_elem alter_generic_option_elem
%type <list> generic_option_list alter_generic_option_list
%type <typnam> Typename SimpleTypename ConstTypename
@@ -1837,22 +1833,24 @@ reloption_list:
| reloption_list ',' reloption_elem { $$ = lappend($1, $3); }
;
+/* This should match def_elem and also allow qualified names */
reloption_elem:
ColLabel '=' def_arg
{
- $$ = makeReloptElem($1, NULL, (Node *) $3);
+ $$ = makeDefElem($1, (Node *) $3);
}
| ColLabel
{
- $$ = makeReloptElem($1, NULL, NULL);
+ $$ = makeDefElem($1, NULL);
}
| ColLabel '.' ColLabel '=' def_arg
{
- $$ = makeReloptElem($3, $1, (Node *) $5);
+ $$ = makeDefElemExtended($1, $3, (Node *) $5,
+ DEFELEM_UNSPEC);
}
| ColLabel '.' ColLabel
{
- $$ = makeReloptElem($3, $1, NULL);
+ $$ = makeDefElemExtended($1, $3, NULL, DEFELEM_UNSPEC);
}
;
@@ -2482,8 +2480,8 @@ OptInherit: INHERITS '(' qualified_name_list ')' { $$ = $3; }
/* WITH (options) is preferred, WITH OIDS and WITHOUT OIDS are legacy forms */
OptWith:
WITH reloptions { $$ = $2; }
- | WITH OIDS { $$ = list_make1(reloptWithOids(true)); }
- | WITHOUT OIDS { $$ = list_make1(reloptWithOids(false)); }
+ | WITH OIDS { $$ = list_make1(defWithOids(true)); }
+ | WITHOUT OIDS { $$ = list_make1(defWithOids(false)); }
| /*EMPTY*/ { $$ = NIL; }
;
@@ -2887,70 +2885,72 @@ AlterFdwStmt: ALTER FOREIGN DATA_P WRAPPER name validator_clause alter_generic_o
/* Options definition for CREATE FDW, SERVER and USER MAPPING */
create_generic_options:
- OPTIONS '(' generic_option_list ')' { $$ = $3; }
- | /*EMPTY*/ { $$ = NIL; }
+ OPTIONS '(' generic_option_list ')' { $$ = $3; }
+ | /*EMPTY*/ { $$ = NIL; }
;
-generic_option_list: generic_option_elem
- {
- $$ = list_make1(makeOptionDefElem(ALTER_OPT_ADD, $1));
- }
- | generic_option_list ',' generic_option_elem
- {
- $$ = lappend($1, makeOptionDefElem(ALTER_OPT_ADD, $3));
- }
+generic_option_list:
+ generic_option_elem
+ {
+ $$ = list_make1($1);
+ }
+ | generic_option_list ',' generic_option_elem
+ {
+ $$ = lappend($1, $3);
+ }
;
/* Options definition for ALTER FDW, SERVER and USER MAPPING */
alter_generic_options:
- OPTIONS '(' alter_generic_option_list ')' { $$ = $3; }
+ OPTIONS '(' alter_generic_option_list ')' { $$ = $3; }
;
alter_generic_option_list:
- alter_generic_option_elem
- {
- $$ = list_make1($1);
- }
- | generic_option_elem
- {
- $$ = list_make1(makeOptionDefElem(ALTER_OPT_ADD, $1));
- }
- | alter_generic_option_list ',' alter_generic_option_elem
- {
- $$ = lappend($1, $3);
- }
- | alter_generic_option_list ',' generic_option_elem
- {
- $$ = lappend($1, makeOptionDefElem(ALTER_OPT_ADD, $3));
- }
+ alter_generic_option_elem
+ {
+ $$ = list_make1($1);
+ }
+ | alter_generic_option_list ',' alter_generic_option_elem
+ {
+ $$ = lappend($1, $3);
+ }
;
alter_generic_option_elem:
- ADD_P generic_option_elem
- {
- $$ = makeOptionDefElem(ALTER_OPT_ADD, $2);
- }
- | SET generic_option_elem
- {
- $$ = makeOptionDefElem(ALTER_OPT_SET, $2);
- }
- | DROP generic_option_name
- {
- $$ = makeOptionDefElem(ALTER_OPT_DROP,
- makeDefElem($2, NULL));
- }
+ generic_option_elem
+ {
+ $$ = $1;
+ }
+ | SET generic_option_elem
+ {
+ $$ = $2;
+ $$->defaction = DEFELEM_SET;
+ }
+ | ADD_P generic_option_elem
+ {
+ $$ = $2;
+ $$->defaction = DEFELEM_ADD;
+ }
+ | DROP generic_option_name
+ {
+ $$ = makeDefElemExtended(NULL, $2, NULL, DEFELEM_DROP);
+ }
;
generic_option_elem:
- generic_option_name generic_option_arg { $$ = makeDefElem($1, $2); }
+ generic_option_name generic_option_arg
+ {
+ $$ = makeDefElem($1, $2);
+ }
;
generic_option_name:
- attr_name { $$ = $1; }
+ ColLabel { $$ = $1; }
;
+/* We could use def_arg here, but the spec only requires string literals */
generic_option_arg:
- Sconst { $$ = (Node *)makeString($1); }
+ Sconst { $$ = (Node *) makeString($1); }
;
/*****************************************************************************
@@ -3504,9 +3504,9 @@ def_list: def_elem { $$ = list_make1($1); }
| def_list ',' def_elem { $$ = lappend($1, $3); }
;
-def_elem: ColLabel '=' def_arg
+def_elem: ColLabel '=' def_arg
{
- $$ = makeDefElem($1, (Node *)$3);
+ $$ = makeDefElem($1, (Node *) $3);
}
| ColLabel
{
diff --git a/src/backend/parser/parse_clause.c b/src/backend/parser/parse_clause.c
index 24b9ee22c7..2deffa9139 100644
--- a/src/backend/parser/parse_clause.c
+++ b/src/backend/parser/parse_clause.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/parser/parse_clause.c,v 1.187 2009/02/02 19:31:39 alvherre Exp $
+ * $PostgreSQL: pgsql/src/backend/parser/parse_clause.c,v 1.188 2009/04/04 21:12:31 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -233,7 +233,7 @@ interpretInhOption(InhOption inhOpt)
}
/*
- * Given a relation-options list (of ReloptElems), return true iff the specified
+ * Given a relation-options list (of DefElems), return true iff the specified
* table/result set should be created with OIDs. This needs to be done after
* parsing the query string because the return value can depend upon the
* default_with_oids GUC var.
@@ -246,10 +246,11 @@ interpretOidsOption(List *defList)
/* Scan list to see if OIDS was included */
foreach(cell, defList)
{
- ReloptElem *def = (ReloptElem *) lfirst(cell);
+ DefElem *def = (DefElem *) lfirst(cell);
- if (pg_strcasecmp(def->optname, "oids") == 0)
- return reloptGetBoolean(def);
+ if (def->defnamespace == NULL &&
+ pg_strcasecmp(def->defname, "oids") == 0)
+ return defGetBoolean(def);
}
/* OIDS option was not specified, so use default. */