diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2004-08-16 17:52:06 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2004-08-16 17:52:06 +0000 |
commit | 64410289f8a684042d6cbf80b9341a6f2cab9f29 (patch) | |
tree | 2baf49fc036d774e5991aa8025da1c02bc5d0ef1 /src | |
parent | bc91389df9fa356701f60344c03b13424fa9fc6d (diff) | |
download | postgresql-64410289f8a684042d6cbf80b9341a6f2cab9f29.tar.gz postgresql-64410289f8a684042d6cbf80b9341a6f2cab9f29.zip |
Add trivial NULL statement to plpgsql, for Oracle compatibility.
Diffstat (limited to 'src')
-rw-r--r-- | src/pl/plpgsql/src/gram.y | 35 |
1 files changed, 23 insertions, 12 deletions
diff --git a/src/pl/plpgsql/src/gram.y b/src/pl/plpgsql/src/gram.y index 96c5c61725d..c5c6ddf703c 100644 --- a/src/pl/plpgsql/src/gram.y +++ b/src/pl/plpgsql/src/gram.y @@ -4,7 +4,7 @@ * procedural language * * IDENTIFICATION - * $PostgreSQL: pgsql/src/pl/plpgsql/src/gram.y,v 1.59 2004/07/31 23:04:56 tgl Exp $ + * $PostgreSQL: pgsql/src/pl/plpgsql/src/gram.y,v 1.60 2004/08/16 17:52:06 tgl Exp $ * * This software is copyrighted by Jan Wieck - Hamburg. * @@ -132,7 +132,7 @@ static void check_assignable(PLpgSQL_datum *datum); %type <stmt> stmt_return stmt_return_next stmt_raise stmt_execsql %type <stmt> stmt_for stmt_select stmt_perform %type <stmt> stmt_dynexecute stmt_getdiag -%type <stmt> stmt_open stmt_fetch stmt_close +%type <stmt> stmt_open stmt_fetch stmt_close stmt_null %type <exceptions> exception_sect proc_exceptions %type <exception> proc_exception @@ -592,29 +592,31 @@ proc_sect : proc_stmts : proc_stmts proc_stmt { + if ($2 != NULL) + { if ($1->stmts_used == $1->stmts_alloc) { $1->stmts_alloc *= 2; $1->stmts = realloc($1->stmts, sizeof(PLpgSQL_stmt *) * $1->stmts_alloc); } $1->stmts[$1->stmts_used++] = $2; - - $$ = $1; + } + $$ = $1; } | proc_stmt { - PLpgSQL_stmts *new; + PLpgSQL_stmts *new; - new = malloc(sizeof(PLpgSQL_stmts)); - memset(new, 0, sizeof(PLpgSQL_stmts)); + new = malloc(sizeof(PLpgSQL_stmts)); + memset(new, 0, sizeof(PLpgSQL_stmts)); - new->stmts_alloc = 64; - new->stmts_used = 1; - new->stmts = malloc(sizeof(PLpgSQL_stmt *) * new->stmts_alloc); - new->stmts[0] = $1; + new->stmts_alloc = 32; + new->stmts = malloc(sizeof(PLpgSQL_stmt *) * new->stmts_alloc); - $$ = new; + if ($1 != NULL) + new->stmts[new->stmts_used++] = $1; + $$ = new; } ; @@ -654,6 +656,8 @@ proc_stmt : pl_block ';' { $$ = $1; } | stmt_close { $$ = $1; } + | stmt_null + { $$ = $1; } ; stmt_perform : K_PERFORM lno expr_until_semi @@ -1493,6 +1497,13 @@ stmt_close : K_CLOSE lno cursor_variable ';' } ; +stmt_null : K_NULL ';' + { + /* We do not bother building a node for NULL */ + $$ = NULL; + } + ; + cursor_varptr : T_SCALAR { if (yylval.scalar->dtype != PLPGSQL_DTYPE_VAR) |