Commit 42423c71 authored by Bruce Momjian's avatar Bruce Momjian

Manually indent gram.y to be consistent.

parent 134a1c81
%{
%{
/*#define YYDEBUG 1*/
/*-------------------------------------------------------------------------
......@@ -11,7 +11,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.325 2002/06/17 07:00:24 momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.326 2002/06/17 20:27:43 momjian Exp $
*
* HISTORY
* AUTHOR DATE MAJOR EVENT
......@@ -186,8 +186,7 @@ static void doNegateFloat(Value *v);
%type <range> qualified_name, OptConstrFromTable
%type <str> opt_id,
all_Op, MathOp, opt_name, SpecialRuleRelation
%type <str> opt_id, all_Op, MathOp, opt_name, SpecialRuleRelation
%type <str> opt_level, opt_encoding
%type <node> grantee
......@@ -431,8 +430,7 @@ static void doNegateFloat(Value *v);
* psql already handles such cases, but other interfaces don't.
* bjm 1999/10/05
*/
stmtblock: stmtmulti
{ parsetree = $1; }
stmtblock: stmtmulti { parsetree = $1; }
;
/* the thrashing around here is to discard "empty" statements... */
......@@ -450,7 +448,8 @@ stmtmulti: stmtmulti ';' stmt
}
;
stmt : AlterDatabaseSetStmt
stmt :
AlterDatabaseSetStmt
| AlterGroupStmt
| AlterSchemaStmt
| AlterTableStmt
......@@ -520,7 +519,8 @@ stmt : AlterDatabaseSetStmt
*
*****************************************************************************/
CreateUserStmt: CREATE USER UserId opt_with OptUserList
CreateUserStmt:
CREATE USER UserId opt_with OptUserList
{
CreateUserStmt *n = makeNode(CreateUserStmt);
n->user = $3;
......@@ -541,7 +541,8 @@ opt_with: WITH { $$ = TRUE; }
*
*****************************************************************************/
AlterUserStmt: ALTER USER UserId opt_with OptUserList
AlterUserStmt:
ALTER USER UserId opt_with OptUserList
{
AlterUserStmt *n = makeNode(AlterUserStmt);
n->user = $3;
......@@ -551,7 +552,8 @@ AlterUserStmt: ALTER USER UserId opt_with OptUserList
;
AlterUserSetStmt: ALTER USER UserId SET set_rest
AlterUserSetStmt:
ALTER USER UserId SET set_rest
{
AlterUserSetStmt *n = makeNode(AlterUserSetStmt);
n->user = $3;
......@@ -577,7 +579,8 @@ AlterUserSetStmt: ALTER USER UserId SET set_rest
*
*****************************************************************************/
DropUserStmt: DROP USER user_list
DropUserStmt:
DROP USER user_list
{
DropUserStmt *n = makeNode(DropUserStmt);
n->users = $3;
......@@ -588,11 +591,13 @@ DropUserStmt: DROP USER user_list
/*
* Options for CREATE USER and ALTER USER
*/
OptUserList: OptUserList OptUserElem { $$ = lappend($1, $2); }
OptUserList:
OptUserList OptUserElem { $$ = lappend($1, $2); }
| /* EMPTY */ { $$ = NIL; }
;
OptUserElem: PASSWORD Sconst
OptUserElem:
PASSWORD Sconst
{
$$ = makeNode(DefElem);
$$->defname = "password";
......@@ -673,7 +678,8 @@ user_list: user_list ',' UserId
*
*****************************************************************************/
CreateGroupStmt: CREATE GROUP_P UserId opt_with OptGroupList
CreateGroupStmt:
CREATE GROUP_P UserId opt_with OptGroupList
{
CreateGroupStmt *n = makeNode(CreateGroupStmt);
n->name = $3;
......@@ -685,11 +691,13 @@ CreateGroupStmt: CREATE GROUP_P UserId opt_with OptGroupList
/*
* Options for CREATE GROUP
*/
OptGroupList: OptGroupList OptGroupElem { $$ = lappend($1, $2); }
OptGroupList:
OptGroupList OptGroupElem { $$ = lappend($1, $2); }
| /* EMPTY */ { $$ = NIL; }
;
OptGroupElem: USER user_list
OptGroupElem:
USER user_list
{
$$ = makeNode(DefElem);
$$->defname = "userElts";
......@@ -711,7 +719,8 @@ OptGroupElem: USER user_list
*
*****************************************************************************/
AlterGroupStmt: ALTER GROUP_P UserId add_drop USER user_list
AlterGroupStmt:
ALTER GROUP_P UserId add_drop USER user_list
{
AlterGroupStmt *n = makeNode(AlterGroupStmt);
n->name = $3;
......@@ -733,7 +742,8 @@ add_drop: ADD { $$ = +1; }
*
*****************************************************************************/
DropGroupStmt: DROP GROUP_P UserId
DropGroupStmt:
DROP GROUP_P UserId
{
DropGroupStmt *n = makeNode(DropGroupStmt);
n->name = $3;
......@@ -749,7 +759,8 @@ DropGroupStmt: DROP GROUP_P UserId
*
*****************************************************************************/
CreateSchemaStmt: CREATE SCHEMA OptSchemaName AUTHORIZATION UserId OptSchemaEltList
CreateSchemaStmt:
CREATE SCHEMA OptSchemaName AUTHORIZATION UserId OptSchemaEltList
{
CreateSchemaStmt *n = makeNode(CreateSchemaStmt);
/* One can omit the schema name or the authorization id... */
......@@ -772,23 +783,27 @@ CreateSchemaStmt: CREATE SCHEMA OptSchemaName AUTHORIZATION UserId OptSchemaElt
}
;
AlterSchemaStmt: ALTER SCHEMA ColId
AlterSchemaStmt:
ALTER SCHEMA ColId
{
elog(ERROR, "ALTER SCHEMA not yet supported");
}
;
DropSchemaStmt: DROP SCHEMA ColId
DropSchemaStmt:
DROP SCHEMA ColId
{
elog(ERROR, "DROP SCHEMA not yet supported");
}
;
OptSchemaName: ColId { $$ = $1; }
OptSchemaName:
ColId { $$ = $1; }
| /* EMPTY */ { $$ = NULL; }
;
OptSchemaEltList: OptSchemaEltList schema_stmt { $$ = lappend($1, $2); }
OptSchemaEltList:
OptSchemaEltList schema_stmt { $$ = lappend($1, $2); }
| /* EMPTY */ { $$ = NIL; }
;
......@@ -796,7 +811,8 @@ OptSchemaEltList: OptSchemaEltList schema_stmt { $$ = lappend($1, $2); }
* schema_stmt are the ones that can show up inside a CREATE SCHEMA
* statement (in addition to by themselves).
*/
schema_stmt: CreateStmt
schema_stmt:
CreateStmt
| GrantStmt
| ViewStmt
;
......@@ -811,7 +827,8 @@ schema_stmt: CreateStmt
*
*****************************************************************************/
VariableSetStmt: SET set_rest
VariableSetStmt:
SET set_rest
{
VariableSetStmt *n = $2;
n->is_local = false;
......@@ -891,16 +908,14 @@ set_rest: ColId TO var_list_or_default
}
;
var_list_or_default: var_list
{ $$ = $1; }
| DEFAULT
{ $$ = NIL; }
var_list_or_default:
var_list { $$ = $1; }
| DEFAULT { $$ = NIL; }
;
var_list: var_value
{ $$ = makeList1($1); }
| var_list ',' var_value
{ $$ = lappend($1, $3); }
var_list:
var_value { $$ = makeList1($1); }
| var_list ',' var_value { $$ = lappend($1, $3); }
;
var_value: opt_boolean
......@@ -915,7 +930,8 @@ opt_level: READ COMMITTED { $$ = "read committed"; }
| SERIALIZABLE { $$ = "serializable"; }
;
opt_boolean: TRUE_P { $$ = "true"; }
opt_boolean:
TRUE_P { $$ = "true"; }
| FALSE_P { $$ = "false"; }
| ON { $$ = "on"; }
| OFF { $$ = "off"; }
......@@ -929,7 +945,8 @@ opt_boolean: TRUE_P { $$ = "true"; }
* ColId gives reduce/reduce errors against ConstInterval and LOCAL,
* so use IDENT and reject anything which is a reserved word.
*/
zone_value: Sconst
zone_value:
Sconst
{
$$ = makeStringConst($1, NULL);
}
......@@ -943,7 +960,8 @@ zone_value: Sconst
if ($3 != -1)
{
if (($3 & ~(MASK(HOUR) | MASK(MINUTE))) != 0)
elog(ERROR, "Time zone interval must be HOUR or HOUR TO MINUTE");
elog(ERROR,
"Time zone interval must be HOUR or HOUR TO MINUTE");
n->typename->typmod = ((($3 & 0x7FFF) << 16) | 0xFFFF);
}
$$ = (Node *)n;
......@@ -952,12 +970,14 @@ zone_value: Sconst
{
A_Const *n = (A_Const *) makeStringConst($5, $1);
if (($3 < 0) || ($3 > MAX_INTERVAL_PRECISION))
elog(ERROR, "INTERVAL(%d) precision must be between %d and %d",
elog(ERROR,
"INTERVAL(%d) precision must be between %d and %d",
$3, 0, MAX_INTERVAL_PRECISION);
if ($6 != -1)
{
if (($6 & ~(MASK(HOUR) | MASK(MINUTE))) != 0)
elog(ERROR, "Time zone interval must be HOUR or HOUR TO MINUTE");
elog(ERROR,
"Time zone interval must be HOUR or HOUR TO MINUTE");
n->typename->typmod = ((($6 & 0x7FFF) << 16) | $3);
}
else
......@@ -972,17 +992,20 @@ zone_value: Sconst
| LOCAL { $$ = NULL; }
;
opt_encoding: Sconst { $$ = $1; }
opt_encoding:
Sconst { $$ = $1; }
| DEFAULT { $$ = NULL; }
| /*EMPTY*/ { $$ = NULL; }
;
ColId_or_Sconst: ColId { $$ = $1; }
ColId_or_Sconst:
ColId { $$ = $1; }
| SCONST { $$ = $1; }
;
VariableShowStmt: SHOW ColId
VariableShowStmt:
SHOW ColId
{
VariableShowStmt *n = makeNode(VariableShowStmt);
n->name = $2;
......@@ -1014,7 +1037,8 @@ VariableShowStmt: SHOW ColId
}
;
VariableResetStmt: RESET ColId
VariableResetStmt:
RESET ColId
{
VariableResetStmt *n = makeNode(VariableResetStmt);
n->name = $2;
......@@ -1047,7 +1071,8 @@ VariableResetStmt: RESET ColId
;
ConstraintsSetStmt: SET CONSTRAINTS constraints_set_list constraints_set_mode
ConstraintsSetStmt:
SET CONSTRAINTS constraints_set_list constraints_set_mode
{
ConstraintsSetStmt *n = makeNode(ConstraintsSetStmt);
n->constraints = $3;
......@@ -1056,11 +1081,13 @@ ConstraintsSetStmt: SET CONSTRAINTS constraints_set_list constraints_set_mode
}
;
constraints_set_list: ALL { $$ = NIL; }
constraints_set_list:
ALL { $$ = NIL; }
| name_list { $$ = $1; }
;
constraints_set_mode: DEFERRED { $$ = TRUE; }
constraints_set_mode:
DEFERRED { $$ = TRUE; }
| IMMEDIATE { $$ = FALSE; }
;
......@@ -1068,13 +1095,15 @@ constraints_set_mode: DEFERRED { $$ = TRUE; }
/*
* Checkpoint statement
*/
CheckPointStmt: CHECKPOINT
CheckPointStmt:
CHECKPOINT
{
CheckPointStmt *n = makeNode(CheckPointStmt);
$$ = (Node *)n;
}
;
/*****************************************************************************
*
* ALTER TABLE variations
......@@ -1082,7 +1111,7 @@ CheckPointStmt: CHECKPOINT
*****************************************************************************/
AlterTableStmt:
/* ALTER TABLE <relation> ADD [COLUMN] <coldef> */
/* ALTER TABLE <relation> ADD [COLUMN] <coldef> */
ALTER TABLE relation_expr ADD opt_column columnDef
{
AlterTableStmt *n = makeNode(AlterTableStmt);
......@@ -1091,7 +1120,7 @@ AlterTableStmt:
n->def = $6;
$$ = (Node *)n;
}
/* ALTER TABLE <relation> ALTER [COLUMN] <colname> {SET DEFAULT <expr>|DROP DEFAULT} */
/* ALTER TABLE <relation> ALTER [COLUMN] <colname> {SET DEFAULT <expr>|DROP DEFAULT} */
| ALTER TABLE relation_expr ALTER opt_column ColId alter_column_default
{
AlterTableStmt *n = makeNode(AlterTableStmt);
......@@ -1101,7 +1130,7 @@ AlterTableStmt:
n->def = $7;
$$ = (Node *)n;
}
/* ALTER TABLE <relation> ALTER [COLUMN] <colname> DROP NOT NULL */
/* ALTER TABLE <relation> ALTER [COLUMN] <colname> DROP NOT NULL */
| ALTER TABLE relation_expr ALTER opt_column ColId DROP NOT NULL_P
{
AlterTableStmt *n = makeNode(AlterTableStmt);
......@@ -1110,7 +1139,7 @@ AlterTableStmt:
n->name = $6;
$$ = (Node *)n;
}
/* ALTER TABLE <relation> ALTER [COLUMN] <colname> SET NOT NULL */
/* ALTER TABLE <relation> ALTER [COLUMN] <colname> SET NOT NULL */
| ALTER TABLE relation_expr ALTER opt_column ColId SET NOT NULL_P
{
AlterTableStmt *n = makeNode(AlterTableStmt);
......@@ -1119,7 +1148,7 @@ AlterTableStmt:
n->name = $6;
$$ = (Node *)n;
}
/* ALTER TABLE <relation> ALTER [COLUMN] <colname> SET STATISTICS <Iconst> */
/* ALTER TABLE <relation> ALTER [COLUMN] <colname> SET STATISTICS <Iconst> */
| ALTER TABLE relation_expr ALTER opt_column ColId SET STATISTICS Iconst
{
AlterTableStmt *n = makeNode(AlterTableStmt);
......@@ -1129,7 +1158,7 @@ AlterTableStmt:
n->def = (Node *) makeInteger($9);
$$ = (Node *)n;
}
/* ALTER TABLE <relation> ALTER [COLUMN] <colname> SET STORAGE <storagemode> */
/* ALTER TABLE <relation> ALTER [COLUMN] <colname> SET STORAGE <storagemode> */
| ALTER TABLE relation_expr ALTER opt_column ColId SET STORAGE ColId
{
AlterTableStmt *n = makeNode(AlterTableStmt);
......@@ -1139,7 +1168,7 @@ AlterTableStmt:
n->def = (Node *) makeString($9);
$$ = (Node *)n;
}
/* ALTER TABLE <relation> DROP [COLUMN] <colname> {RESTRICT|CASCADE} */
/* ALTER TABLE <relation> DROP [COLUMN] <colname> {RESTRICT|CASCADE} */
| ALTER TABLE relation_expr DROP opt_column ColId drop_behavior
{
AlterTableStmt *n = makeNode(AlterTableStmt);
......@@ -1149,7 +1178,7 @@ AlterTableStmt:
n->behavior = $7;
$$ = (Node *)n;
}
/* ALTER TABLE <relation> ADD CONSTRAINT ... */
/* ALTER TABLE <relation> ADD CONSTRAINT ... */
| ALTER TABLE relation_expr ADD TableConstraint
{
AlterTableStmt *n = makeNode(AlterTableStmt);
......@@ -1158,7 +1187,7 @@ AlterTableStmt:
n->def = $5;
$$ = (Node *)n;
}
/* ALTER TABLE <relation> DROP CONSTRAINT <name> {RESTRICT|CASCADE} */
/* ALTER TABLE <relation> DROP CONSTRAINT <name> {RESTRICT|CASCADE} */
| ALTER TABLE relation_expr DROP CONSTRAINT name drop_behavior
{
AlterTableStmt *n = makeNode(AlterTableStmt);
......@@ -1168,7 +1197,7 @@ AlterTableStmt:
n->behavior = $7;
$$ = (Node *)n;
}
/* ALTER TABLE <name> CREATE TOAST TABLE */
/* ALTER TABLE <name> CREATE TOAST TABLE */
| ALTER TABLE qualified_name CREATE TOAST TABLE
{
AlterTableStmt *n = makeNode(AlterTableStmt);
......@@ -1177,7 +1206,7 @@ AlterTableStmt:
n->relation = $3;
$$ = (Node *)n;
}
/* ALTER TABLE <name> OWNER TO UserId */
/* ALTER TABLE <name> OWNER TO UserId */
| ALTER TABLE qualified_name OWNER TO UserId
{
AlterTableStmt *n = makeNode(AlterTableStmt);
......@@ -1201,11 +1230,13 @@ alter_column_default:
| DROP DEFAULT { $$ = NULL; }
;
drop_behavior: CASCADE { $$ = CASCADE; }
drop_behavior:
CASCADE { $$ = CASCADE; }
| RESTRICT { $$ = RESTRICT; }
;
opt_drop_behavior: CASCADE { $$ = CASCADE; }
opt_drop_behavior:
CASCADE { $$ = CASCADE; }
| RESTRICT { $$ = RESTRICT; }
| /* EMPTY */ { $$ = RESTRICT; /* default */ }
;
......@@ -1219,7 +1250,8 @@ opt_drop_behavior: CASCADE { $$ = CASCADE; }
*
*****************************************************************************/
ClosePortalStmt: CLOSE opt_id
ClosePortalStmt:
CLOSE opt_id
{
ClosePortalStmt *n = makeNode(ClosePortalStmt);
n->portalname = $2;
......@@ -1254,10 +1286,8 @@ CopyStmt: COPY opt_binary qualified_name opt_with_copy copy_dirn copy_file_name
}
;
copy_dirn: TO
{ $$ = TO; }
| FROM
{ $$ = FROM; }
copy_dirn: TO { $$ = TO; }
| FROM { $$ = FROM; }
;
/*
......@@ -1265,7 +1295,8 @@ copy_dirn: TO
* used depends on the direction. (It really doesn't make sense to copy from
* stdout. We silently correct the "typo". - AY 9/94
*/
copy_file_name: Sconst { $$ = $1; }
copy_file_name:
Sconst { $$ = $1; }
| STDIN { $$ = NULL; }
| STDOUT { $$ = NULL; }
;
......@@ -1274,14 +1305,16 @@ opt_binary: BINARY { $$ = TRUE; }
| /*EMPTY*/ { $$ = FALSE; }
;
opt_with_copy: WITH OIDS { $$ = TRUE; }
opt_with_copy:
WITH OIDS { $$ = TRUE; }
| /*EMPTY*/ { $$ = FALSE; }
;
/*
* the default copy delimiter is tab but the user can configure it
*/
copy_delimiter: opt_using DELIMITERS Sconst { $$ = $3; }
copy_delimiter:
opt_using DELIMITERS Sconst { $$ = $3; }
| /*EMPTY*/ { $$ = "\t"; }
;
......@@ -1334,7 +1367,8 @@ OptTemp: TEMPORARY { $$ = TRUE; }
| /*EMPTY*/ { $$ = FALSE; }
;
OptTableElementList: OptTableElementList ',' OptTableElement
OptTableElementList:
OptTableElementList ',' OptTableElement
{
if ($3 != NULL)
$$ = lappend($1, $3);
......@@ -1351,7 +1385,8 @@ OptTableElementList: OptTableElementList ',' OptTableElement
| /*EMPTY*/ { $$ = NIL; }
;
OptTableElement: columnDef { $$ = $1; }
OptTableElement:
columnDef { $$ = $1; }
| TableConstraint { $$ = $1; }
;
......@@ -1370,7 +1405,8 @@ columnDef: ColId Typename ColQualList opt_collate
}
;
ColQualList: ColQualList ColConstraint { $$ = lappend($1, $2); }
ColQualList:
ColQualList ColConstraint { $$ = lappend($1, $2); }
| /*EMPTY*/ { $$ = NIL; }
;
......@@ -1396,10 +1432,8 @@ ColConstraint:
}
$$ = $3;
}
| ColConstraintElem
{ $$ = $1; }
| ConstraintAttr
{ $$ = $1; }
| ColConstraintElem { $$ = $1; }
| ConstraintAttr { $$ = $1; }
;
/* DEFAULT NULL is already the default for Postgres.
......@@ -1512,7 +1546,8 @@ ColConstraintElem:
* See also ConstraintAttributeSpec, which can be used in places where
* there is no parsing conflict.
*/
ConstraintAttr: DEFERRABLE
ConstraintAttr:
DEFERRABLE
{
Constraint *n = makeNode(Constraint);
n->contype = CONSTR_ATTR_DEFERRABLE;
......@@ -1543,7 +1578,8 @@ ConstraintAttr: DEFERRABLE
* a column definition. ColConstraintElem specifies the embedded form.
* - thomas 1997-12-03
*/
TableConstraint: CONSTRAINT name ConstraintElem
TableConstraint:
CONSTRAINT name ConstraintElem
{
switch (nodeTag($3))
{
......@@ -1564,11 +1600,11 @@ TableConstraint: CONSTRAINT name ConstraintElem
}
$$ = $3;
}
| ConstraintElem
{ $$ = $1; }
| ConstraintElem { $$ = $1; }
;
ConstraintElem: CHECK '(' a_expr ')'
ConstraintElem:
CHECK '(' a_expr ')'
{
Constraint *n = makeNode(Constraint);
n->contype = CONSTR_CHECK;
......@@ -1613,14 +1649,13 @@ ConstraintElem: CHECK '(' a_expr ')'
}
;
opt_column_list: '(' columnList ')' { $$ = $2; }
opt_column_list:
'(' columnList ')' { $$ = $2; }
| /*EMPTY*/ { $$ = NIL; }
;
columnList: columnList ',' columnElem
{ $$ = lappend($1, $3); }
| columnElem
{ $$ = makeList1($1); }
columnList: columnList ',' columnElem { $$ = lappend($1, $3); }
| columnElem { $$ = makeList1($1); }
;
columnElem: ColId
......@@ -1631,10 +1666,7 @@ columnElem: ColId
}
;
key_match: MATCH FULL
{
$$ = "FULL";
}
key_match: MATCH FULL { $$ = "FULL"; }
| MATCH PARTIAL
{
elog(ERROR, "FOREIGN KEY/MATCH PARTIAL not yet implemented");
......@@ -1646,7 +1678,8 @@ key_match: MATCH FULL
}
;
key_actions: key_delete { $$ = $1; }
key_actions:
key_delete { $$ = $1; }
| key_update { $$ = $1; }
| key_delete key_update { $$ = $1 | $2; }
| key_update key_delete { $$ = $1 | $2; }
......@@ -1659,7 +1692,8 @@ key_delete: ON DELETE_P key_reference { $$ = $3 << FKCONSTR_ON_DELETE_SHIFT; }
key_update: ON UPDATE key_reference { $$ = $3 << FKCONSTR_ON_UPDATE_SHIFT; }
;
key_reference: NO ACTION { $$ = FKCONSTR_ON_KEY_NOACTION; }
key_reference:
NO ACTION { $$ = FKCONSTR_ON_KEY_NOACTION; }
| RESTRICT { $$ = FKCONSTR_ON_KEY_RESTRICT; }
| CASCADE { $$ = FKCONSTR_ON_KEY_CASCADE; }
| SET NULL_P { $$ = FKCONSTR_ON_KEY_SETNULL; }
......@@ -1670,7 +1704,8 @@ OptInherit: INHERITS '(' qualified_name_list ')' { $$ = $3; }
| /*EMPTY*/ { $$ = NIL; }
;
OptWithOids: WITH OIDS { $$ = TRUE; }
OptWithOids:
WITH OIDS { $$ = TRUE; }
| WITHOUT OIDS { $$ = FALSE; }
| /*EMPTY*/ { $$ = TRUE; }
;
......@@ -1681,7 +1716,8 @@ OptWithOids: WITH OIDS { $$ = TRUE; }
* SELECT ... INTO.
*/
CreateAsStmt: CREATE OptTemp TABLE qualified_name OptCreateAs AS SelectStmt
CreateAsStmt:
CREATE OptTemp TABLE qualified_name OptCreateAs AS SelectStmt
{
/*
* When the SelectStmt is a set-operation tree, we must
......@@ -1700,15 +1736,18 @@ CreateAsStmt: CREATE OptTemp TABLE qualified_name OptCreateAs AS SelectStmt
}
;
OptCreateAs: '(' CreateAsList ')' { $$ = $2; }
OptCreateAs:
'(' CreateAsList ')' { $$ = $2; }
| /*EMPTY*/ { $$ = NIL; }
;
CreateAsList: CreateAsList ',' CreateAsElement { $$ = lappend($1, $3); }
CreateAsList:
CreateAsList ',' CreateAsElement { $$ = lappend($1, $3); }
| CreateAsElement { $$ = makeList1($1); }
;
CreateAsElement: ColId
CreateAsElement:
ColId
{
ColumnDef *n = makeNode(ColumnDef);
n->colname = $1;
......@@ -1729,7 +1768,8 @@ CreateAsElement: ColId
*
*****************************************************************************/
CreateSeqStmt: CREATE OptTemp SEQUENCE qualified_name OptSeqList
CreateSeqStmt:
CREATE OptTemp SEQUENCE qualified_name OptSeqList
{
CreateSeqStmt *n = makeNode(CreateSeqStmt);
$4->istemp = $2;
......@@ -1739,8 +1779,7 @@ CreateSeqStmt: CREATE OptTemp SEQUENCE qualified_name OptSeqList
}
;
OptSeqList: OptSeqList OptSeqElem
{ $$ = lappend($1, $2); }
OptSeqList: OptSeqList OptSeqElem { $$ = lappend($1, $2); }
| { $$ = NIL; }
;
......@@ -1782,14 +1821,12 @@ OptSeqElem: CACHE NumericOnly
}
;
NumericOnly: FloatOnly { $$ = $1; }
NumericOnly:
FloatOnly { $$ = $1; }
| IntegerOnly { $$ = $1; }
;
FloatOnly: FCONST
{
$$ = makeFloat($1);
}
FloatOnly: FCONST { $$ = makeFloat($1); }
| '-' FCONST
{
$$ = makeFloat($2);
......@@ -1797,7 +1834,8 @@ FloatOnly: FCONST
}
;
IntegerOnly: Iconst
IntegerOnly:
Iconst
{
$$ = makeInteger($1);
}
......@@ -1816,7 +1854,8 @@ IntegerOnly: Iconst
*
*****************************************************************************/
CreatePLangStmt: CREATE opt_trusted opt_procedural LANGUAGE ColId_or_Sconst
CreatePLangStmt:
CREATE opt_trusted opt_procedural LANGUAGE ColId_or_Sconst
HANDLER handler_name opt_validator opt_lancompiler
{
CreatePLangStmt *n = makeNode(CreatePLangStmt);
......@@ -1829,7 +1868,8 @@ CreatePLangStmt: CREATE opt_trusted opt_procedural LANGUAGE ColId_or_Sconst
}
;
opt_trusted: TRUSTED { $$ = TRUE; }
opt_trusted:
TRUSTED { $$ = TRUE; }
| /*EMPTY*/ { $$ = FALSE; }
;
......@@ -1837,21 +1877,23 @@ opt_trusted: TRUSTED { $$ = TRUE; }
* (CREATE LANGUAGE is the only place where func_name isn't followed by '(').
* Work around by using name and dotted_name separately.
*/
handler_name: name
{ $$ = makeList1(makeString($1)); }
| dotted_name
{ $$ = $1; }
handler_name:
name { $$ = makeList1(makeString($1)); }
| dotted_name { $$ = $1; }
;
opt_lancompiler: LANCOMPILER Sconst { $$ = $2; }
opt_lancompiler:
LANCOMPILER Sconst { $$ = $2; }
| /*EMPTY*/ { $$ = ""; }
;
opt_validator: VALIDATOR handler_name { $$ = $2; }
opt_validator:
VALIDATOR handler_name { $$ = $2; }
| /*EMPTY*/ { $$ = NULL; }
;
DropPLangStmt: DROP opt_procedural LANGUAGE ColId_or_Sconst
DropPLangStmt:
DROP opt_procedural LANGUAGE ColId_or_Sconst
{
DropPLangStmt *n = makeNode(DropPLangStmt);
n->plname = $4;
......@@ -1859,7 +1901,8 @@ DropPLangStmt: DROP opt_procedural LANGUAGE ColId_or_Sconst
}
;
opt_procedural: PROCEDURAL { $$ = TRUE; }
opt_procedural:
PROCEDURAL { $$ = TRUE; }
| /*EMPTY*/ { $$ = TRUE; }
;
......@@ -1871,7 +1914,8 @@ opt_procedural: PROCEDURAL { $$ = TRUE; }
*
*****************************************************************************/
CreateTrigStmt: CREATE TRIGGER name TriggerActionTime TriggerEvents ON
CreateTrigStmt:
CREATE TRIGGER name TriggerActionTime TriggerEvents ON
qualified_name TriggerForSpec EXECUTE PROCEDURE
func_name '(' TriggerFuncArgs ')'
{
......@@ -1922,11 +1966,13 @@ CreateTrigStmt: CREATE TRIGGER name TriggerActionTime TriggerEvents ON
}
;
TriggerActionTime: BEFORE { $$ = TRUE; }
TriggerActionTime:
BEFORE { $$ = TRUE; }
| AFTER { $$ = FALSE; }
;
TriggerEvents: TriggerOneEvent
TriggerEvents:
TriggerOneEvent
{
char *e = palloc (4);
e[0] = $1; e[1] = 0; $$ = e;
......@@ -1944,68 +1990,56 @@ TriggerEvents: TriggerOneEvent
}
;
TriggerOneEvent: INSERT { $$ = 'i'; }
TriggerOneEvent:
INSERT { $$ = 'i'; }
| DELETE_P { $$ = 'd'; }
| UPDATE { $$ = 'u'; }
;
TriggerForSpec: FOR TriggerForOpt TriggerForType
TriggerForSpec:
FOR TriggerForOpt TriggerForType
{
$$ = $3;
}
;
TriggerForOpt: EACH { $$ = TRUE; }
TriggerForOpt:
EACH { $$ = TRUE; }
| /*EMPTY*/ { $$ = FALSE; }
;
TriggerForType: ROW { $$ = TRUE; }
TriggerForType:
ROW { $$ = TRUE; }
| STATEMENT { $$ = FALSE; }
;
TriggerFuncArgs: TriggerFuncArg
{ $$ = makeList1($1); }
TriggerFuncArgs:
TriggerFuncArg { $$ = makeList1($1); }
| TriggerFuncArgs ',' TriggerFuncArg
{ $$ = lappend($1, $3); }
| /*EMPTY*/
{ $$ = NIL; }
| /*EMPTY*/ { $$ = NIL; }
;
TriggerFuncArg: ICONST
TriggerFuncArg:
ICONST
{
char buf[64];
sprintf (buf, "%d", $1);
$$ = makeString(pstrdup(buf));
}
| FCONST
{
$$ = makeString($1);
}
| Sconst
{
$$ = makeString($1);
}
| BITCONST
{
$$ = makeString($1);
}
| ColId
{
$$ = makeString($1);
}
| FCONST { $$ = makeString($1); }
| Sconst { $$ = makeString($1); }
| BITCONST { $$ = makeString($1); }
| ColId { $$ = makeString($1); }
;
OptConstrFromTable: /* Empty */
{
$$ = NULL;
}
| FROM qualified_name
{
$$ = $2;
}
OptConstrFromTable:
FROM qualified_name { $$ = $2; }
| /*EMPTY*/ { $$ = NULL; }
;
ConstraintAttributeSpec: ConstraintDeferrabilitySpec
ConstraintAttributeSpec:
ConstraintDeferrabilitySpec
{ $$ = $1; }
| ConstraintDeferrabilitySpec ConstraintTimeSpec
{
......@@ -2026,24 +2060,23 @@ ConstraintAttributeSpec: ConstraintDeferrabilitySpec
elog(ERROR, "INITIALLY DEFERRED constraint must be DEFERRABLE");
$$ = $1 | $2;
}
| /* Empty */
| /*EMPTY*/
{ $$ = 0; }
;
ConstraintDeferrabilitySpec: NOT DEFERRABLE
{ $$ = 0; }
| DEFERRABLE
{ $$ = 1; }
ConstraintDeferrabilitySpec:
NOT DEFERRABLE { $$ = 0; }
| DEFERRABLE { $$ = 1; }
;
ConstraintTimeSpec: INITIALLY IMMEDIATE
{ $$ = 0; }
| INITIALLY DEFERRED
{ $$ = 2; }
ConstraintTimeSpec:
INITIALLY IMMEDIATE { $$ = 0; }
| INITIALLY DEFERRED { $$ = 2; }
;
DropTrigStmt: DROP TRIGGER name ON qualified_name
DropTrigStmt:
DROP TRIGGER name ON qualified_name
{
DropPropertyStmt *n = makeNode(DropPropertyStmt);
n->relation = $5;
......@@ -2062,8 +2095,8 @@ DropTrigStmt: DROP TRIGGER name ON qualified_name
*
*****************************************************************************/
CreateAssertStmt: CREATE ASSERTION name
CHECK '(' a_expr ')' ConstraintAttributeSpec
CreateAssertStmt:
CREATE ASSERTION name CHECK '(' a_expr ')' ConstraintAttributeSpec
{
CreateTrigStmt *n = makeNode(CreateTrigStmt);
n->trigname = $3;
......@@ -2078,7 +2111,8 @@ CreateAssertStmt: CREATE ASSERTION name
}
;
DropAssertStmt: DROP ASSERTION name
DropAssertStmt:
DROP ASSERTION name
{
DropPropertyStmt *n = makeNode(DropPropertyStmt);
n->relation = NULL;
......@@ -2097,7 +2131,8 @@ DropAssertStmt: DROP ASSERTION name
*
*****************************************************************************/
DefineStmt: CREATE AGGREGATE func_name definition
DefineStmt:
CREATE AGGREGATE func_name definition
{
DefineStmt *n = makeNode(DefineStmt);
n->defType = AGGREGATE;
......@@ -2186,16 +2221,13 @@ drop_type: TABLE { $$ = DROP_TABLE; }
| DOMAIN_P { $$ = DROP_DOMAIN; }
;
any_name_list: any_name
{ $$ = makeList1($1); }
| any_name_list ',' any_name
{ $$ = lappend($1, $3); }
any_name_list:
any_name { $$ = makeList1($1); }
| any_name_list ',' any_name { $$ = lappend($1, $3); }
;
any_name: ColId
{ $$ = makeList1(makeString($1)); }
| dotted_name
{ $$ = $1; }
any_name: ColId { $$ = makeList1(makeString($1)); }
| dotted_name { $$ = $1; }
;
/*****************************************************************************
......@@ -2205,7 +2237,8 @@ any_name: ColId
*
*****************************************************************************/
TruncateStmt: TRUNCATE opt_table qualified_name
TruncateStmt:
TRUNCATE opt_table qualified_name
{
TruncateStmt *n = makeNode(TruncateStmt);
n->relation = $3;
......@@ -2226,7 +2259,8 @@ TruncateStmt: TRUNCATE opt_table qualified_name
*
*****************************************************************************/
CommentStmt: COMMENT ON comment_type any_name IS comment_text
CommentStmt:
COMMENT ON comment_type any_name IS comment_text
{
CommentStmt *n = makeNode(CommentStmt);
n->objtype = $3;
......@@ -2292,7 +2326,8 @@ CommentStmt: COMMENT ON comment_type any_name IS comment_text
}
;
comment_type: COLUMN { $$ = COLUMN; }
comment_type:
COLUMN { $$ = COLUMN; }
| DATABASE { $$ = DATABASE; }
| SCHEMA { $$ = SCHEMA; }
| INDEX { $$ = INDEX; }
......@@ -2303,7 +2338,8 @@ comment_type: COLUMN { $$ = COLUMN; }
| VIEW { $$ = VIEW; }
;
comment_text: Sconst { $$ = $1; }
comment_text:
Sconst { $$ = $1; }
| NULL_P { $$ = NULL; }
;
......@@ -2384,7 +2420,6 @@ FetchStmt: FETCH direction fetch_how_many from_in name
n->ismove = FALSE;
$$ = (Node *)n;
}
| MOVE direction fetch_how_many from_in name
{
FetchStmt *n = makeNode(FetchStmt);
......@@ -2455,7 +2490,8 @@ direction: FORWARD { $$ = FORWARD; }
}
;
fetch_how_many: Iconst { $$ = $1; }
fetch_how_many:
Iconst { $$ = $1; }
| '-' Iconst { $$ = - $2; }
| ALL { $$ = 0; /* 0 means fetch all tuples*/ }
| NEXT { $$ = 1; }
......@@ -2504,7 +2540,8 @@ privileges: privilege_list { $$ = $1; }
| ALL PRIVILEGES { $$ = makeListi1(ACL_ALL_RIGHTS); }
;
privilege_list: privilege { $$ = makeListi1($1); }
privilege_list:
privilege { $$ = makeListi1($1); }
| privilege_list ',' privilege { $$ = lappendi($1, $3); }
;
......@@ -2528,7 +2565,8 @@ privilege: SELECT { $$ = ACL_SELECT; }
/* Don't bother trying to fold the first two rules into one using
opt_table. You're going to get conflicts. */
privilege_target: qualified_name_list
privilege_target:
qualified_name_list
{
PrivTarget *n = makeNode(PrivTarget);
n->objtype = ACL_OBJECT_RELATION;
......@@ -2573,7 +2611,8 @@ privilege_target: qualified_name_list
;
grantee_list: grantee { $$ = makeList1($1); }
grantee_list:
grantee { $$ = makeList1($1); }
| grantee_list ',' grantee { $$ = lappend($1, $3); }
;
......@@ -2602,14 +2641,16 @@ grantee: ColId
;
opt_grant_grant_option: WITH GRANT OPTION
opt_grant_grant_option:
WITH GRANT OPTION
{
elog(ERROR, "grant options are not implemented");
}
| /*EMPTY*/
;
opt_revoke_grant_option: GRANT OPTION FOR
opt_revoke_grant_option:
GRANT OPTION FOR
{
elog(ERROR, "grant options are not implemented");
}
......@@ -2617,13 +2658,15 @@ opt_revoke_grant_option: GRANT OPTION FOR
;
function_with_argtypes_list: function_with_argtypes
function_with_argtypes_list:
function_with_argtypes
{ $$ = makeList1($1); }
| function_with_argtypes_list ',' function_with_argtypes
{ $$ = lappend($1, $3); }
;
function_with_argtypes: func_name func_args
function_with_argtypes:
func_name func_args
{
FuncWithArgs *n = makeNode(FuncWithArgs);
n->funcname = $1;
......@@ -2656,16 +2699,19 @@ IndexStmt: CREATE index_opt_unique INDEX index_name ON qualified_name
}
;
index_opt_unique: UNIQUE { $$ = TRUE; }
index_opt_unique:
UNIQUE { $$ = TRUE; }
| /*EMPTY*/ { $$ = FALSE; }
;
access_method_clause: USING access_method { $$ = $2; }
access_method_clause:
USING access_method { $$ = $2; }
/* If btree changes as our default, update pg_get_indexdef() */
| /*EMPTY*/ { $$ = DEFAULT_INDEX_TYPE; }
;
index_params: index_list { $$ = $1; }
index_params:
index_list { $$ = $1; }
| func_index { $$ = makeList1($1); }
;
......@@ -2756,7 +2802,8 @@ RecipeStmt: EXECUTE RECIPE recipe_name
*
*****************************************************************************/
CreateFunctionStmt: CREATE opt_or_replace FUNCTION func_name func_args
CreateFunctionStmt:
CREATE opt_or_replace FUNCTION func_name func_args
RETURNS func_return createfunc_opt_list opt_definition
{
CreateFunctionStmt *n = makeNode(CreateFunctionStmt);
......@@ -2767,9 +2814,11 @@ CreateFunctionStmt: CREATE opt_or_replace FUNCTION func_name func_args
n->options = $8;
n->withClause = $9;
$$ = (Node *)n;
};
}
;
opt_or_replace: OR REPLACE { $$ = TRUE; }
opt_or_replace:
OR REPLACE { $$ = TRUE; }
| /*EMPTY*/ { $$ = FALSE; }
;
......@@ -2777,10 +2826,9 @@ func_args: '(' func_args_list ')' { $$ = $2; }
| '(' ')' { $$ = NIL; }
;
func_args_list: func_arg
{ $$ = makeList1($1); }
| func_args_list ',' func_arg
{ $$ = lappend($1, $3); }
func_args_list:
func_arg { $$ = makeList1($1); }
| func_args_list ',' func_arg { $$ = lappend($1, $3); }
;
func_arg: opt_arg func_type
......@@ -2791,16 +2839,10 @@ func_arg: opt_arg func_type
*/
$$ = $2;
}
| func_type
{
$$ = $1;
}
| func_type { $$ = $1; }
;
opt_arg: IN_P
{
$$ = FALSE;
}
opt_arg: IN_P { $$ = FALSE; }
| OUT_P
{
elog(ERROR, "CREATE FUNCTION / OUT parameters are not supported");
......@@ -2813,7 +2855,8 @@ opt_arg: IN_P
}
;
func_return: func_type
func_return:
func_type
{
/* We can catch over-specified arguments here if we want to,
* but for now better to silently swallow typmod, etc.
......@@ -2827,10 +2870,7 @@ func_return: func_type
* We would like to make the second production here be ColId attrs etc,
* but that causes reduce/reduce conflicts. type_name is next best choice.
*/
func_type: Typename
{
$$ = $1;
}
func_type: Typename { $$ = $1; }
| type_name attrs '%' TYPE_P
{
$$ = makeNode(TypeName);
......@@ -2841,13 +2881,13 @@ func_type: Typename
;
createfunc_opt_list: createfunc_opt_item
{ $$ = makeList1($1); }
| createfunc_opt_list createfunc_opt_item
{ $$ = lappend($1, $2); }
createfunc_opt_list:
createfunc_opt_item { $$ = makeList1($1); }
| createfunc_opt_list createfunc_opt_item { $$ = lappend($1, $2); }
;
createfunc_opt_item: AS func_as
createfunc_opt_item:
AS func_as
{
$$ = makeNode(DefElem);
$$->defname = "as";
......@@ -2927,13 +2967,12 @@ createfunc_opt_item: AS func_as
}
;
func_as: Sconst
{ $$ = makeList1(makeString($1)); }
| Sconst ',' Sconst
{ $$ = makeList2(makeString($1), makeString($3)); }
func_as: Sconst { $$ = makeList1(makeString($1)); }
| Sconst ',' Sconst { $$ = makeList2(makeString($1), makeString($3)); }
;
opt_definition: WITH definition { $$ = $2; }
opt_definition:
WITH definition { $$ = $2; }
| /*EMPTY*/ { $$ = NIL; }
;
......@@ -2948,7 +2987,8 @@ opt_definition: WITH definition { $$ = $2; }
*
*****************************************************************************/
RemoveFuncStmt: DROP FUNCTION func_name func_args
RemoveFuncStmt:
DROP FUNCTION func_name func_args
{
RemoveFuncStmt *n = makeNode(RemoveFuncStmt);
n->funcname = $3;
......@@ -2957,7 +2997,8 @@ RemoveFuncStmt: DROP FUNCTION func_name func_args
}
;
RemoveAggrStmt: DROP AGGREGATE func_name '(' aggr_argtype ')'
RemoveAggrStmt:
DROP AGGREGATE func_name '(' aggr_argtype ')'
{
RemoveAggrStmt *n = makeNode(RemoveAggrStmt);
n->aggname = $3;
......@@ -2966,11 +3007,13 @@ RemoveAggrStmt: DROP AGGREGATE func_name '(' aggr_argtype ')'
}
;
aggr_argtype: Typename { $$ = $1; }
aggr_argtype:
Typename { $$ = $1; }
| '*' { $$ = NULL; }
;
RemoveOperStmt: DROP OPERATOR any_operator '(' oper_argtypes ')'
RemoveOperStmt:
DROP OPERATOR any_operator '(' oper_argtypes ')'
{
RemoveOperStmt *n = makeNode(RemoveOperStmt);
n->opname = $3;
......@@ -2979,22 +3022,19 @@ RemoveOperStmt: DROP OPERATOR any_operator '(' oper_argtypes ')'
}
;
oper_argtypes: Typename
oper_argtypes:
Typename
{
elog(ERROR,"parser: argument type missing (use NONE for unary operators)");
}
| Typename ',' Typename
{ $$ = makeList2($1, $3); }
| NONE ',' Typename /* left unary */
{ $$ = makeList2(NULL, $3); }
| Typename ',' NONE /* right unary */
{ $$ = makeList2($1, NULL); }
| Typename ',' Typename { $$ = makeList2($1, $3); }
| NONE ',' Typename /* left unary */ { $$ = makeList2(NULL, $3); }
| Typename ',' NONE /* right unary */ { $$ = makeList2($1, NULL); }
;
any_operator: all_Op
{ $$ = makeList1(makeString($1)); }
| ColId '.' any_operator
{ $$ = lcons(makeString($1), $3); }
any_operator:
all_Op { $$ = makeList1(makeString($1)); }
| ColId '.' any_operator { $$ = lcons(makeString($1), $3); }
;
......@@ -3006,7 +3046,8 @@ any_operator: all_Op
*
*****************************************************************************/
ReindexStmt: REINDEX reindex_type qualified_name opt_force
ReindexStmt:
REINDEX reindex_type qualified_name opt_force
{
ReindexStmt *n = makeNode(ReindexStmt);
n->reindexType = $2;
......@@ -3026,7 +3067,8 @@ ReindexStmt: REINDEX reindex_type qualified_name opt_force
}
;
reindex_type: INDEX { $$ = INDEX; }
reindex_type:
INDEX { $$ = INDEX; }
| TABLE { $$ = TABLE; }
;
......@@ -3098,13 +3140,15 @@ RuleStmt: CREATE RULE name AS
}
;
RuleActionList: NOTHING { $$ = NIL; }
RuleActionList:
NOTHING { $$ = NIL; }
| RuleActionStmt { $$ = makeList1($1); }
| '(' RuleActionMulti ')' { $$ = $2; }
;
/* the thrashing around here is to discard "empty" statements... */
RuleActionMulti: RuleActionMulti ';' RuleActionStmtOrEmpty
RuleActionMulti:
RuleActionMulti ';' RuleActionStmtOrEmpty
{ if ($3 != (Node *) NULL)
$$ = lappend($1, $3);
else
......@@ -3118,16 +3162,17 @@ RuleActionMulti: RuleActionMulti ';' RuleActionStmtOrEmpty
}
;
RuleActionStmt: SelectStmt
RuleActionStmt:
SelectStmt
| InsertStmt
| UpdateStmt
| DeleteStmt
| NotifyStmt
;
RuleActionStmtOrEmpty: RuleActionStmt
| /*EMPTY*/
{ $$ = (Node *)NULL; }
RuleActionStmtOrEmpty:
RuleActionStmt { $$ = $1; }
| /*EMPTY*/ { $$ = (Node *)NULL; }
;
/* change me to select, update, etc. some day */
......@@ -3137,12 +3182,14 @@ event: SELECT { $$ = CMD_SELECT; }
| INSERT { $$ = CMD_INSERT; }
;
opt_instead: INSTEAD { $$ = TRUE; }
opt_instead:
INSTEAD { $$ = TRUE; }
| /*EMPTY*/ { $$ = FALSE; }
;
DropRuleStmt: DROP RULE name ON qualified_name
DropRuleStmt:
DROP RULE name ON qualified_name
{
DropPropertyStmt *n = makeNode(DropPropertyStmt);
n->relation = $5;
......@@ -3177,7 +3224,8 @@ ListenStmt: LISTEN qualified_name
}
;
UnlistenStmt: UNLISTEN qualified_name
UnlistenStmt:
UNLISTEN qualified_name
{
UnlistenStmt *n = makeNode(UnlistenStmt);
n->relation = $2;
......@@ -3203,7 +3251,8 @@ UnlistenStmt: UNLISTEN qualified_name
*
*****************************************************************************/
TransactionStmt: ABORT_TRANS opt_trans
TransactionStmt:
ABORT_TRANS opt_trans
{
TransactionStmt *n = makeNode(TransactionStmt);
n->command = ROLLBACK;
......@@ -3252,8 +3301,7 @@ opt_trans: WORK { $$ = TRUE; }
| /*EMPTY*/ { $$ = TRUE; }
;
opt_chain: AND NO CHAIN
{ $$ = FALSE; }
opt_chain: AND NO CHAIN { $$ = FALSE; }
| AND CHAIN
{
/* SQL99 asks that conforming dbs reject AND CHAIN
......@@ -3306,7 +3354,8 @@ LoadStmt: LOAD file_name
*
*****************************************************************************/
CreatedbStmt: CREATE DATABASE database_name opt_with createdb_opt_list
CreatedbStmt:
CREATE DATABASE database_name opt_with createdb_opt_list
{
CreatedbStmt *n = makeNode(CreatedbStmt);
List *l;
......@@ -3352,17 +3401,17 @@ CreatedbStmt: CREATE DATABASE database_name opt_with createdb_opt_list
}
;
createdb_opt_list: createdb_opt_item
{ $$ = makeList1($1); }
| createdb_opt_list createdb_opt_item
{ $$ = lappend($1, $2); }
createdb_opt_list:
createdb_opt_item { $$ = makeList1($1); }
| createdb_opt_list createdb_opt_item { $$ = lappend($1, $2); }
;
/*
* createdb_opt_item returns 2-element lists, with the first element
* being an integer code to indicate which item was specified.
*/
createdb_opt_item: LOCATION opt_equal Sconst
createdb_opt_item:
LOCATION opt_equal Sconst
{
$$ = lconsi(1, makeList1($3));
}
......@@ -3433,7 +3482,8 @@ opt_equal: '=' { $$ = TRUE; }
*
*****************************************************************************/
AlterDatabaseSetStmt: ALTER DATABASE database_name SET set_rest
AlterDatabaseSetStmt:
ALTER DATABASE database_name SET set_rest
{
AlterDatabaseSetStmt *n = makeNode(AlterDatabaseSetStmt);
n->dbname = $3;
......@@ -3473,7 +3523,8 @@ DropdbStmt: DROP DATABASE database_name
*
*****************************************************************************/
CreateDomainStmt: CREATE DOMAIN_P any_name opt_as Typename ColQualList opt_collate
CreateDomainStmt:
CREATE DOMAIN_P any_name opt_as Typename ColQualList opt_collate
{
CreateDomainStmt *n = makeNode(CreateDomainStmt);
n->domainname = $3;
......@@ -3499,7 +3550,8 @@ opt_as: AS {$$ = TRUE; }
*
*****************************************************************************/
ClusterStmt: CLUSTER index_name ON qualified_name
ClusterStmt:
CLUSTER index_name ON qualified_name
{
ClusterStmt *n = makeNode(ClusterStmt);
n->relation = $4;
......@@ -3551,7 +3603,8 @@ VacuumStmt: VACUUM opt_full opt_freeze opt_verbose
}
;
AnalyzeStmt: analyze_keyword opt_verbose
AnalyzeStmt:
analyze_keyword opt_verbose
{
VacuumStmt *n = makeNode(VacuumStmt);
n->vacuum = false;
......@@ -3577,11 +3630,13 @@ AnalyzeStmt: analyze_keyword opt_verbose
}
;
analyze_keyword: ANALYZE { $$ = TRUE; }
analyze_keyword:
ANALYZE { $$ = TRUE; }
| ANALYSE /* British */ { $$ = TRUE; }
;
opt_verbose: VERBOSE { $$ = TRUE; }
opt_verbose:
VERBOSE { $$ = TRUE; }
| /*EMPTY*/ { $$ = FALSE; }
;
......@@ -3593,7 +3648,8 @@ opt_freeze: FREEZE { $$ = TRUE; }
| /*EMPTY*/ { $$ = FALSE; }
;
opt_name_list: '(' name_list ')' { $$ = $2; }
opt_name_list:
'(' name_list ')' { $$ = $2; }
| /*EMPTY*/ { $$ = NIL; }
;
......@@ -3606,7 +3662,8 @@ opt_name_list: '(' name_list ')' { $$ = $2; }
*
*****************************************************************************/
ExplainStmt: EXPLAIN opt_verbose OptimizableStmt
ExplainStmt:
EXPLAIN opt_verbose OptimizableStmt
{
ExplainStmt *n = makeNode(ExplainStmt);
n->verbose = $2;
......@@ -3636,7 +3693,8 @@ ExplainStmt: EXPLAIN opt_verbose OptimizableStmt
* *
*****************************************************************************/
OptimizableStmt: SelectStmt
OptimizableStmt:
SelectStmt
| CursorStmt
| UpdateStmt
| InsertStmt
......@@ -3651,14 +3709,16 @@ OptimizableStmt: SelectStmt
*
*****************************************************************************/
InsertStmt: INSERT INTO qualified_name insert_rest
InsertStmt:
INSERT INTO qualified_name insert_rest
{
$4->relation = $3;
$$ = (Node *) $4;
}
;
insert_rest: VALUES '(' insert_target_list ')'
insert_rest:
VALUES '(' insert_target_list ')'
{
$$ = makeNode(InsertStmt);
$$->cols = NIL;
......@@ -3695,13 +3755,13 @@ insert_rest: VALUES '(' insert_target_list ')'
}
;
insert_column_list: insert_column_list ',' insert_column_item
{ $$ = lappend($1, $3); }
| insert_column_item
{ $$ = makeList1($1); }
insert_column_list:
insert_column_list ',' insert_column_item { $$ = lappend($1, $3); }
| insert_column_item { $$ = makeList1($1); }
;
insert_column_item: ColId opt_indirection
insert_column_item:
ColId opt_indirection
{
ResTarget *n = makeNode(ResTarget);
n->name = $1;
......@@ -3846,20 +3906,13 @@ SelectStmt: select_no_parens %prec UMINUS
| select_with_parens %prec UMINUS
;
select_with_parens: '(' select_no_parens ')'
{
$$ = $2;
}
| '(' select_with_parens ')'
{
$$ = $2;
}
select_with_parens:
'(' select_no_parens ')' { $$ = $2; }
| '(' select_with_parens ')' { $$ = $2; }
;
select_no_parens: simple_select
{
$$ = $1;
}
select_no_parens:
simple_select { $$ = $1; }
| select_clause sort_clause opt_for_update_clause opt_select_limit
{
insertSelectOptions((SelectStmt *) $1, $2, $3,
......@@ -3880,8 +3933,9 @@ select_no_parens: simple_select
}
;
select_clause: simple_select
| select_with_parens
select_clause:
simple_select { $$ = $1; }
| select_with_parens { $$ = $1; }
;
/*
......@@ -3907,7 +3961,8 @@ select_clause: simple_select
* NOTE: only the leftmost component SelectStmt should have INTO.
* However, this is not checked by the grammar; parse analysis must check it.
*/
simple_select: SELECT opt_distinct target_list
simple_select:
SELECT opt_distinct target_list
into_clause from_clause where_clause
group_clause having_clause
{
......@@ -3936,7 +3991,8 @@ simple_select: SELECT opt_distinct target_list
}
;
into_clause: INTO OptTempTableName { $$ = $2; }
into_clause:
INTO OptTempTableName { $$ = $2; }
| /*EMPTY*/ { $$ = NULL; }
;
......@@ -3944,7 +4000,8 @@ into_clause: INTO OptTempTableName { $$ = $2; }
* Redundancy here is needed to avoid shift/reduce conflicts,
* since TEMP is not a reserved word. See also OptTemp.
*/
OptTempTableName: TEMPORARY opt_table qualified_name
OptTempTableName:
TEMPORARY opt_table qualified_name
{
$$ = $3;
$$->istemp = true;
......@@ -3999,16 +4056,19 @@ opt_all: ALL { $$ = TRUE; }
/* We use (NIL) as a placeholder to indicate that all target expressions
* should be placed in the DISTINCT list during parsetree analysis.
*/
opt_distinct: DISTINCT { $$ = makeList1(NIL); }
opt_distinct:
DISTINCT { $$ = makeList1(NIL); }
| DISTINCT ON '(' expr_list ')' { $$ = $4; }
| ALL { $$ = NIL; }
| /*EMPTY*/ { $$ = NIL; }
;
sort_clause: ORDER BY sortby_list { $$ = $3; }
sort_clause:
ORDER BY sortby_list { $$ = $3; }
;
sortby_list: sortby { $$ = makeList1($1); }
sortby_list:
sortby { $$ = makeList1($1); }
| sortby_list ',' sortby { $$ = lappend($1, $3); }
;
......@@ -4020,8 +4080,7 @@ sortby: a_expr OptUseOp
}
;
OptUseOp: USING qual_all_Op
{ $$ = $2; }
OptUseOp: USING qual_all_Op { $$ = $2; }
| ASC
{ $$ = makeList1(makeString("<")); }
| DESC
......@@ -4031,7 +4090,8 @@ OptUseOp: USING qual_all_Op
;
select_limit: LIMIT select_limit_value OFFSET select_offset_value
select_limit:
LIMIT select_limit_value OFFSET select_offset_value
{ $$ = makeList2($4, $2); }
| OFFSET select_offset_value LIMIT select_limit_value
{ $$ = makeList2($2, $4); }
......@@ -4045,11 +4105,13 @@ select_limit: LIMIT select_limit_value OFFSET select_offset_value
;
opt_select_limit: select_limit { $$ = $1; }
opt_select_limit:
select_limit { $$ = $1; }
| /* EMPTY */ { $$ = makeList2(NULL,NULL); }
;
select_limit_value: Iconst
select_limit_value:
Iconst
{
Const *n = makeNode(Const);
......@@ -4090,7 +4152,8 @@ select_limit_value: Iconst
}
;
select_offset_value: Iconst
select_offset_value:
Iconst
{
Const *n = makeNode(Const);
......@@ -4125,26 +4188,28 @@ select_offset_value: Iconst
* cases for these.
*/
group_clause: GROUP_P BY expr_list { $$ = $3; }
group_clause:
GROUP_P BY expr_list { $$ = $3; }
| /*EMPTY*/ { $$ = NIL; }
;
having_clause: HAVING a_expr
{
$$ = $2;
}
having_clause:
HAVING a_expr { $$ = $2; }
| /*EMPTY*/ { $$ = NULL; }
;
for_update_clause: FOR UPDATE update_list { $$ = $3; }
for_update_clause:
FOR UPDATE update_list { $$ = $3; }
| FOR READ ONLY { $$ = NULL; }
;
opt_for_update_clause: for_update_clause { $$ = $1; }
opt_for_update_clause:
for_update_clause { $$ = $1; }
| /* EMPTY */ { $$ = NULL; }
;
update_list: OF name_list { $$ = $2; }
update_list:
OF name_list { $$ = $2; }
| /* EMPTY */ { $$ = makeList1(NULL); }
;
......@@ -4156,7 +4221,8 @@ update_list: OF name_list { $$ = $2; }
*
*****************************************************************************/
from_clause: FROM from_list { $$ = $2; }
from_clause:
FROM from_list { $$ = $2; }
| /*EMPTY*/ { $$ = NIL; }
;
......@@ -4246,7 +4312,8 @@ table_ref: relation_expr
* in common. We'll collect columns during the later transformations.
*/
joined_table: '(' joined_table ')'
joined_table:
'(' joined_table ')'
{
$$ = $2;
}
......@@ -4328,7 +4395,8 @@ joined_table: '(' joined_table ')'
}
;
alias_clause: AS ColId '(' name_list ')'
alias_clause:
AS ColId '(' name_list ')'
{
$$ = makeNode(Alias);
$$->aliasname = $2;
......@@ -4377,7 +4445,8 @@ join_qual: USING '(' name_list ')' { $$ = (Node *) $3; }
;
relation_expr: qualified_name
relation_expr:
qualified_name
{
/* default inheritance */
$$ = $1;
......@@ -4422,7 +4491,8 @@ func_table: func_name '(' ')'
;
where_clause: WHERE a_expr { $$ = $2; }
where_clause:
WHERE a_expr { $$ = $2; }
| /*EMPTY*/ { $$ = NULL; /* no qualifiers */ }
;
......@@ -4449,7 +4519,8 @@ Typename: SimpleTypename opt_array_bounds
}
;
opt_array_bounds: opt_array_bounds '[' ']'
opt_array_bounds:
opt_array_bounds '[' ']'
{ $$ = lappend($1, makeInteger(-1)); }
| opt_array_bounds '[' Iconst ']'
{ $$ = lappend($1, makeInteger($3)); }
......@@ -4465,7 +4536,8 @@ opt_array_bounds: opt_array_bounds '[' ']'
* reduce/reduce conflicts that I haven't been able to find a workaround
* for. FIXME later.
*/
SimpleTypename: ConstTypename
SimpleTypename:
ConstTypename { $$ = $1; }
| ConstInterval opt_interval
{
$$ = $1;
......@@ -4488,14 +4560,16 @@ SimpleTypename: ConstTypename
}
;
ConstTypename: GenericType
| Numeric
| Bit
| Character
| ConstDatetime
ConstTypename:
GenericType { $$ = $1;}
| Numeric { $$ = $1;}
| Bit { $$ = $1;}
| Character { $$ = $1;}
| ConstDatetime { $$ = $1;}
;
GenericType: type_name
GenericType:
type_name
{
$$ = makeTypeName($1);
}
......@@ -4572,7 +4646,8 @@ opt_float: '(' Iconst ')'
}
;
opt_numeric: '(' Iconst ',' Iconst ')'
opt_numeric:
'(' Iconst ',' Iconst ')'
{
if ($2 < 1 || $2 > NUMERIC_MAX_PRECISION)
elog(ERROR, "NUMERIC precision %d must be between 1 and %d",
......@@ -4598,7 +4673,8 @@ opt_numeric: '(' Iconst ',' Iconst ')'
}
;
opt_decimal: '(' Iconst ',' Iconst ')'
opt_decimal:
'(' Iconst ',' Iconst ')'
{
if ($2 < 1 || $2 > NUMERIC_MAX_PRECISION)
elog(ERROR, "DECIMAL precision %d must be between 1 and %d",
......@@ -4716,27 +4792,37 @@ Character: character '(' Iconst ')' opt_charset
}
;
character: CHARACTER opt_varying { $$ = $2 ? "varchar": "bpchar"; }
| CHAR_P opt_varying { $$ = $2 ? "varchar": "bpchar"; }
| VARCHAR { $$ = "varchar"; }
| NATIONAL CHARACTER opt_varying { $$ = $3 ? "varchar": "bpchar"; }
| NATIONAL CHAR_P opt_varying { $$ = $3 ? "varchar": "bpchar"; }
| NCHAR opt_varying { $$ = $2 ? "varchar": "bpchar"; }
character: CHARACTER opt_varying
{ $$ = $2 ? "varchar": "bpchar"; }
| CHAR_P opt_varying
{ $$ = $2 ? "varchar": "bpchar"; }
| VARCHAR
{ $$ = "varchar"; }
| NATIONAL CHARACTER opt_varying
{ $$ = $3 ? "varchar": "bpchar"; }
| NATIONAL CHAR_P opt_varying
{ $$ = $3 ? "varchar": "bpchar"; }
| NCHAR opt_varying
{ $$ = $2 ? "varchar": "bpchar"; }
;
opt_varying: VARYING { $$ = TRUE; }
opt_varying:
VARYING { $$ = TRUE; }
| /*EMPTY*/ { $$ = FALSE; }
;
opt_charset: CHARACTER SET ColId { $$ = $3; }
opt_charset:
CHARACTER SET ColId { $$ = $3; }
| /*EMPTY*/ { $$ = NULL; }
;
opt_collate: COLLATE ColId { $$ = $2; }
opt_collate:
COLLATE ColId { $$ = $2; }
| /*EMPTY*/ { $$ = NULL; }
;
ConstDatetime: TIMESTAMP '(' Iconst ')' opt_timezone
ConstDatetime:
TIMESTAMP '(' Iconst ')' opt_timezone
{
if ($5)
$$ = SystemTypeName("timestamptz");
......@@ -4795,18 +4881,18 @@ ConstDatetime: TIMESTAMP '(' Iconst ')' opt_timezone
}
;
ConstInterval: INTERVAL
{
$$ = SystemTypeName("interval");
}
ConstInterval:
INTERVAL { $$ = SystemTypeName("interval"); }
;
opt_timezone: WITH TIME ZONE { $$ = TRUE; }
opt_timezone:
WITH TIME ZONE { $$ = TRUE; }
| WITHOUT TIME ZONE { $$ = FALSE; }
| /*EMPTY*/ { $$ = FALSE; }
;
opt_interval: YEAR_P { $$ = MASK(YEAR); }
opt_interval:
YEAR_P { $$ = MASK(YEAR); }
| MONTH_P { $$ = MASK(MONTH); }
| DAY_P { $$ = MASK(DAY); }
| HOUR_P { $$ = MASK(HOUR); }
......@@ -4906,7 +4992,8 @@ row_expr: '(' row_descriptor ')' IN_P select_with_parens
}
;
row_descriptor: row_list ',' a_expr
row_descriptor:
row_list ',' a_expr
{
$$ = lappend($1, $3);
}
......@@ -4927,7 +5014,9 @@ sub_type: ANY { $$ = ANY_SUBLINK; }
| ALL { $$ = ALL_SUBLINK; }
;
all_Op: Op | MathOp;
all_Op: Op { $$ = $1; }
| MathOp { $$ = $1; }
;
MathOp: '+' { $$ = "+"; }
| '-' { $$ = "-"; }
......@@ -4940,16 +5029,13 @@ MathOp: '+' { $$ = "+"; }
| '=' { $$ = "="; }
;
qual_Op: Op
{ $$ = makeList1(makeString($1)); }
| OPERATOR '(' any_operator ')'
{ $$ = $3; }
qual_Op: Op { $$ = makeList1(makeString($1)); }
| OPERATOR '(' any_operator ')' { $$ = $3; }
;
qual_all_Op: all_Op
{ $$ = makeList1(makeString($1)); }
| OPERATOR '(' any_operator ')'
{ $$ = $3; }
qual_all_Op:
all_Op { $$ = makeList1(makeString($1)); }
| OPERATOR '(' any_operator ')' { $$ = $3; }
;
/*
......@@ -4968,10 +5054,8 @@ qual_all_Op: all_Op
* c_expr is all the productions that are common to a_expr and b_expr;
* it's factored out just to eliminate redundant coding.
*/
a_expr: c_expr
{ $$ = $1; }
| a_expr TYPECAST Typename
{ $$ = makeTypeCast($1, $3); }
a_expr: c_expr { $$ = $1; }
| a_expr TYPECAST Typename { $$ = makeTypeCast($1, $3); }
| a_expr COLLATE ColId
{
FuncCall *n = makeNode(FuncCall);
......@@ -5331,7 +5415,6 @@ b_expr: c_expr
{ $$ = (Node *) makeSimpleA_Expr(OP, ">", $1, $3); }
| b_expr '=' b_expr
{ $$ = (Node *) makeSimpleA_Expr(OP, "=", $1, $3); }
| b_expr qual_Op b_expr %prec Op
{ $$ = (Node *) makeA_Expr(OP, $2, $1, $3); }
| qual_Op b_expr %prec Op
......@@ -5348,10 +5431,8 @@ b_expr: c_expr
* inside parentheses, such as function arguments; that cannot introduce
* ambiguity to the b_expr syntax.
*/
c_expr: columnref
{ $$ = (Node *) $1; }
| AexprConst
{ $$ = $1; }
c_expr: columnref { $$ = (Node *) $1; }
| AexprConst { $$ = $1; }
| PARAM attrs opt_indirection
{
/*
......@@ -5780,7 +5861,8 @@ c_expr: columnref
* Supporting nonterminals for expressions.
*/
opt_indirection: opt_indirection '[' a_expr ']'
opt_indirection:
opt_indirection '[' a_expr ']'
{
A_Indices *ai = makeNode(A_Indices);
ai->lidx = NULL;
......@@ -5798,30 +5880,28 @@ opt_indirection: opt_indirection '[' a_expr ']'
{ $$ = NIL; }
;
expr_list: a_expr
{ $$ = makeList1($1); }
| expr_list ',' a_expr
{ $$ = lappend($1, $3); }
| expr_list USING a_expr
{ $$ = lappend($1, $3); }
expr_list: a_expr { $$ = makeList1($1); }
| expr_list ',' a_expr { $$ = lappend($1, $3); }
| expr_list USING a_expr { $$ = lappend($1, $3); }
;
extract_list: extract_arg FROM a_expr
extract_list:
extract_arg FROM a_expr
{
A_Const *n = makeNode(A_Const);
n->val.type = T_String;
n->val.val.str = $1;
$$ = makeList2((Node *) n, $3);
}
| /*EMPTY*/
{ $$ = NIL; }
| /*EMPTY*/ { $$ = NIL; }
;
/* Allow delimited string SCONST in extract_arg as an SQL extension.
* - thomas 2001-04-12
*/
extract_arg: IDENT { $$ = $1; }
extract_arg:
IDENT { $$ = $1; }
| YEAR_P { $$ = "year"; }
| MONTH_P { $$ = "month"; }
| DAY_P { $$ = "day"; }
......@@ -5836,7 +5916,8 @@ extract_arg: IDENT { $$ = $1; }
* o overlay(text placing text from int for int)
* o overlay(text placing text from int)
*/
overlay_list: a_expr overlay_placing substr_from substr_for
overlay_list:
a_expr overlay_placing substr_from substr_for
{
$$ = makeList4($1, $2, $3, $4);
}
......@@ -5846,16 +5927,16 @@ overlay_list: a_expr overlay_placing substr_from substr_for
}
;
overlay_placing: PLACING a_expr
overlay_placing:
PLACING a_expr
{ $$ = $2; }
;
/* position_list uses b_expr not a_expr to avoid conflict with general IN */
position_list: b_expr IN_P b_expr
{ $$ = makeList2($3, $1); }
| /*EMPTY*/
{ $$ = NIL; }
position_list:
b_expr IN_P b_expr { $$ = makeList2($3, $1); }
| /*EMPTY*/ { $$ = NIL; }
;
/* SUBSTRING() arguments
......@@ -5868,7 +5949,8 @@ position_list: b_expr IN_P b_expr
* here, and convert the SQL9x style to the generic list for further
* processing. - thomas 2000-11-28
*/
substr_list: a_expr substr_from substr_for
substr_list:
a_expr substr_from substr_for
{
$$ = makeList3($1, $2, $3);
}
......@@ -5895,20 +5977,16 @@ substr_list: a_expr substr_from substr_for
{ $$ = NIL; }
;
substr_from: FROM a_expr
{ $$ = $2; }
substr_from:
FROM a_expr { $$ = $2; }
;
substr_for: FOR a_expr
{ $$ = $2; }
substr_for: FOR a_expr { $$ = $2; }
;
trim_list: a_expr FROM expr_list
{ $$ = lappend($3, $1); }
| FROM expr_list
{ $$ = $2; }
| expr_list
{ $$ = $1; }
trim_list: a_expr FROM expr_list { $$ = lappend($3, $1); }
| FROM expr_list { $$ = $2; }
| expr_list { $$ = $1; }
;
in_expr: select_with_parens
......@@ -5917,14 +5995,12 @@ in_expr: select_with_parens
n->subselect = $1;
$$ = (Node *)n;
}
| '(' in_expr_nodes ')'
{ $$ = (Node *)$2; }
| '(' in_expr_nodes ')' { $$ = (Node *)$2; }
;
in_expr_nodes: a_expr
{ $$ = makeList1($1); }
| in_expr_nodes ',' a_expr
{ $$ = lappend($1, $3); }
in_expr_nodes:
a_expr { $$ = makeList1($1); }
| in_expr_nodes ',' a_expr { $$ = lappend($1, $3); }
;
/* Case clause
......@@ -5979,13 +6055,13 @@ case_expr: CASE case_arg when_clause_list case_default END_TRANS
}
;
when_clause_list: when_clause_list when_clause
{ $$ = lappend($1, $2); }
| when_clause
{ $$ = makeList1($1); }
when_clause_list:
when_clause_list when_clause { $$ = lappend($1, $2); }
| when_clause { $$ = makeList1($1); }
;
when_clause: WHEN a_expr THEN a_expr
when_clause:
WHEN a_expr THEN a_expr
{
CaseWhen *w = makeNode(CaseWhen);
w->expr = $2;
......@@ -5994,14 +6070,13 @@ when_clause: WHEN a_expr THEN a_expr
}
;
case_default: ELSE a_expr { $$ = $2; }
case_default:
ELSE a_expr { $$ = $2; }
| /*EMPTY*/ { $$ = NULL; }
;
case_arg: a_expr
{ $$ = $1; }
| /*EMPTY*/
{ $$ = NULL; }
case_arg: a_expr { $$ = $1; }
| /*EMPTY*/ { $$ = NULL; }
;
/*
......@@ -6023,16 +6098,13 @@ columnref: relation_name opt_indirection
}
;
dotted_name: relation_name attrs
{ $$ = lcons(makeString($1), $2); }
dotted_name:
relation_name attrs { $$ = lcons(makeString($1), $2); }
;
attrs: '.' attr_name
{ $$ = makeList1(makeString($2)); }
| '.' '*'
{ $$ = makeList1(makeString("*")); }
| '.' attr_name attrs
{ $$ = lcons(makeString($2), $3); }
attrs: '.' attr_name { $$ = makeList1(makeString($2)); }
| '.' '*' { $$ = makeList1(makeString("*")); }
| '.' attr_name attrs { $$ = lcons(makeString($2), $3); }
;
......@@ -6044,10 +6116,9 @@ attrs: '.' attr_name
/* Target lists as found in SELECT ... and INSERT VALUES ( ... ) */
target_list: target_list ',' target_el
{ $$ = lappend($1, $3); }
| target_el
{ $$ = makeList1($1); }
target_list:
target_list ',' target_el { $$ = lappend($1, $3); }
| target_el { $$ = makeList1($1); }
;
/* AS is not optional because shift/red conflict with unary ops */
......@@ -6083,13 +6154,13 @@ target_el: a_expr AS ColLabel
$$ = NULL;
}
*/
update_target_list: update_target_list ',' update_target_el
{ $$ = lappend($1,$3); }
| update_target_el
{ $$ = makeList1($1); }
update_target_list:
update_target_list ',' update_target_el { $$ = lappend($1,$3); }
| update_target_el { $$ = makeList1($1); }
;
update_target_el: ColId opt_indirection '=' a_expr
update_target_el:
ColId opt_indirection '=' a_expr
{
$$ = makeNode(ResTarget);
$$->name = $1;
......@@ -6098,14 +6169,15 @@ update_target_el: ColId opt_indirection '=' a_expr
}
;
insert_target_list: insert_target_list ',' insert_target_el
{ $$ = lappend($1, $3); }
| insert_target_el
{ $$ = makeList1($1); }
insert_target_list:
insert_target_list ',' insert_target_el { $$ = lappend($1, $3); }
| insert_target_el { $$ = makeList1($1); }
;
insert_target_el: target_el { $$ = $1; }
| DEFAULT {
insert_target_el:
target_el { $$ = $1; }
| DEFAULT
{
InsertDefault *def = makeNode(InsertDefault);
$$ = makeNode(ResTarget);
$$->name = NULL;
......@@ -6121,23 +6193,18 @@ insert_target_el: target_el { $$ = $1; }
*
*****************************************************************************/
relation_name: SpecialRuleRelation
{
$$ = $1;
}
| ColId
{
$$ = $1;
}
relation_name:
SpecialRuleRelation { $$ = $1; }
| ColId { $$ = $1; }
;
qualified_name_list: qualified_name
{ $$ = makeList1($1); }
| qualified_name_list ',' qualified_name
{ $$ = lappend($1, $3); }
qualified_name_list:
qualified_name { $$ = makeList1($1); }
| qualified_name_list ',' qualified_name { $$ = lappend($1, $3); }
;
qualified_name: relation_name
qualified_name:
relation_name
{
$$ = makeNode(RangeVar);
$$->catalogname = NULL;
......@@ -6167,24 +6234,27 @@ qualified_name: relation_name
}
;
name_list: name
{ $$ = makeList1(makeString($1)); }
| name_list ',' name
{ $$ = lappend($1, makeString($3)); }
name_list: name { $$ = makeList1(makeString($1)); }
| name_list ',' name { $$ = lappend($1, makeString($3)); }
;
name: ColId { $$ = $1; };
database_name: ColId { $$ = $1; };
access_method: ColId { $$ = $1; };
database_name:
ColId { $$ = $1; };
access_method:
ColId { $$ = $1; };
attr_name: ColId { $$ = $1; };
index_name: ColId { $$ = $1; };
file_name: Sconst { $$ = $1; };
func_name: function_name
{ $$ = makeList1(makeString($1)); }
| dotted_name
{ $$ = $1; }
func_name: function_name { $$ = makeList1(makeString($1)); }
| dotted_name { $$ = $1; }
;
......@@ -6319,7 +6389,8 @@ type_name: IDENT { $$ = $1; }
/* Function identifier --- names that can be function names.
*/
function_name: IDENT { $$ = $1; }
function_name:
IDENT { $$ = $1; }
| unreserved_keyword { $$ = pstrdup($1); }
| func_name_keyword { $$ = pstrdup($1); }
;
......@@ -6670,7 +6741,8 @@ reserved_keyword:
;
SpecialRuleRelation: OLD
SpecialRuleRelation:
OLD
{
if (QueryIsRule)
$$ = "*OLD*";
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment