Happened to spot this little bug:
create type two_ints as (a int, b int);
create type two_ints_range as range (subtype = two_ints);
-- CheckAttributeType() forbids this:
alter type two_ints add attribute c two_ints_range;
ERROR: composite type two_ints cannot be made a member of itself
-- But the same with a multirange is allowed:
alter type two_ints add attribute c two_ints_multirange;
ALTER TYPE
That looks like a straightforward oversight in CheckAttributeType().
When multiranges were introduced, it didn't get the memo.
Fix attached. Assuming no objections, I'll commit and backpatch that.
While working on the fix, I noticed that in case of dropped columns,
CheckAttributeType() is called with InvalidOid. It tolerates that, but
it seems accidental and it performs a bunch of futile syscache lookups
with InvalidOid, so it would be better to not do that. The second patch
fixes that.
- Heikki