Commit 0da6cf54 authored by Tom Lane's avatar Tom Lane

The UNDEFOID later causes an assertion failure in heap_formtuple when

you try to use the tupdesc to build a tuple.

Joe Conway
parent 1bab464e
...@@ -8,7 +8,7 @@ ...@@ -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,8 +69,9 @@ static Datum ExecEvalNullTest(NullTest *ntest, ExprContext *econtext, ...@@ -69,8 +69,9 @@ 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,
bool *isNull, ExprDoneCond *isDone); ExprContext *econtext,
bool *isNull, ExprDoneCond *isDone);
/*---------- /*----------
...@@ -1465,43 +1466,6 @@ ExecEvalNullTest(NullTest *ntest, ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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 @@ ...@@ -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) ...@@ -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");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment