mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-03-19 20:00:51 +08:00
Improve handling of semicolons ending statements.
This commit is contained in:
parent
231e1e70d8
commit
4371756f16
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user