mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03: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:
		@@ -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)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user