CheckAttributeType() forgot to recurse into multiranges - Mailing list pgsql-hackers

From Heikki Linnakangas
Subject CheckAttributeType() forgot to recurse into multiranges
Date
Msg-id 93ce56cd-02a6-4db1-8224-c8999372facc@iki.fi
Whole thread
Responses Re: CheckAttributeType() forgot to recurse into multiranges
Re: CheckAttributeType() forgot to recurse into multiranges
List pgsql-hackers
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

Attachment

pgsql-hackers by date:

Previous
From: Mok
Date:
Subject: New vacuum config to avoid anti wraparound vacuums
Next
From: Heikki Linnakangas
Date:
Subject: Re: Reduce build times of pg_trgm GIN indexes