CREATE RULE syntax simplification
От | Tom Lane |
---|---|
Тема | CREATE RULE syntax simplification |
Дата | |
Msg-id | 11124.939136350@sss.pgh.pa.us обсуждение исходный текст |
Список | pgsql-hackers |
There are a couple of gripes in the pgsql-sql list this morning about being unable to enter CREATE RULE commands that specify multiple actions --- those folk are getting parser: parse error at or near "" from what appears to be perfectly valid syntax. I suppose they are getting burnt by a broken vendor-supplied yacc. But while looking at this, I couldn't help noticing how crufty the syntax is: RuleActionList: NOTHING { $$ = NIL; } | SelectStmt { $$ = lcons($1, NIL); } | RuleActionStmt { $$ = lcons($1, NIL); } | '[' RuleActionBlock ']' { $$ = $2; } | '('RuleActionBlock ')' { $$ = $2; } ; RuleActionBlock: RuleActionMulti { $$ = $1; } | RuleActionStmt { $$ = lcons($1, NIL); } ; RuleActionMulti: RuleActionMulti RuleActionStmt { $$ = lappend($1, $2); } | RuleActionMulti RuleActionStmt';' { $$ = lappend($1, $2); } | RuleActionStmt ';' { $$ = lcons($1, NIL);} ; RuleActionStmt: InsertStmt | UpdateStmt | DeleteStmt | NotifyStmt ; What's wrong with that you say? Well, it allows a RuleActionBlock to be made up of RuleActionStmts that aren't separated by semicolons. Specifically stmt1 ; stmt2 stmt3 stmt4 has a production sequence. I don't know if that was intentional or not, but it sure looks like a shift/reduce conflict waiting to happen, as soon as the possible RuleActionStmts get any more complicated. In any case, it's pretty bizarre that a semi is only required after the first statement. I suggest that we require separating semicolons and simplify the RuleActionBlock production to a more conventional list style, RuleActionBlock: RuleActionStmt | RuleActionBlock ';' RuleActionStmt | RuleActionBlock ';' (the last alternative isn't normal list style, but it allows a trailing semicolon which is accepted by the existing grammar). Aside from forestalling future trouble with syntax extensions, this might make us work a little better with old versions of yacc. I don't know exactly why this area is a trouble spot for vendor yaccs, but it seems to be. Simplifying the syntax may well help. Comments? Anyone really in love with semicolon-less rule lists? regards, tom lane
В списке pgsql-hackers по дате отправления: