aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>1996-12-20 20:33:12 +0000
committerBruce Momjian <bruce@momjian.us>1996-12-20 20:33:12 +0000
commit4371756f162cd548d9dce3d434bec2bcdedc4883 (patch)
treeacc5b9e66854aee84d9aeec5fb86c6bb03a2ee71
parent231e1e70d853ddc0a057e39ce1f01e429e208daf (diff)
downloadpostgresql-4371756f162cd548d9dce3d434bec2bcdedc4883.tar.gz
postgresql-4371756f162cd548d9dce3d434bec2bcdedc4883.zip
Improve handling of semicolons ending statements.
-rw-r--r--src/backend/parser/gram.y46
1 files changed, 31 insertions, 15 deletions
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index 2e4e1f7a830..fd5a05f0c40 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -10,7 +10,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 1.22 1996/12/17 01:53:29 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 1.23 1996/12/20 20:33:12 momjian Exp $
*
* HISTORY
* AUTHOR DATE MAJOR EVENT
@@ -98,7 +98,8 @@ static Node *makeA_Expr(int oper, char *opname, Node *lexpr, Node *rexpr);
AppendStmt *astmt;
}
-%type <node> stmt, AddAttrStmt, ClosePortalStmt,
+%type <node> stmt,
+ AddAttrStmt, ClosePortalStmt,
CopyStmt, CreateStmt, DefineStmt, DestroyStmt,
ExtendStmt, FetchStmt, GrantStmt,
IndexStmt, MoveStmt, ListenStmt, OptimizableStmt,
@@ -121,10 +122,12 @@ static Node *makeA_Expr(int oper, char *opname, Node *lexpr, Node *rexpr);
%type <str> privileges, operation_commalist, grantee
%type <chr> operation
-%type <list> stmtblock, relation_name_list, OptTableElementList,
+%type <list> stmtblock, stmtmulti,
+ relation_name_list, OptTableElementList,
tableElementList, OptInherit, definition,
opt_with, def_args, def_name_list, func_argtypes,
- oper_argtypes, OptStmtList, OptStmtBlock, opt_column_list, columnList,
+ oper_argtypes, OptStmtList, OptStmtBlock, OptStmtMulti,
+ opt_column_list, columnList,
sort_clause, sortby_list, index_params,
name_list, from_clause, from_list, opt_array_bounds, nest_array_bounds,
expr_list, attrs, res_target_list, res_target_list2,
@@ -210,7 +213,8 @@ static Node *makeA_Expr(int oper, char *opname, Node *lexpr, Node *rexpr);
%left '+' '-'
%left '*' '/'
%left '|' /* this is the relation union op, not logical or */
-%right ';' ':' /* Unary Operators */
+%right ':' /* Unary Operators */
+%left ';' /* end of statement or natural log */
%nonassoc '<' '>'
%right UMINUS
%left '.'
@@ -219,12 +223,18 @@ static Node *makeA_Expr(int oper, char *opname, Node *lexpr, Node *rexpr);
%nonassoc REDUCE
%%
-stmtblock: stmt ';' stmtblock
- { parsetree = lcons($1, parsetree); }
- | stmt ';'
- { parsetree = lcons($1, NIL); }
- | stmt
- { parsetree = lcons($1, NIL); }
+stmtblock: stmtmulti
+ { parsetree = $1; }
+ | stmt
+ { parsetree = lcons($1,NIL); }
+ ;
+
+stmtmulti: stmtmulti stmt ';'
+ { $$ = lappend($1, $2); }
+ | stmtmulti stmt
+ { $$ = lappend($1, $2); }
+ | stmt ';'
+ { $$ = lcons($1,NIL); }
;
stmt : AddAttrStmt
@@ -949,14 +959,20 @@ OptStmtList: NOTHING { $$ = NIL; }
| '[' OptStmtBlock ']' { $$ = $2; }
;
-OptStmtBlock: OptimizableStmt
+OptStmtBlock: OptStmtMulti
+ { $$ = $1; }
+ | OptimizableStmt
{ $$ = lcons($1, NIL); }
+ ;
+
+OptStmtMulti: OptStmtMulti OptimizableStmt ';'
+ { $$ = lappend($1, $2); }
+ | OptStmtMulti OptimizableStmt
+ { $$ = lappend($1, $2); }
| OptimizableStmt ';'
{ $$ = lcons($1, NIL); }
- | OptStmtBlock OptimizableStmt
- { $$ = lappend($1, $2); }
;
-
+
event_object: relation_name '.' attr_name
{
$$ = makeNode(Attr);