mirror of
https://github.com/postgres/postgres.git
synced 2025-11-16 15:02:33 +03:00
Instead of supposing (wrongly, in the general case) that the rowtype
of an inheritance child table is binary-compatible with the rowtype of its parent, invent an expression node type that does the conversion correctly. Fixes the new bug exhibited by Kris Shannon as well as a lot of old bugs that would only show up when using multiple inheritance or after altering the parent table.
This commit is contained in:
@@ -10,7 +10,7 @@
|
||||
* Portions Copyright (c) 1996-2004, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $PostgreSQL: pgsql/src/include/nodes/primnodes.h,v 1.104 2004/08/29 05:06:57 momjian Exp $
|
||||
* $PostgreSQL: pgsql/src/include/nodes/primnodes.h,v 1.105 2004/12/11 23:26:49 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -591,6 +591,27 @@ typedef struct RelabelType
|
||||
CoercionForm relabelformat; /* how to display this node */
|
||||
} RelabelType;
|
||||
|
||||
/* ----------------
|
||||
* ConvertRowtypeExpr
|
||||
*
|
||||
* ConvertRowtypeExpr represents a type coercion from one composite type
|
||||
* to another, where the source type is guaranteed to contain all the columns
|
||||
* needed for the destination type plus possibly others; the columns need not
|
||||
* be in the same positions, but are matched up by name. This is primarily
|
||||
* used to convert a whole-row value of an inheritance child table into a
|
||||
* valid whole-row value of its parent table's rowtype.
|
||||
* ----------------
|
||||
*/
|
||||
|
||||
typedef struct ConvertRowtypeExpr
|
||||
{
|
||||
Expr xpr;
|
||||
Expr *arg; /* input expression */
|
||||
Oid resulttype; /* output type (always a composite type) */
|
||||
/* result typmod is not stored, but must be -1; see RowExpr comments */
|
||||
CoercionForm convertformat; /* how to display this node */
|
||||
} ConvertRowtypeExpr;
|
||||
|
||||
/*----------
|
||||
* CaseExpr - a CASE expression
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user