BUG #14834: quote_literal and composite types, different behaviour between sql and plpgsql

Started by Nonameover 8 years ago2 messagesbugs
Jump to latest
#1Noname
dvd@gnx.it

The following bug has been logged on the website:

Bug reference: 14834
Logged by: David Mugnai
Email address: dvd@gnx.it
PostgreSQL version: 9.4.7
Operating system: Linux
Description:

I found that `quote_literal` behaviour is wrong when used in a plpgsql
function over a null composite type, let me show:

create type t as (x text);

create function f(val t default null) returns text as $$
select quote_literal(val);
$$ language sql stable;

create function f2(val t default null) returns text as $$
declare
o text;
begin
select quote_literal(val) into o;
return o;
end
$$ language plpgsql;

dvd@[local]/dvd> select f() union all select f2();
f
--------
(null)
'()'
(2 rows)

If I do not mistake the both the functions should returns NULL;

--
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Noname (#1)
Re: BUG #14834: quote_literal and composite types, different behaviour between sql and plpgsql

dvd@gnx.it writes:

I found that `quote_literal` behaviour is wrong when used in a plpgsql
function over a null composite type, let me show:

No, there's nothing wrong with quote_literal. Your example is showing
that plpgsql converts a "null" composite value into a row-of-nulls,
when dealing with a variable of a named composite type (in this case,
the variable is the parameter "val"). This is arguably wrong, but plpgsql
has been doing that for a mighty long time so people are hesitant to
change it.

regards, tom lane

--
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs