Fix plpgsql's handling of "return simple_record_variable". If the variable's value is null, exec_stmt_return() missed filling in estate->rettype. This is a pretty old bug, but we'd managed not to notice because that value isn't consulted for a null result ... unless we have to cast it to a domain. That case led to a failure with "cache lookup failed for type 0".
The correct way to assign the data type is known by exec_eval_datum. While we could copy-and-paste that logic, it seems like a better idea to just invoke exec_eval_datum, as the ROW case already does. Reported-by: Pavel Stehule <[email protected]> Author: Tom Lane <[email protected]> Discussion: https://postgr.es/m/cafj8prbt_ahexdf-zt-cyh8bmr_qcyskm8d5nv5mvtwpiat...@mail.gmail.com Backpatch-through: 14 Branch ------ REL_15_STABLE Details ------- https://git.postgresql.org/pg/commitdiff/254b15cbf1e91ca33620027ca016e67668a321c1 Modified Files -------------- src/pl/plpgsql/src/expected/plpgsql_domain.out | 13 +++++++++++++ src/pl/plpgsql/src/pl_exec.c | 20 +++----------------- src/pl/plpgsql/src/sql/plpgsql_domain.sql | 10 ++++++++++ 3 files changed, 26 insertions(+), 17 deletions(-)
