Assigning ROW variable having NULL value to RECORD type variabledoesn't give any structure to the RECORD variable.

Поиск
Список
Период
Сортировка
От Ashutosh Sharma
Тема Assigning ROW variable having NULL value to RECORD type variabledoesn't give any structure to the RECORD variable.
Дата
Msg-id CAE9k0Pk5n_xt8b0v+tCXHoOk6LRUYBHsOecpWp2B=9KVzV_h5A@mail.gmail.com
обсуждение исходный текст
Ответы Re: Assigning ROW variable having NULL value to RECORD type variabledoesn't give any structure to the RECORD variable.
Re: Assigning ROW variable having NULL value to RECORD type variabledoesn't give any structure to the RECORD variable.
Список pgsql-hackers
Hi All,

When a ROW variable having NULL value is assigned to a RECORD
variable, it gives no structure to the RECORD type variable. Let's
consider the following example.

create table t1(a int, b text);

insert into t1 values(1, 'str1');

create or replace function f1() returns void as
$$
declare
   row t1%ROWTYPE;
   rec RECORD;
begin
   row := NULL;
   rec := row;
   raise info 'rec.a = %, rec.b = %', rec.a, rec.b;
end;
$$ language plpgsql;

In above example as 'row' variable is having NULL value, assigning
this to 'rec' didn't give any structure to it although 'row' is having
a predefined structure. Here is the error observed when above function
is executed.

select f1();
ERROR:  record "rec" is not assigned yet

This started happening from the following git commit onwards,

commit 4b93f57999a2ca9b9c9e573ea32ab1aeaa8bf496
Author: Tom Lane <tgl@sss.pgh.pa.us>
Date:   Tue Feb 13 18:52:21 2018 -0500

    Make plpgsql use its DTYPE_REC code paths for composite-type variables.

I know this is expected to happen considering the changes done in
above commit because from this commit onwards, NULL value assigned to
any row variable represents a true NULL composite value before this
commit it used to be a tuple with each column having null value in it.
But, the point is, even if the row variable is having a NULL value it
still has a structure associated with it. Shouldn't that structure be
transferred to RECORD variable when it is assigned with a ROW type
variable ? Can we consider this behaviour change as a side effect of
the improvement done in the RECORD type of variable?

--
With Regards,
Ashutosh Sharma
EnterpriseDB:http://www.enterprisedb.com



В списке pgsql-hackers по дате отправления:

Предыдущее
От: Thomas Munro
Дата:
Сообщение: WIP: WAL prefetch (another approach)
Следующее
От: Pavel Stehule
Дата:
Сообщение: Re: Assigning ROW variable having NULL value to RECORD type variabledoesn't give any structure to the RECORD variable.