From e4a7c03febe94b0469641b469b29aef2a21ad12c Mon Sep 17 00:00:00 2001 From: Noah Misch Date: Sun, 23 Mar 2014 02:13:43 -0400 Subject: [PATCH] Address ccvalid/ccnoinherit in TupleDesc support functions. equalTupleDescs() neglected both of these ConstrCheck fields, and CreateTupleDescCopyConstr() neglected ccnoinherit. At this time, the only known behavior defect resulting from these omissions is constraint exclusion disregarding a CHECK constraint validated by an ALTER TABLE VALIDATE CONSTRAINT statement issued earlier in the same transaction. Back-patch to 9.2, where these fields were introduced. --- src/backend/access/common/tupdesc.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/backend/access/common/tupdesc.c b/src/backend/access/common/tupdesc.c index b823d978b0..cc2e1ed0d2 100644 --- a/src/backend/access/common/tupdesc.c +++ b/src/backend/access/common/tupdesc.c @@ -204,6 +204,7 @@ CreateTupleDescCopyConstr(TupleDesc tupdesc) if (constr->check[i].ccbin) cpy->check[i].ccbin = pstrdup(constr->check[i].ccbin); cpy->check[i].ccvalid = constr->check[i].ccvalid; + cpy->check[i].ccnoinherit = constr->check[i].ccnoinherit; } } @@ -417,7 +418,9 @@ equalTupleDescs(TupleDesc tupdesc1, TupleDesc tupdesc2) for (j = 0; j < n; check2++, j++) { if (strcmp(check1->ccname, check2->ccname) == 0 && - strcmp(check1->ccbin, check2->ccbin) == 0) + strcmp(check1->ccbin, check2->ccbin) == 0 && + check1->ccvalid == check2->ccvalid && + check1->ccnoinherit == check2->ccnoinherit) break; } if (j >= n) -- 2.40.0