mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-03-13 19:57:53 +08:00
Allow implicit cast from any named composite type to RECORD. At the
moment this has no particular use except to allow table rows to be passed to record_out(), but that case seems to be useful in itself per recent example from Elein. Further down the road we could look at letting PL functions be declared to accept RECORD parameters.
This commit is contained in:
parent
13f75e378e
commit
d468e19a06
@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/parser/parse_coerce.c,v 2.127 2005/03/29 00:17:04 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/parser/parse_coerce.c,v 2.128 2005/05/05 00:19:47 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -318,6 +318,13 @@ coerce_type(ParseState *pstate, Node *node,
|
||||
return coerce_record_to_complex(pstate, node, targetTypeId,
|
||||
ccontext, cformat);
|
||||
}
|
||||
if (targetTypeId == RECORDOID &&
|
||||
ISCOMPLEX(inputTypeId))
|
||||
{
|
||||
/* Coerce a specific complex type to RECORD */
|
||||
/* NB: we do NOT want a RelabelType here */
|
||||
return node;
|
||||
}
|
||||
if (typeInheritsFrom(inputTypeId, targetTypeId))
|
||||
{
|
||||
/*
|
||||
@ -405,6 +412,13 @@ can_coerce_type(int nargs, Oid *input_typeids, Oid *target_typeids,
|
||||
ISCOMPLEX(targetTypeId))
|
||||
continue;
|
||||
|
||||
/*
|
||||
* If input is a composite type and target is RECORD, accept
|
||||
*/
|
||||
if (targetTypeId == RECORDOID &&
|
||||
ISCOMPLEX(inputTypeId))
|
||||
continue;
|
||||
|
||||
/*
|
||||
* If input is a class type that inherits from target, accept
|
||||
*/
|
||||
|
Loading…
x
Reference in New Issue
Block a user