Re: Assigning ROW variable having NULL value to RECORD type variabledoesn't give any structure to the RECORD variable. - Mailing list pgsql-hackers

From Pavel Stehule
Subject Re: Assigning ROW variable having NULL value to RECORD type variabledoesn't give any structure to the RECORD variable.
Date
Msg-id CAFj8pRAF+3Yq7PgHrb4_C0QTZPRB-bd8=wSs7KjQF9PL_LK9Yw@mail.gmail.com
Whole thread Raw
In response to Assigning ROW variable having NULL value to RECORD type variabledoesn't give any structure to the RECORD variable.  (Ashutosh Sharma <ashu.coek88@gmail.com>)
Responses Re: Assigning ROW variable having NULL value to RECORD type variabledoesn't give any structure to the RECORD variable.  (Ashutosh Sharma <ashu.coek88@gmail.com>)
List pgsql-hackers


st 1. 1. 2020 v 16:50 odesílatel Ashutosh Sharma <ashu.coek88@gmail.com> napsal:
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?

+1

Pavel


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


pgsql-hackers by date:

Previous
From: Ashutosh Sharma
Date:
Subject: Assigning ROW variable having NULL value to RECORD type variabledoesn't give any structure to the RECORD variable.
Next
From: Robert Haas
Date:
Subject: Re: backup manifests