mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-31 10:30:33 +03:00 
			
		
		
		
	plpgsql's exec_simple_cast_value() mistakenly supposed that it could bypass
casting effort whenever the input value was NULL. However this prevents application of not-null domain constraints in the cases that use this function, as illustrated in bug #4741. Since this function isn't meant for use in performance-critical paths anyway, this certainly seems like another case of "premature optimization is the root of all evil". Back-patch as far as 8.2; older versions made no effort to enforce domain constraints here anyway.
This commit is contained in:
		| @@ -8,7 +8,7 @@ | |||||||
|  * |  * | ||||||
|  * |  * | ||||||
|  * IDENTIFICATION |  * IDENTIFICATION | ||||||
|  *	  $PostgreSQL: pgsql/src/pl/plpgsql/src/pl_exec.c,v 1.180.2.9 2009/02/27 10:27:45 heikki Exp $ |  *	  $PostgreSQL: pgsql/src/pl/plpgsql/src/pl_exec.c,v 1.180.2.10 2009/04/02 01:16:25 tgl Exp $ | ||||||
|  * |  * | ||||||
|  *------------------------------------------------------------------------- |  *------------------------------------------------------------------------- | ||||||
|  */ |  */ | ||||||
| @@ -4350,8 +4350,6 @@ static Datum | |||||||
| exec_simple_cast_value(Datum value, Oid valtype, | exec_simple_cast_value(Datum value, Oid valtype, | ||||||
| 					   Oid reqtype, int32 reqtypmod, | 					   Oid reqtype, int32 reqtypmod, | ||||||
| 					   bool isnull) | 					   bool isnull) | ||||||
| { |  | ||||||
| 	if (!isnull) |  | ||||||
| { | { | ||||||
| 	if (valtype != reqtype || reqtypmod != -1) | 	if (valtype != reqtype || reqtypmod != -1) | ||||||
| 	{ | 	{ | ||||||
| @@ -4371,7 +4369,6 @@ exec_simple_cast_value(Datum value, Oid valtype, | |||||||
| 								reqtypmod, | 								reqtypmod, | ||||||
| 								isnull); | 								isnull); | ||||||
| 	} | 	} | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return value; | 	return value; | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user