From 1440acd703e04f39340f7fb3a432b028a791e038 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sat, 31 Aug 2002 19:10:08 +0000 Subject: [PATCH] Wups, didn't mean to commit that just yet. --- src/backend/executor/execQual.c | 91 +++++++++++++++++++++-------------------- 1 file changed, 46 insertions(+), 45 deletions(-) diff --git a/src/backend/executor/execQual.c b/src/backend/executor/execQual.c index d9411761a5..c53ac42b26 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.104 2002/08/31 19:09:27 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/executor/execQual.c,v 1.105 2002/08/31 19:10:08 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -69,9 +69,8 @@ static Datum ExecEvalNullTest(NullTest *ntest, ExprContext *econtext, bool *isNull, ExprDoneCond *isDone); static Datum ExecEvalBooleanTest(BooleanTest *btest, ExprContext *econtext, bool *isNull, ExprDoneCond *isDone); -static Datum ExecEvalConstraintTest(ConstraintTest *constraint, - ExprContext *econtext, - bool *isNull, ExprDoneCond *isDone); +static Datum ExecEvalConstraint(Constraint *constraint, ExprContext *econtext, + bool *isNull, ExprDoneCond *isDone); /*---------- @@ -1466,6 +1465,43 @@ 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 * @@ -1546,41 +1582,6 @@ 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 * @@ -1748,6 +1749,12 @@ 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, @@ -1766,12 +1773,6 @@ 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", -- 2.11.0