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:15:09 +0000 (02:15 -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 9884adc2dac38a8c30a06b13235f36ef74144026..897ee23fbc536e6759cc25e45b97892492e44d50 100644 (file)
@@ -203,6 +203,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;
            }
        }
 
@@ -416,7 +417,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)