mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-12-27 08:39:28 +08:00
Remove restriction that cast functions cannot be volatile. This
restriction was debatable to begin with, but it has now become obvious that it breaks forward-porting of user-defined types; contrib/lo being the most salient example.
This commit is contained in:
parent
e0a1ee2053
commit
6ba8af9d5d
@ -1,4 +1,4 @@
|
|||||||
<!-- $Header: /cvsroot/pgsql/doc/src/sgml/ref/create_cast.sgml,v 1.8 2003/01/19 00:13:29 momjian Exp $ -->
|
<!-- $Header: /cvsroot/pgsql/doc/src/sgml/ref/create_cast.sgml,v 1.9 2003/02/01 22:09:25 tgl Exp $ -->
|
||||||
|
|
||||||
<refentry id="SQL-CREATECAST">
|
<refentry id="SQL-CREATECAST">
|
||||||
<refmeta>
|
<refmeta>
|
||||||
@ -143,7 +143,7 @@ SELECT 'The time is ' || CAST(now() AS text);
|
|||||||
be schema-qualified. If it is not, the function will be looked
|
be schema-qualified. If it is not, the function will be looked
|
||||||
up in the path. The argument type must be identical to the
|
up in the path. The argument type must be identical to the
|
||||||
source type, the result data type must match the target type of
|
source type, the result data type must match the target type of
|
||||||
the cast. Cast functions must be marked immutable or stable.
|
the cast.
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/commands/functioncmds.c,v 1.24 2002/11/01 19:19:58 tgl Exp $
|
* $Header: /cvsroot/pgsql/src/backend/commands/functioncmds.c,v 1.25 2003/02/01 22:09:26 tgl Exp $
|
||||||
*
|
*
|
||||||
* DESCRIPTION
|
* DESCRIPTION
|
||||||
* These routines take the parse tree and pick out the
|
* These routines take the parse tree and pick out the
|
||||||
@ -745,8 +745,15 @@ CreateCast(CreateCastStmt *stmt)
|
|||||||
elog(ERROR, "argument of cast function must match source data type");
|
elog(ERROR, "argument of cast function must match source data type");
|
||||||
if (procstruct->prorettype != targettypeid)
|
if (procstruct->prorettype != targettypeid)
|
||||||
elog(ERROR, "return data type of cast function must match target data type");
|
elog(ERROR, "return data type of cast function must match target data type");
|
||||||
|
/*
|
||||||
|
* Restricting the volatility of a cast function may or may not be
|
||||||
|
* a good idea in the abstract, but it definitely breaks many old
|
||||||
|
* user-defined types. Disable this check --- tgl 2/1/03
|
||||||
|
*/
|
||||||
|
#ifdef NOT_USED
|
||||||
if (procstruct->provolatile == PROVOLATILE_VOLATILE)
|
if (procstruct->provolatile == PROVOLATILE_VOLATILE)
|
||||||
elog(ERROR, "cast function must not be volatile");
|
elog(ERROR, "cast function must not be volatile");
|
||||||
|
#endif
|
||||||
if (procstruct->proisagg)
|
if (procstruct->proisagg)
|
||||||
elog(ERROR, "cast function must not be an aggregate function");
|
elog(ERROR, "cast function must not be an aggregate function");
|
||||||
if (procstruct->proretset)
|
if (procstruct->proretset)
|
||||||
|
Loading…
Reference in New Issue
Block a user