OSDN Git Service

Fix incorrect generation of whole-row variables in planner.
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 19 Oct 2010 19:08:37 +0000 (15:08 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 19 Oct 2010 19:09:23 +0000 (15:09 -0400)
commit6e74a91b2bf0e0032ccd60dd99d6cf47c190c428
treeab3b16a1b02b566a71da14e298090f4d8c707dda
parent722d5beeb266ae83f548fc3953df700a71f30134
Fix incorrect generation of whole-row variables in planner.

A couple of places in the planner need to generate whole-row Vars, and were
cutting corners by setting vartype = RECORDOID in the Vars, even in cases
where there's an identifiable named composite type for the RTE being
referenced.  While we mostly got away with this, it failed when there was
also a parser-generated whole-row reference to the same RTE, because the
two Vars weren't equal() due to the difference in vartype.  Fix by
providing a subroutine the planner can call to generate whole-row Vars
the same way the parser does.

Per bug #5716 from Andrew Tipton.  Back-patch to 9.0 where one of the bogus
calls was introduced (the other one is new in HEAD).
src/backend/nodes/makefuncs.c
src/backend/optimizer/prep/preptlist.c
src/backend/parser/parse_expr.c
src/backend/rewrite/rewriteHandler.c
src/include/nodes/makefuncs.h
src/test/regress/expected/rowtypes.out
src/test/regress/sql/rowtypes.sql