Thread: Bug in how nulls are handled by plpgsql?

Bug in how nulls are handled by plpgsql?

From
"Jonathan Ellis"
Date:
bf2=# create function foo (varchar, varchar) returns varchar as '
begin
    return $1;
end;
' language 'plpgsql';

bf2'# bf2'# bf2'# bf2'# CREATE
bf2=# bf2=# select foo('asdf', null) from dual;
 foo
-----

(1 row)

Even though the function foo never references the null, apparently postgres
thinks, "oh, a function call with a null in it.  Must be null." and doesn't
even bother executing the function.  Bug?

On another null-related note, is there any way to make
select 'asdf' || null from dual

return 'asdf' without changing it to
select 'asdf' || coalesce(null, '') from dual

?

-Jonathan


Re: Bug in how nulls are handled by plpgsql?

From
Stephan Szabo
Date:
Under 7.0.x and earlier there's only one flag to hold
the isnull state of all parameters.  If any are null all are
null and I think there's a related output issue.  Under current
sources this is done the way you'd expect.

As for the second question, not really that I can think of, but that
behavior is correct per SQL.

Stephan Szabo
sszabo@bigpanda.com

On Mon, 6 Nov 2000, Jonathan Ellis wrote:

> bf2=# create function foo (varchar, varchar) returns varchar as '
> begin
>     return $1;
> end;
> ' language 'plpgsql';
>
> bf2'# bf2'# bf2'# bf2'# CREATE
> bf2=# bf2=# select foo('asdf', null) from dual;
>  foo
> -----
>
> (1 row)
>
> Even though the function foo never references the null, apparently postgres
> thinks, "oh, a function call with a null in it.  Must be null." and doesn't
> even bother executing the function.  Bug?
>
> On another null-related note, is there any way to make
> select 'asdf' || null from dual
>
> return 'asdf' without changing it to
> select 'asdf' || coalesce(null, '') from dual
>
> ?
>
> -Jonathan
>