mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-31 00:03:57 -04:00 
			
		
		
		
	The UNDEFOID later causes an assertion failure in heap_formtuple when
you try to use the tupdesc to build a tuple. Joe Conway
This commit is contained in:
		
							parent
							
								
									1bab464eb4
								
							
						
					
					
						commit
						0da6cf54ec
					
				| @ -8,7 +8,7 @@ | |||||||
|  * |  * | ||||||
|  * |  * | ||||||
|  * IDENTIFICATION |  * IDENTIFICATION | ||||||
|  *	  $Header: /cvsroot/pgsql/src/backend/executor/execQual.c,v 1.103 2002/08/30 23:59:46 tgl Exp $ |  *	  $Header: /cvsroot/pgsql/src/backend/executor/execQual.c,v 1.104 2002/08/31 19:09:27 tgl Exp $ | ||||||
|  * |  * | ||||||
|  *------------------------------------------------------------------------- |  *------------------------------------------------------------------------- | ||||||
|  */ |  */ | ||||||
| @ -69,7 +69,8 @@ static Datum ExecEvalNullTest(NullTest *ntest, ExprContext *econtext, | |||||||
| 				 bool *isNull, ExprDoneCond *isDone); | 				 bool *isNull, ExprDoneCond *isDone); | ||||||
| static Datum ExecEvalBooleanTest(BooleanTest *btest, ExprContext *econtext, | static Datum ExecEvalBooleanTest(BooleanTest *btest, ExprContext *econtext, | ||||||
| 					bool *isNull, ExprDoneCond *isDone); | 					bool *isNull, ExprDoneCond *isDone); | ||||||
| static Datum ExecEvalConstraint(Constraint *constraint, ExprContext *econtext, | static Datum ExecEvalConstraintTest(ConstraintTest *constraint, | ||||||
|  | 									ExprContext *econtext, | ||||||
| 									bool *isNull, ExprDoneCond *isDone); | 									bool *isNull, ExprDoneCond *isDone); | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @ -1465,43 +1466,6 @@ ExecEvalNullTest(NullTest *ntest, | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 |  | ||||||
|  * ExecEvalConstraint |  | ||||||
|  * |  | ||||||
|  * Test the constraint against the data provided.  If the data fits |  | ||||||
|  * within the constraint specifications, pass it through (return the |  | ||||||
|  * datum) otherwise throw an error. |  | ||||||
|  */ |  | ||||||
| static Datum |  | ||||||
| ExecEvalConstraint(Constraint *constraint, ExprContext *econtext, |  | ||||||
| 				   bool *isNull, ExprDoneCond *isDone) |  | ||||||
| { |  | ||||||
| 	Datum		result; |  | ||||||
| 
 |  | ||||||
| 	result = ExecEvalExpr(constraint->raw_expr, econtext, isNull, isDone); |  | ||||||
| 
 |  | ||||||
| 	/* Test for the constraint type */ |  | ||||||
| 	switch(constraint->contype) |  | ||||||
| 	{ |  | ||||||
| 		case CONSTR_NOTNULL: |  | ||||||
| 			if (*isNull) |  | ||||||
| 			{ |  | ||||||
| 				elog(ERROR, "Domain %s does not allow NULL values", constraint->name); |  | ||||||
| 			} |  | ||||||
| 			break; |  | ||||||
| 		case CONSTR_CHECK: |  | ||||||
| 
 |  | ||||||
| 				elog(ERROR, "ExecEvalConstraint: Domain CHECK Constraints not yet implemented"); |  | ||||||
| 			break; |  | ||||||
| 		default: |  | ||||||
| 			elog(ERROR, "ExecEvalConstraint: Constraint type unknown"); |  | ||||||
| 			break; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	/* If all has gone well (constraint did not fail) return the datum */ |  | ||||||
| 	return result; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /* ----------------------------------------------------------------
 | /* ----------------------------------------------------------------
 | ||||||
|  *		ExecEvalBooleanTest |  *		ExecEvalBooleanTest | ||||||
|  * |  * | ||||||
| @ -1582,6 +1546,41 @@ ExecEvalBooleanTest(BooleanTest *btest, | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | /*
 | ||||||
|  |  * ExecEvalConstraintTest | ||||||
|  |  * | ||||||
|  |  * Test the constraint against the data provided.  If the data fits | ||||||
|  |  * within the constraint specifications, pass it through (return the | ||||||
|  |  * datum) otherwise throw an error. | ||||||
|  |  */ | ||||||
|  | static Datum | ||||||
|  | ExecEvalConstraintTest(ConstraintTest *constraint, ExprContext *econtext, | ||||||
|  | 					   bool *isNull, ExprDoneCond *isDone) | ||||||
|  | { | ||||||
|  | 	Datum		result; | ||||||
|  | 
 | ||||||
|  | 	result = ExecEvalExpr(constraint->arg, econtext, isNull, isDone); | ||||||
|  | 
 | ||||||
|  | 	switch (constraint->testtype) | ||||||
|  | 	{ | ||||||
|  | 		case CONSTR_TEST_NOTNULL: | ||||||
|  | 			if (*isNull) | ||||||
|  | 				elog(ERROR, "Domain %s does not allow NULL values", | ||||||
|  | 					 constraint->name); | ||||||
|  | 			break; | ||||||
|  | 		case CONSTR_TEST_CHECK: | ||||||
|  | 			/* TODO: Add CHECK Constraints to domains */ | ||||||
|  | 			elog(ERROR, "Domain CHECK Constraints not yet implemented"); | ||||||
|  | 			break; | ||||||
|  | 		default: | ||||||
|  | 			elog(ERROR, "ExecEvalConstraintTest: Constraint type unknown"); | ||||||
|  | 			break; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	/* If all has gone well (constraint did not fail) return the datum */ | ||||||
|  | 	return result; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| /* ----------------------------------------------------------------
 | /* ----------------------------------------------------------------
 | ||||||
|  *		ExecEvalFieldSelect |  *		ExecEvalFieldSelect | ||||||
|  * |  * | ||||||
| @ -1749,12 +1748,6 @@ ExecEvalExpr(Node *expression, | |||||||
| 									isNull, | 									isNull, | ||||||
| 									isDone); | 									isDone); | ||||||
| 			break; | 			break; | ||||||
| 		case T_Constraint: |  | ||||||
| 			retDatum = ExecEvalConstraint((Constraint *) expression, |  | ||||||
| 										 econtext, |  | ||||||
| 										 isNull, |  | ||||||
| 										 isDone); |  | ||||||
| 			break; |  | ||||||
| 		case T_CaseExpr: | 		case T_CaseExpr: | ||||||
| 			retDatum = ExecEvalCase((CaseExpr *) expression, | 			retDatum = ExecEvalCase((CaseExpr *) expression, | ||||||
| 									econtext, | 									econtext, | ||||||
| @ -1773,6 +1766,12 @@ ExecEvalExpr(Node *expression, | |||||||
| 										   isNull, | 										   isNull, | ||||||
| 										   isDone); | 										   isDone); | ||||||
| 			break; | 			break; | ||||||
|  | 		case T_ConstraintTest: | ||||||
|  | 			retDatum = ExecEvalConstraintTest((ConstraintTest *) expression, | ||||||
|  | 											  econtext, | ||||||
|  | 											  isNull, | ||||||
|  | 											  isDone); | ||||||
|  | 			break; | ||||||
| 
 | 
 | ||||||
| 		default: | 		default: | ||||||
| 			elog(ERROR, "ExecEvalExpr: unknown expression type %d", | 			elog(ERROR, "ExecEvalExpr: unknown expression type %d", | ||||||
|  | |||||||
| @ -8,7 +8,7 @@ | |||||||
|  * |  * | ||||||
|  * |  * | ||||||
|  * IDENTIFICATION |  * IDENTIFICATION | ||||||
|  *	  $Header: /cvsroot/pgsql/src/backend/executor/nodeFunctionscan.c,v 1.9 2002/08/30 23:59:46 tgl Exp $ |  *	  $Header: /cvsroot/pgsql/src/backend/executor/nodeFunctionscan.c,v 1.10 2002/08/31 19:09:27 tgl Exp $ | ||||||
|  * |  * | ||||||
|  *------------------------------------------------------------------------- |  *------------------------------------------------------------------------- | ||||||
|  */ |  */ | ||||||
| @ -226,6 +226,7 @@ ExecInitFunctionScan(FunctionScan *node, EState *estate, Plan *parent) | |||||||
| 		List *coldeflist = rte->coldeflist; | 		List *coldeflist = rte->coldeflist; | ||||||
| 
 | 
 | ||||||
| 		tupdesc = BuildDescForRelation(coldeflist); | 		tupdesc = BuildDescForRelation(coldeflist); | ||||||
|  | 		tupdesc->tdhasoid = WITHOUTOID; | ||||||
| 	} | 	} | ||||||
| 	else | 	else | ||||||
| 		elog(ERROR, "Unknown kind of return type specified for function"); | 		elog(ERROR, "Unknown kind of return type specified for function"); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user