1010 *
1111 *
1212 * IDENTIFICATION
13- * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 1.22 1996/12/17 01:53:29 momjian Exp $
13+ * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 1.23 1996/12/20 20:33:12 momjian Exp $
1414 *
1515 * HISTORY
1616 * AUTHORDATEMAJOR EVENT
@@ -98,7 +98,8 @@ static Node *makeA_Expr(int oper, char *opname, Node *lexpr, Node *rexpr);
9898 AppendStmt*astmt;
9999}
100100
101- %type <node>stmt, AddAttrStmt, ClosePortalStmt,
101+ %type <node>stmt,
102+ AddAttrStmt, ClosePortalStmt,
102103CopyStmt, CreateStmt, DefineStmt, DestroyStmt,
103104ExtendStmt, FetchStmt,GrantStmt,
104105IndexStmt, MoveStmt, ListenStmt, OptimizableStmt,
@@ -121,10 +122,12 @@ static Node *makeA_Expr(int oper, char *opname, Node *lexpr, Node *rexpr);
121122%type <str>privileges, operation_commalist, grantee
122123%type <chr>operation
123124
124- %type <list>stmtblock, relation_name_list, OptTableElementList,
125+ %type <list>stmtblock, stmtmulti,
126+ relation_name_list, OptTableElementList,
125127tableElementList, OptInherit, definition,
126128opt_with, def_args, def_name_list, func_argtypes,
127- oper_argtypes, OptStmtList, OptStmtBlock, opt_column_list, columnList,
129+ oper_argtypes, OptStmtList, OptStmtBlock, OptStmtMulti,
130+ opt_column_list, columnList,
128131sort_clause, sortby_list, index_params,
129132name_list, from_clause, from_list, opt_array_bounds, nest_array_bounds,
130133expr_list, attrs, res_target_list, res_target_list2,
@@ -210,7 +213,8 @@ static Node *makeA_Expr(int oper, char *opname, Node *lexpr, Node *rexpr);
210213%left '+' '-'
211214%left '*' '/'
212215%left'|'/* this is the relation union op, not logical or */
213- %right ';' ':'/* Unary Operators */
216+ %right ':'/* Unary Operators */
217+ %left';'/* end of statement or natural log */
214218%nonassoc '<' '>'
215219%right UMINUS
216220%left'.'
@@ -219,12 +223,18 @@ static Node *makeA_Expr(int oper, char *opname, Node *lexpr, Node *rexpr);
219223%nonassoc REDUCE
220224%%
221225
222- stmtblock: stmt ';' stmtblock
223- { parsetree = lcons($1, parsetree); }
224- | stmt ';'
225- { parsetree = lcons($1, NIL); }
226- | stmt
227- { parsetree = lcons($1, NIL); }
226+ stmtblock: stmtmulti
227+ { parsetree = $1; }
228+ | stmt
229+ { parsetree = lcons($1,NIL); }
230+ ;
231+
232+ stmtmulti: stmtmulti stmt ';'
233+ { $$ = lappend($1, $2); }
234+ | stmtmulti stmt
235+ { $$ = lappend($1, $2); }
236+ | stmt ';'
237+ { $$ = lcons($1,NIL); }
228238;
229239
230240stmt : AddAttrStmt
@@ -949,14 +959,20 @@ OptStmtList: NOTHING{ $$ = NIL; }
949959| '[' OptStmtBlock ']'{ $$ = $2; }
950960 ;
951961
952- OptStmtBlock: OptimizableStmt
962+ OptStmtBlock: OptStmtMulti
963+ { $$ = $1; }
964+ | OptimizableStmt
953965{ $$ = lcons($1, NIL); }
966+ ;
967+
968+ OptStmtMulti: OptStmtMulti OptimizableStmt ';'
969+ { $$ = lappend($1, $2); }
970+ | OptStmtMulti OptimizableStmt
971+ { $$ = lappend($1, $2); }
954972| OptimizableStmt ';'
955973{ $$ = lcons($1, NIL); }
956- | OptStmtBlock OptimizableStmt
957- { $$ = lappend($1, $2); }
958974;
959-
975+
960976event_object: relation_name '.' attr_name
961977{
962978 $$ = makeNode(Attr);