The UNDEFOID later causes an assertion failure in heap_formtuple when
authorTom Lane
Sat, 31 Aug 2002 19:09:27 +0000 (19:09 +0000)
committerTom Lane
Sat, 31 Aug 2002 19:09:27 +0000 (19:09 +0000)
you try to use the tupdesc to build a tuple.

Joe Conway

src/backend/executor/execQual.c
src/backend/executor/nodeFunctionscan.c

index 31000ef1f2ac55148d94227dd9cb57a5860bd5c1..d9411761a53cc5e5982dc64ecb5f515c69181c21 100644 (file)
@@ -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",
index e00778f3aa1b086c53aa202b55fd6c0167d45944..89b5a544e5a42855e5b98a3b322a0881df27f831 100644 (file)
@@ -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");