wrong inicializied array in plpgsql

Started by Pavel Stehuleover 22 years ago2 messagesbugs
Jump to latest
#1Pavel Stehule
pavel.stehule@gmail.com

Hello

I am testing long array values. I tryed write simple function in plpgsql
for this. I found maybe a bug. Array in plpgsql without explicit init
(empty array) don't work;

CREATE OR REPLACE FUNCTION foo1() RETURNS FLOAT AS '
DECLARE f FLOAT [];
BEGIN
f[1] := 10.0;
RETURN f[1];
END' LANGUAGE plpgsql;

cyril=> select foo1();
foo1
------

(1 row)

CREATE OR REPLACE FUNCTION foo2() RETURNS FLOAT AS '
DECLARE f FLOAT [] DEFAULT ''{}'';
BEGIN
f[1] := 10.0;
RETURN f[1];
END' LANGUAGE plpgsql;

cyril=> select foo2();
foo2
------
10
(1 row)

regards
Pavel Stehule

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Pavel Stehule (#1)
Re: wrong inicializied array in plpgsql

Pavel Stehule <stehule@kix.fsv.cvut.cz> writes:

I am testing long array values. I tryed write simple function in plpgsql
for this. I found maybe a bug. Array in plpgsql without explicit init
(empty array) don't work;

This isn't a bug; or at least, it's not plpgsql's fault. The array
variable is initially NULL, same as any other plpgsql variable you
didn't explicitly initialize. And assigning to an element of a NULL
array yields another NULL array.

Perhaps that behavior should be changed, but I think it would require
making unsupported assumptions about what the user wants...

regards, tom lane