]> granicus.if.org Git - postgresql/commitdiff
Address ccvalid/ccnoinherit in TupleDesc support functions.
authorNoah Misch <noah@leadboat.com>
Sun, 23 Mar 2014 06:13:43 +0000 (02:13 -0400)
committerNoah Misch <noah@leadboat.com>
Sun, 23 Mar 2014 06:13:43 +0000 (02:13 -0400)
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

index db8cb82272423f883ba1fead2d46b0ea546d806e..74cfb6499a5c5a02a721520bdf232f86760422a2 100644 (file)
@@ -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;
                        }
                }
 
@@ -458,7 +459,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)