aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2004-08-16 17:52:06 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2004-08-16 17:52:06 +0000
commit64410289f8a684042d6cbf80b9341a6f2cab9f29 (patch)
tree2baf49fc036d774e5991aa8025da1c02bc5d0ef1 /src
parentbc91389df9fa356701f60344c03b13424fa9fc6d (diff)
downloadpostgresql-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.y35
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)