mirror of
https://github.com/postgres/postgres.git
synced 2025-06-29 10:41:53 +03:00
Fix whole-row Var evaluation to cope with resjunk columns (again).
When a whole-row Var is reading the result of a subquery, we need it to ignore any "resjunk" columns that the subquery might have evaluated for GROUP BY or ORDER BY purposes. We've hacked this area before, in commit68e40998d0
, but that fix only covered whole-row Vars of named composite types, not those of RECORD type; and it was mighty klugy anyway, since it just assumed without checking that any extra columns in the result must be resjunk. A proper fix requires getting hold of the subquery's targetlist so we can actually see which columns are resjunk (whereupon we can use a JunkFilter to get rid of them). So bite the bullet and add some infrastructure to make that possible. Per report from Andrew Dunstan and additional testing by Merlin Moncure. Back-patch to all supported branches. In 8.3, also back-patch commit292176a118
, which for some reason I had not done at the time, but it's a prerequisite for this change.
This commit is contained in:
@ -524,8 +524,8 @@ ExecBuildProjectionInfo(List *targetList,
|
||||
* We separate the target list elements into simple Var references and
|
||||
* expressions which require the full ExecTargetList machinery. To be a
|
||||
* simple Var, a Var has to be a user attribute and not mismatch the
|
||||
* inputDesc. (Note: if there is a type mismatch then ExecEvalVar will
|
||||
* probably throw an error at runtime, but we leave that to it.)
|
||||
* inputDesc. (Note: if there is a type mismatch then ExecEvalScalarVar
|
||||
* will probably throw an error at runtime, but we leave that to it.)
|
||||
*/
|
||||
exprlist = NIL;
|
||||
numSimpleVars = 0;
|
||||
|
Reference in New Issue
Block a user