Fix incorrect generation of whole-row variables in planner.
authorTom Lane <[email protected]>
Tue, 19 Oct 2010 19:08:47 +0000 (15:08 -0400)
committerTom Lane <[email protected]>
Tue, 19 Oct 2010 19:08:47 +0000 (15:08 -0400)
commit01b4bb44fe0b0687ec5578a5fa72527080291c28
treec4bdb9c2c4addfea8624bbd284fad2fb1f428939
parent80a65c05777ef2b05dfe3a276568cad438fb804d
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/include/nodes/makefuncs.h
src/test/regress/expected/rowtypes.out
src/test/regress/sql/rowtypes.sql