diff --git a/src/pl/plpgsql/src/pl_exec.c b/src/pl/plpgsql/src/pl_exec.c index 193e80c1528..07791ffc86d 100644 --- a/src/pl/plpgsql/src/pl_exec.c +++ b/src/pl/plpgsql/src/pl_exec.c @@ -3,7 +3,7 @@ * procedural language * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/pl/plpgsql/src/pl_exec.c,v 1.65.2.4 2005/06/20 20:45:06 tgl Exp $ + * $Header: /cvsroot/pgsql/src/pl/plpgsql/src/pl_exec.c,v 1.65.2.5 2007/02/08 18:38:31 tgl Exp $ * * This software is copyrighted by Jan Wieck - Hamburg. * @@ -767,26 +767,26 @@ exec_stmt_block(PLpgSQL_execstate * estate, PLpgSQL_stmt_block * block) { PLpgSQL_var *var = (PLpgSQL_var *) (estate->datums[n]); + /* free any old value, in case re-entering block */ if (var->freeval) { pfree((void *) (var->value)); var->freeval = false; } - if (!var->isconst || var->isnull) + /* Initially it contains a NULL */ + var->value = (Datum) 0; + var->isnull = true; + + if (var->default_val == NULL) { - if (var->default_val == NULL) - { - var->value = (Datum) 0; - var->isnull = true; - if (var->notnull) - elog(ERROR, "variable '%s' declared NOT NULL cannot default to NULL", var->refname); - } - else - { - exec_assign_expr(estate, (PLpgSQL_datum *) var, - var->default_val); - } + if (var->notnull) + elog(ERROR, "variable '%s' declared NOT NULL cannot default to NULL", var->refname); + } + else + { + exec_assign_expr(estate, (PLpgSQL_datum *) var, + var->default_val); } } break;