Thread: collation, arrays, and ranges

collation, arrays, and ranges

From
Jeff Davis
Date:
My interpretation of collation for range types is different than that
for arrays, so I'm presenting it here in case someone has an objection.

An array type has the same typcollation as its element type. This makes
sense, because comparison between arrays are affected by the COLLATE
clause.

Comparison between ranges should not be affected by the COLLATE clause
(as we discussed). So, I chose to represent that as a separate
rngcollation and leave the typcollation 0. In other words, collation is
a concept internal to that range type and fixed at type definition time.
Range types are affected by their internal collation, but don't take
part in the logic that passes collation through the type system.

Comments?

Regards,Jeff Davis





Re: collation, arrays, and ranges

From
Tom Lane
Date:
Jeff Davis <pgsql@j-davis.com> writes:
> My interpretation of collation for range types is different than that
> for arrays, so I'm presenting it here in case someone has an objection.

> An array type has the same typcollation as its element type. This makes
> sense, because comparison between arrays are affected by the COLLATE
> clause.

> Comparison between ranges should not be affected by the COLLATE clause
> (as we discussed).

Check.

> So, I chose to represent that as a separate
> rngcollation and leave the typcollation 0. In other words, collation is
> a concept internal to that range type and fixed at type definition time.
> Range types are affected by their internal collation, but don't take
> part in the logic that passes collation through the type system.

Should I read that as saying you want to add yet another column to
pg_type?  I'd prefer not to do that.  Seems to me we could still store
the value in typcollation, but just interpret the column a bit
differently depending on typtype.
        regards, tom lane


Re: collation, arrays, and ranges

From
Jeff Davis
Date:
On Sat, 2011-09-10 at 13:21 -0400, Tom Lane wrote:
> > So, I chose to represent that as a separate
> > rngcollation and leave the typcollation 0. In other words, collation is
> > a concept internal to that range type and fixed at type definition time.
> > Range types are affected by their internal collation, but don't take
> > part in the logic that passes collation through the type system.
> 
> Should I read that as saying you want to add yet another column to
> pg_type?  I'd prefer not to do that.  Seems to me we could still store
> the value in typcollation, but just interpret the column a bit
> differently depending on typtype.

I added the column to pg_range (rngcollation), which seemed a little
less invasive than either of the other options (either adding a new
column to pg_type or overloading the existing one).

I was worried about having the same column in pg_type mean two different
things -- every caller of get_typcollation would need to be careful.

Regards,Jeff Davis