From 0da6cf54ec7cc0b71244e94ec4c8bc9b02ee6aba Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sat, 31 Aug 2002 19:09:27 +0000 Subject: [PATCH] The UNDEFOID later causes an assertion failure in heap_formtuple when you try to use the tupdesc to build a tuple. Joe Conway --- src/backend/executor/execQual.c | 91 ++++++++++++++++----------------- src/backend/executor/nodeFunctionscan.c | 3 +- 2 files changed, 47 insertions(+), 47 deletions(-) diff --git a/src/backend/executor/execQual.c b/src/backend/executor/execQual.c index 31000ef1f2..d9411761a5 100644 --- a/src/backend/executor/execQual.c +++ b/src/backend/executor/execQual.c @@ -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", diff --git a/src/backend/executor/nodeFunctionscan.c b/src/backend/executor/nodeFunctionscan.c index e00778f3aa..89b5a544e5 100644 --- a/src/backend/executor/nodeFunctionscan.c +++ b/src/backend/executor/nodeFunctionscan.c @@ -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"); -- 2.11.0