*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.323 2002/06/15 03:00:03 thomas Exp $
+ * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.324 2002/06/17 05:40:32 momjian Exp $
*
* HISTORY
* AUTHOR DATE MAJOR EVENT
%type <list> stmtblock, stmtmulti,
OptTableElementList, OptInherit, definition, opt_distinct,
- opt_with, func_args, func_args_list, func_as, createfunc_opt_list
+ opt_definition, func_args, func_args_list, func_as, createfunc_opt_list
oper_argtypes, RuleActionList, RuleActionMulti,
opt_column_list, columnList, opt_name_list,
sort_clause, sortby_list, index_params, index_list, name_list,
%type <ival> opt_interval
%type <node> overlay_placing, substr_from, substr_for
-%type <boolean> opt_binary, opt_using, opt_instead, opt_cursor
+%type <boolean> opt_binary, opt_using, opt_instead, opt_cursor, opt_with
%type <boolean> opt_with_copy, index_opt_unique, opt_verbose, opt_full
%type <boolean> opt_freeze, analyze_keyword
| CreateUserStmt
| ClusterStmt
| DefineStmt
- | DropStmt
+ | DropStmt
| DropSchemaStmt
| TruncateStmt
| CommentStmt
*
*****************************************************************************/
-CreateUserStmt: CREATE USER UserId OptUserList
- {
- CreateUserStmt *n = makeNode(CreateUserStmt);
- n->user = $3;
- n->options = $4;
- $$ = (Node *)n;
- }
- | CREATE USER UserId WITH OptUserList
+CreateUserStmt: CREATE USER UserId opt_with OptUserList
{
CreateUserStmt *n = makeNode(CreateUserStmt);
n->user = $3;
n->options = $5;
$$ = (Node *)n;
- }
+ }
+ ;
+
+
+opt_with: WITH { $$ = TRUE; }
+ | /*EMPTY*/ { $$ = TRUE; }
;
/*****************************************************************************
*
*****************************************************************************/
-AlterUserStmt: ALTER USER UserId OptUserList
- {
- AlterUserStmt *n = makeNode(AlterUserStmt);
- n->user = $3;
- n->options = $4;
- $$ = (Node *)n;
- }
- | ALTER USER UserId WITH OptUserList
+AlterUserStmt: ALTER USER UserId opt_with OptUserList
{
AlterUserStmt *n = makeNode(AlterUserStmt);
n->user = $3;
;
OptUserElem: PASSWORD Sconst
- {
+ {
$$ = makeNode(DefElem);
$$->defname = "password";
$$->arg = (Node *)makeString($2);
}
| ENCRYPTED PASSWORD Sconst
- {
+ {
$$ = makeNode(DefElem);
$$->defname = "encryptedPassword";
$$->arg = (Node *)makeString($3);
}
| UNENCRYPTED PASSWORD Sconst
- {
+ {
$$ = makeNode(DefElem);
$$->defname = "unencryptedPassword";
$$->arg = (Node *)makeString($3);
$$->arg = (Node *)makeInteger($2);
}
| CREATEDB
- {
+ {
$$ = makeNode(DefElem);
$$->defname = "createdb";
$$->arg = (Node *)makeInteger(TRUE);
}
| NOCREATEDB
- {
+ {
$$ = makeNode(DefElem);
$$->defname = "createdb";
$$->arg = (Node *)makeInteger(FALSE);
}
| CREATEUSER
- {
+ {
$$ = makeNode(DefElem);
$$->defname = "createuser";
$$->arg = (Node *)makeInteger(TRUE);
}
| NOCREATEUSER
- {
+ {
$$ = makeNode(DefElem);
$$->defname = "createuser";
$$->arg = (Node *)makeInteger(FALSE);
}
| IN_P GROUP_P user_list
- {
+ {
$$ = makeNode(DefElem);
$$->defname = "groupElts";
$$->arg = (Node *)$3;
}
| VALID UNTIL Sconst
- {
+ {
$$ = makeNode(DefElem);
$$->defname = "validUntil";
$$->arg = (Node *)makeString($3);
*
*****************************************************************************/
-CreateGroupStmt: CREATE GROUP_P UserId OptGroupList
- {
- CreateGroupStmt *n = makeNode(CreateGroupStmt);
- n->name = $3;
- n->options = $4;
- $$ = (Node *)n;
- }
- | CREATE GROUP_P UserId WITH OptGroupList
+CreateGroupStmt: CREATE GROUP_P UserId opt_with OptGroupList
{
CreateGroupStmt *n = makeNode(CreateGroupStmt);
n->name = $3;
;
OptGroupElem: USER user_list
- {
+ {
$$ = makeNode(DefElem);
$$->defname = "userElts";
$$->arg = (Node *)$2;
n->keys = NULL;
$$ = (Node *)n;
}
- | REFERENCES qualified_name opt_column_list key_match key_actions
+ | REFERENCES qualified_name opt_column_list key_match key_actions
{
FkConstraint *n = makeNode(FkConstraint);
n->constr_name = NULL;
opt_procedural: PROCEDURAL { $$ = TRUE; }
| /*EMPTY*/ { $$ = TRUE; }
;
-
+
/*****************************************************************************
*
* QUERIES :
$$ = (Node *)n;
}
| CREATE CONSTRAINT TRIGGER name AFTER TriggerEvents ON
- qualified_name OptConstrFromTable
+ qualified_name OptConstrFromTable
ConstraintAttributeSpec
FOR EACH ROW EXECUTE PROCEDURE
func_name '(' TriggerFuncArgs ')'
* the object associated with the comment. The form of the statement is:
*
* COMMENT ON [ [ DATABASE | DOMAIN | INDEX | SEQUENCE | TABLE | TYPE | VIEW ]
- * <objname> | AGGREGATE <aggname> (<aggtype>) | FUNCTION
- * <funcname> (arg1, arg2, ...) | OPERATOR <op>
+ * <objname> | AGGREGATE <aggname> (<aggtype>) | FUNCTION
+ * <funcname> (arg1, arg2, ...) | OPERATOR <op>
* (leftoperand_typ rightoperand_typ) | TRIGGER <triggername> ON
* <relname> | RULE <rulename> ON <relname> ] IS 'text'
*
*****************************************************************************/
-
+
CommentStmt: COMMENT ON comment_type any_name IS comment_text
{
CommentStmt *n = makeNode(CommentStmt);
| DOMAIN_P { $$ = TYPE_P; }
| TYPE_P { $$ = TYPE_P; }
| VIEW { $$ = VIEW; }
- ;
+ ;
comment_text: Sconst { $$ = $1; }
| NULL_P { $$ = NULL; }
;
-
+
/*****************************************************************************
*
* QUERY:
*****************************************************************************/
CreateFunctionStmt: CREATE opt_or_replace FUNCTION func_name func_args
- RETURNS func_return createfunc_opt_list opt_with
+ RETURNS func_return createfunc_opt_list opt_definition
{
CreateFunctionStmt *n = makeNode(CreateFunctionStmt);
n->replace = $2;
{ $$ = makeList2(makeString($1), makeString($3)); }
;
-opt_with: WITH definition { $$ = $2; }
+opt_definition: WITH definition { $$ = $2; }
| /*EMPTY*/ { $$ = NIL; }
;
RuleActionList: NOTHING { $$ = NIL; }
| RuleActionStmt { $$ = makeList1($1); }
- | '(' RuleActionMulti ')' { $$ = $2; }
+ | '(' RuleActionMulti ')' { $$ = $2; }
;
/* the thrashing around here is to discard "empty" statements... */
*
*****************************************************************************/
-CreatedbStmt: CREATE DATABASE database_name WITH createdb_opt_list
+CreatedbStmt: CREATE DATABASE database_name opt_with createdb_opt_list
{
CreatedbStmt *n = makeNode(CreatedbStmt);
List *l;
{
$$ = lconsi(3, makeListi1(-1));
}
- | OWNER opt_equal name
+ | OWNER opt_equal name
{
$$ = lconsi(4, makeList1($3));
}
/*
* Though the equals sign doesn't match other WITH options, pg_dump uses
- * equals for backward compability, and it doesn't seem worth remove it.
+ * equals for backward compability, and it doesn't seem worth removing it.
+ * 2002-02-25
*/
opt_equal: '=' { $$ = TRUE; }
| /*EMPTY*/ { $$ = FALSE; }
n->domainname = $3;
n->typename = $5;
n->constraints = $6;
-
+
if ($7 != NULL)
elog(NOTICE,"CREATE DOMAIN / COLLATE %s not yet "
"implemented; clause ignored", $7);
$$ = (Node *)n;
}
| select_clause UNION opt_all select_clause
- {
+ {
$$ = makeSetOp(SETOP_UNION, $3, $1, $4);
}
| select_clause INTERSECT opt_all select_clause
{
$$ = makeSetOp(SETOP_EXCEPT, $3, $1, $4);
}
- ;
+ ;
into_clause: INTO OptTempTableName { $$ = $2; }
| /*EMPTY*/ { $$ = NULL; }
* since TEMP is not a reserved word. See also OptTemp.
*/
OptTempTableName: TEMPORARY opt_table qualified_name
- {
+ {
$$ = $3;
$$->istemp = true;
}
| TEMP opt_table qualified_name
- {
+ {
$$ = $3;
$$->istemp = true;
}
| LOCAL TEMPORARY opt_table qualified_name
- {
+ {
$$ = $4;
$$->istemp = true;
}
| LOCAL TEMP opt_table qualified_name
- {
+ {
$$ = $4;
$$->istemp = true;
}
$$->istemp = true;
}
| TABLE qualified_name
- {
+ {
$$ = $2;
$$->istemp = false;
}
| qualified_name
- {
+ {
$$ = $1;
$$->istemp = false;
}
;
insert_target_el: target_el { $$ = $1; }
- | DEFAULT {
+ | DEFAULT {
InsertDefault *def = makeNode(InsertDefault);
$$ = makeNode(ResTarget);
$$->name = NULL;