summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane2003-02-01 22:09:26 +0000
committerTom Lane2003-02-01 22:09:26 +0000
commit6ba8af9d5d5d746069a506979f7163dced0302b7 (patch)
tree8f2b44ed95a731bcdd844b5a9497e19f15db1086
parente0a1ee205333ea83604dd3a042f5c53cfc759b9d (diff)
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.
-rw-r--r--doc/src/sgml/ref/create_cast.sgml4
-rw-r--r--src/backend/commands/functioncmds.c9
2 files changed, 10 insertions, 3 deletions
diff --git a/doc/src/sgml/ref/create_cast.sgml b/doc/src/sgml/ref/create_cast.sgml
index 74c45328289..bc3894ab1c4 100644
--- a/doc/src/sgml/ref/create_cast.sgml
+++ b/doc/src/sgml/ref/create_cast.sgml
@@ -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">
<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
up in the path. The argument type must be identical to the
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>
</listitem>
</varlistentry>
diff --git a/src/backend/commands/functioncmds.c b/src/backend/commands/functioncmds.c
index 2e660d7f61a..a0943993c16 100644
--- a/src/backend/commands/functioncmds.c
+++ b/src/backend/commands/functioncmds.c
@@ -9,7 +9,7 @@
*
*
* 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
* 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");
if (procstruct->prorettype != targettypeid)
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)
elog(ERROR, "cast function must not be volatile");
+#endif
if (procstruct->proisagg)
elog(ERROR, "cast function must not be an aggregate function");
if (procstruct->proretset)