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 | ||||
|  *	  $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,8 +69,9 @@ static Datum ExecEvalNullTest(NullTest *ntest, ExprContext *econtext, | ||||
| 				 bool *isNull, ExprDoneCond *isDone); | ||||
| static Datum ExecEvalBooleanTest(BooleanTest *btest, ExprContext *econtext, | ||||
| 					bool *isNull, ExprDoneCond *isDone); | ||||
| static Datum ExecEvalConstraint(Constraint *constraint, ExprContext *econtext, | ||||
| 								bool *isNull, ExprDoneCond *isDone); | ||||
| static Datum ExecEvalConstraintTest(ConstraintTest *constraint, | ||||
| 									ExprContext *econtext, | ||||
| 									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 | ||||
|  * | ||||
| @ -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 | ||||
|  * | ||||
| @ -1749,12 +1748,6 @@ ExecEvalExpr(Node *expression, | ||||
| 									isNull, | ||||
| 									isDone); | ||||
| 			break; | ||||
| 		case T_Constraint: | ||||
| 			retDatum = ExecEvalConstraint((Constraint *) expression, | ||||
| 										 econtext, | ||||
| 										 isNull, | ||||
| 										 isDone); | ||||
| 			break; | ||||
| 		case T_CaseExpr: | ||||
| 			retDatum = ExecEvalCase((CaseExpr *) expression, | ||||
| 									econtext, | ||||
| @ -1773,6 +1766,12 @@ ExecEvalExpr(Node *expression, | ||||
| 										   isNull, | ||||
| 										   isDone); | ||||
| 			break; | ||||
| 		case T_ConstraintTest: | ||||
| 			retDatum = ExecEvalConstraintTest((ConstraintTest *) expression, | ||||
| 											  econtext, | ||||
| 											  isNull, | ||||
| 											  isDone); | ||||
| 			break; | ||||
| 
 | ||||
| 		default: | ||||
| 			elog(ERROR, "ExecEvalExpr: unknown expression type %d", | ||||
|  | ||||
| @ -8,7 +8,7 @@ | ||||
|  * | ||||
|  * | ||||
|  * 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; | ||||
| 
 | ||||
| 		tupdesc = BuildDescForRelation(coldeflist); | ||||
| 		tupdesc->tdhasoid = WITHOUTOID; | ||||
| 	} | ||||
| 	else | ||||
| 		elog(ERROR, "Unknown kind of return type specified for function"); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user