mirror of
https://github.com/postgres/postgres.git
synced 2025-07-07 00:36:50 +03:00
Un-break whole-row Vars referencing domain-over-composite types.
In commit ec62cb0aa
, I foolishly replaced ExecEvalWholeRowVar's
lookup_rowtype_tupdesc_domain call with just lookup_rowtype_tupdesc,
because I didn't see how a domain could be involved there, and
there were no regression test cases to jog my memory. But the
existing code was correct, so revert that change and add a test
case showing why it's necessary. (Note: per comment in struct
DatumTupleFields, it is correct to produce an output tuple that's
labeled with the base composite type, not the domain; hence just
blindly looking through the domain is correct here.)
Per bug #17515 from Dan Kubb. Back-patch to v11 where domains over
composites became a thing.
Discussion: https://postgr.es/m/17515-a24737438363aca0@postgresql.org
This commit is contained in:
@ -4138,8 +4138,12 @@ ExecEvalWholeRowVar(ExprState *state, ExprEvalStep *op, ExprContext *econtext)
|
||||
* generates an INT4 NULL regardless of the dropped column type).
|
||||
* If we find a dropped column and cannot verify that case (1)
|
||||
* holds, we have to use the slow path to check (2) for each row.
|
||||
*
|
||||
* If vartype is a domain over composite, just look through that
|
||||
* to the base composite type.
|
||||
*/
|
||||
var_tupdesc = lookup_rowtype_tupdesc(variable->vartype, -1);
|
||||
var_tupdesc = lookup_rowtype_tupdesc_domain(variable->vartype,
|
||||
-1, false);
|
||||
|
||||
slot_tupdesc = slot->tts_tupleDescriptor;
|
||||
|
||||
|
Reference in New Issue
Block a user