From e2dc3f57726199408902ba87eaaf7b95d1223744 Mon Sep 17 00:00:00 2001 From: Tom Lane <tgl@sss.pgh.pa.us> Date: Sun, 23 Nov 2014 15:31:32 -0500 Subject: [PATCH] Get rid of redundant production in plpgsql grammar. There may once have been a reason for the intermediate proc_stmts production in the plpgsql grammar, but it isn't doing anything useful anymore, so let's collapse it into proc_sect. Saves some code and probably a small number of nanoseconds per statement list. In passing, correctly alphabetize keyword lists to match pl_scanner.c; note that for "rowtype" vs "row_count", pl_scanner.c must sort on the basis of the lower-case spelling. Noted while fooling with a patch to de-reserve more plpgsql keywords. --- src/pl/plpgsql/src/pl_gram.y | 32 +++++++++++--------------------- 1 file changed, 11 insertions(+), 21 deletions(-) diff --git a/src/pl/plpgsql/src/pl_gram.y b/src/pl/plpgsql/src/pl_gram.y index 893f3a486f5..82378c7d5fa 100644 --- a/src/pl/plpgsql/src/pl_gram.y +++ b/src/pl/plpgsql/src/pl_gram.y @@ -188,7 +188,7 @@ static void check_raise_parameters(PLpgSQL_stmt_raise *stmt); %type <str> any_identifier opt_block_label opt_label option_value -%type <list> proc_sect proc_stmts stmt_elsifs stmt_else +%type <list> proc_sect stmt_elsifs stmt_else %type <loop_body> loop_body %type <stmt> proc_stmt pl_block %type <stmt> stmt_assign stmt_if stmt_loop stmt_while stmt_exit @@ -318,8 +318,8 @@ static void check_raise_parameters(PLpgSQL_stmt_raise *stmt); %token <keyword> K_RETURN %token <keyword> K_RETURNED_SQLSTATE %token <keyword> K_REVERSE -%token <keyword> K_ROWTYPE %token <keyword> K_ROW_COUNT +%token <keyword> K_ROWTYPE %token <keyword> K_SCHEMA %token <keyword> K_SCHEMA_NAME %token <keyword> K_SCROLL @@ -838,24 +838,14 @@ assign_operator : '=' proc_sect : { $$ = NIL; } - | proc_stmts - { $$ = $1; } - ; - -proc_stmts : proc_stmts proc_stmt - { - if ($2 == NULL) - $$ = $1; - else - $$ = lappend($1, $2); - } - | proc_stmt - { - if ($1 == NULL) - $$ = NIL; - else - $$ = list_make1($1); - } + | proc_sect proc_stmt + { + /* don't bother linking null statements into list */ + if ($2 == NULL) + $$ = $1; + else + $$ = lappend($1, $2); + } ; proc_stmt : pl_block ';' @@ -2356,8 +2346,8 @@ unreserved_keyword : | K_PG_EXCEPTION_CONTEXT | K_PG_EXCEPTION_DETAIL | K_PG_EXCEPTION_HINT - | K_PRIOR | K_PRINT_STRICT_PARAMS + | K_PRIOR | K_QUERY | K_RELATIVE | K_RESULT_OID -- GitLab