OSDN Git Service

The UNDEFOID later causes an assertion failure in heap_formtuple when
authorTom Lane <tgl@sss.pgh.pa.us>
Sat, 31 Aug 2002 19:09:27 +0000 (19:09 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
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 31000ef..d941176 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 e00778f..89b5a54 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");