26
26
*
27
27
*
28
28
* IDENTIFICATION
29
- * $Header: /cvsroot/pgsql/src/backend/executor/execMain.c,v 1.58 1998/10/14 05:10:00 momjian Exp $
29
+ * $Header: /cvsroot/pgsql/src/backend/executor/execMain.c,v 1.58.2.1 1999/02/07 16:50:52 wieck Exp $
30
30
*
31
31
*-------------------------------------------------------------------------
32
32
*/
@@ -965,7 +965,8 @@ ExecAppend(TupleTableSlot *slot,
965
965
{
966
966
HeapTuple newtuple ;
967
967
968
- newtuple = ExecConstraints ("ExecAppend" , resultRelationDesc , tuple );
968
+ newtuple = ExecConstraints ("ExecAppend" , resultRelationDesc ,
969
+ tuple , estate );
969
970
970
971
if (newtuple != tuple ) /* modified by DEFAULT */
971
972
{
@@ -1148,7 +1149,8 @@ ExecReplace(TupleTableSlot *slot,
1148
1149
{
1149
1150
HeapTuple newtuple ;
1150
1151
1151
- newtuple = ExecConstraints ("ExecReplace" , resultRelationDesc , tuple );
1152
+ newtuple = ExecConstraints ("ExecReplace" , resultRelationDesc ,
1153
+ tuple , estate );
1152
1154
1153
1155
if (newtuple != tuple ) /* modified by DEFAULT */
1154
1156
{
@@ -1279,7 +1281,7 @@ ExecAttrDefault(Relation rel, HeapTuple tuple)
1279
1281
#endif
1280
1282
1281
1283
static char *
1282
- ExecRelCheck (Relation rel , HeapTuple tuple )
1284
+ ExecRelCheck (Relation rel , HeapTuple tuple , EState * estate )
1283
1285
{
1284
1286
int ncheck = rel -> rd_att -> constr -> num_check ;
1285
1287
ConstrCheck * check = rel -> rd_att -> constr -> check ;
@@ -1312,14 +1314,24 @@ ExecRelCheck(Relation rel, HeapTuple tuple)
1312
1314
econtext -> ecxt_param_exec_vals = NULL ; /* exec param values */
1313
1315
econtext -> ecxt_range_table = rtlist ; /* range table */
1314
1316
1317
+ if (estate -> es_result_relation_constraints == NULL )
1318
+ {
1319
+ estate -> es_result_relation_constraints =
1320
+ (List * * )palloc (ncheck * sizeof (List * ));
1321
+
1322
+ for (i = 0 ; i < ncheck ; i ++ )
1323
+ {
1324
+ qual = (List * ) stringToNode (check [i ].ccbin );
1325
+ estate -> es_result_relation_constraints [i ] = qual ;
1326
+ }
1327
+ }
1328
+
1315
1329
for (i = 0 ; i < ncheck ; i ++ )
1316
1330
{
1317
- qual = ( List * ) stringToNode ( check [i ]. ccbin ) ;
1331
+ qual = estate -> es_result_relation_constraints [i ];
1318
1332
1319
1333
res = ExecQual (qual , econtext );
1320
1334
1321
- pfree (qual );
1322
-
1323
1335
if (!res )
1324
1336
return check [i ].ccname ;
1325
1337
}
@@ -1335,7 +1347,7 @@ ExecRelCheck(Relation rel, HeapTuple tuple)
1335
1347
}
1336
1348
1337
1349
HeapTuple
1338
- ExecConstraints (char * caller , Relation rel , HeapTuple tuple )
1350
+ ExecConstraints (char * caller , Relation rel , HeapTuple tuple , EState * estate )
1339
1351
{
1340
1352
HeapTuple newtuple = tuple ;
1341
1353
@@ -1362,7 +1374,7 @@ ExecConstraints(char *caller, Relation rel, HeapTuple tuple)
1362
1374
{
1363
1375
char * failed ;
1364
1376
1365
- if ((failed = ExecRelCheck (rel , tuple )) != NULL )
1377
+ if ((failed = ExecRelCheck (rel , tuple , estate )) != NULL )
1366
1378
elog (ERROR , "%s: rejected due to CHECK constraint %s" , caller , failed );
1367
1379
}
1368
1380
0 commit comments