mirror of
https://github.com/postgres/postgres.git
synced 2025-11-24 00:23:06 +03:00
Catalog domain not-null constraints
This applies the explicit catalog representation of not-null
constraints introduced by b0e96f3119 for table constraints also to
domain not-null constraints.
Reviewed-by: Aleksander Alekseev <aleksander@timescale.com>
Reviewed-by: jian he <jian.universality@gmail.com>
Discussion: https://www.postgresql.org/message-id/flat/9ec24d7b-633d-463a-84c6-7acff769c9e8%40eisentraut.org
This commit is contained in:
@@ -629,6 +629,50 @@ findNotNullConstraint(Oid relid, const char *colname)
|
||||
return findNotNullConstraintAttnum(relid, attnum);
|
||||
}
|
||||
|
||||
/*
|
||||
* Find and return the pg_constraint tuple that implements a validated
|
||||
* not-null constraint for the given domain.
|
||||
*/
|
||||
HeapTuple
|
||||
findDomainNotNullConstraint(Oid typid)
|
||||
{
|
||||
Relation pg_constraint;
|
||||
HeapTuple conTup,
|
||||
retval = NULL;
|
||||
SysScanDesc scan;
|
||||
ScanKeyData key;
|
||||
|
||||
pg_constraint = table_open(ConstraintRelationId, AccessShareLock);
|
||||
ScanKeyInit(&key,
|
||||
Anum_pg_constraint_contypid,
|
||||
BTEqualStrategyNumber, F_OIDEQ,
|
||||
ObjectIdGetDatum(typid));
|
||||
scan = systable_beginscan(pg_constraint, ConstraintRelidTypidNameIndexId,
|
||||
true, NULL, 1, &key);
|
||||
|
||||
while (HeapTupleIsValid(conTup = systable_getnext(scan)))
|
||||
{
|
||||
Form_pg_constraint con = (Form_pg_constraint) GETSTRUCT(conTup);
|
||||
|
||||
/*
|
||||
* We're looking for a NOTNULL constraint that's marked validated.
|
||||
*/
|
||||
if (con->contype != CONSTRAINT_NOTNULL)
|
||||
continue;
|
||||
if (!con->convalidated)
|
||||
continue;
|
||||
|
||||
/* Found it */
|
||||
retval = heap_copytuple(conTup);
|
||||
break;
|
||||
}
|
||||
|
||||
systable_endscan(scan);
|
||||
table_close(pg_constraint, AccessShareLock);
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
/*
|
||||
* Given a pg_constraint tuple for a not-null constraint, return the column
|
||||
* number it is for.
|
||||
|
||||
Reference in New Issue
Block a user