MergeAttributes code deduplication
The code handling NOT NULL constraints is duplicated in blocks merging the attribute definition incrementally. Deduplicate that code. Author: Ashutosh Bapat <ashutosh.bapat.oss@gmail.com> Discussion: https://www.postgresql.org/message-id/flat/52a125e4-ff9a-95f5-9f61-b87cf447e4da@eisentraut.org
This commit is contained in:
parent
f2bf8fb048
commit
64444ce071
@ -2815,37 +2815,6 @@ MergeAttributes(List *columns, const List *supers, char relpersistence,
|
|||||||
attributeName),
|
attributeName),
|
||||||
errdetail("%s versus %s", prevdef->compression, newdef->compression)));
|
errdetail("%s versus %s", prevdef->compression, newdef->compression)));
|
||||||
|
|
||||||
/*
|
|
||||||
* In regular inheritance, columns in the parent's primary key
|
|
||||||
* get an extra not-null constraint.
|
|
||||||
*/
|
|
||||||
if (bms_is_member(parent_attno - FirstLowInvalidHeapAttributeNumber,
|
|
||||||
pkattrs))
|
|
||||||
{
|
|
||||||
CookedConstraint *nn;
|
|
||||||
|
|
||||||
nn = palloc(sizeof(CookedConstraint));
|
|
||||||
nn->contype = CONSTR_NOTNULL;
|
|
||||||
nn->conoid = InvalidOid;
|
|
||||||
nn->name = NULL;
|
|
||||||
nn->attnum = exist_attno;
|
|
||||||
nn->expr = NULL;
|
|
||||||
nn->skip_validation = false;
|
|
||||||
nn->is_local = false;
|
|
||||||
nn->inhcount = 1;
|
|
||||||
nn->is_no_inherit = false;
|
|
||||||
|
|
||||||
nnconstraints = lappend(nnconstraints, nn);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* mark attnotnull if parent has it and it's not NO INHERIT
|
|
||||||
*/
|
|
||||||
if (bms_is_member(parent_attno, nncols) ||
|
|
||||||
bms_is_member(parent_attno - FirstLowInvalidHeapAttributeNumber,
|
|
||||||
pkattrs))
|
|
||||||
prevdef->is_not_null = true;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check for GENERATED conflicts
|
* Check for GENERATED conflicts
|
||||||
*/
|
*/
|
||||||
@ -2877,19 +2846,26 @@ MergeAttributes(List *columns, const List *supers, char relpersistence,
|
|||||||
*/
|
*/
|
||||||
newdef->inhcount = 1;
|
newdef->inhcount = 1;
|
||||||
newdef->is_local = false;
|
newdef->is_local = false;
|
||||||
/* mark attnotnull if parent has it and it's not NO INHERIT */
|
inh_columns = lappend(inh_columns, newdef);
|
||||||
|
|
||||||
|
newattmap->attnums[parent_attno - 1] = ++child_attno;
|
||||||
|
|
||||||
|
/* remember for default processing below */
|
||||||
|
savedef = newdef;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* mark attnotnull if parent has it and it's not NO INHERIT
|
||||||
|
*/
|
||||||
if (bms_is_member(parent_attno, nncols) ||
|
if (bms_is_member(parent_attno, nncols) ||
|
||||||
bms_is_member(parent_attno - FirstLowInvalidHeapAttributeNumber,
|
bms_is_member(parent_attno - FirstLowInvalidHeapAttributeNumber,
|
||||||
pkattrs))
|
pkattrs))
|
||||||
newdef->is_not_null = true;
|
savedef->is_not_null = true;
|
||||||
inh_columns = lappend(inh_columns, newdef);
|
|
||||||
newattmap->attnums[parent_attno - 1] = ++child_attno;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* In regular inheritance, columns in the parent's primary key
|
* In regular inheritance, columns in the parent's primary key get
|
||||||
* get an extra not-null constraint. Partitioning doesn't
|
* an extra not-null constraint. Partitioning doesn't need this,
|
||||||
* need this, because the PK itself is going to be cloned to
|
* because the PK itself is going to be cloned to the partition.
|
||||||
* the partition.
|
|
||||||
*/
|
*/
|
||||||
if (!is_partition &&
|
if (!is_partition &&
|
||||||
bms_is_member(parent_attno -
|
bms_is_member(parent_attno -
|
||||||
@ -2912,10 +2888,6 @@ MergeAttributes(List *columns, const List *supers, char relpersistence,
|
|||||||
nnconstraints = lappend(nnconstraints, nn);
|
nnconstraints = lappend(nnconstraints, nn);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* remember for default processing below */
|
|
||||||
savedef = newdef;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Locate default/generation expression if any
|
* Locate default/generation expression if any
|
||||||
*/
|
*/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user