One code path in addRangeTableEntryForFunction() neglected to assign
a collation to the tupdesc entry it constructs (which is a bit odd
considering the other path did do so). This didn't matter before commit
5815696bc, because nothing would look at the type data in this tupdesc;
but now it does.
While at it, make sure we assign the correct typmod as well. Most
function expressions don't have a determinate typmod, but some do.
Per buildfarm, which showed failures in non-C collations, a case
I'd not thought to test for this patch :-(
chooseScalarFunctionAlias(funcexpr, funcname,
alias, nfuncs),
funcrettype,
- -1,
+ exprTypmod(funcexpr),
0);
+ TupleDescInitEntryCollation(tupdesc,
+ (AttrNumber) 1,
+ exprCollation(funcexpr));
}
else if (functypclass == TYPEFUNC_RECORD)
{
/* Add the ordinality column if needed */
if (rangefunc->ordinality)
+ {
TupleDescInitEntry(tupdesc,
(AttrNumber) ++natts,
"ordinality",
INT8OID,
-1,
0);
+ /* no need to set collation */
+ }
Assert(natts == totalatts);
}