Thread: inet/cidr wierdness (casting)

inet/cidr wierdness (casting)

From
Alex Pilosov
Date:
In case Tom isn't sick of me yet...

users=# select '10.1.2.3/24'::inet::cidr; ?column?   
-------------10.1.2.3/24

while:

users=# select '10.1.2.3/24'::cidr;
ERROR:  invalid CIDR value '10.1.2.3/24': has bits set to right of mask

Apparently, since there's no explicit function to cast from inet to cidr,
postgresql assumes its always safe to do so, as they are
binary-compatible. Anyone mind if I create explicit function for this so
this could be flagged as error?

-alex



Re: inet/cidr wierdness (casting)

From
Tom Lane
Date:
Alex Pilosov <alex@pilosoft.com> writes:
> Apparently, since there's no explicit function to cast from inet to cidr,
> postgresql assumes its always safe to do so, as they are
> binary-compatible.

Yes.  I've thought for awhile that it was a mistake to treat them as
binary-compatible.  However, you'd need a lot more operator/function
declarations if they're not so marked.

> Anyone mind if I create explicit function for this so
> this could be flagged as error?

Won't help if they are binary compatible...
        regards, tom lane