Обсуждение: TEXT::CIDR/INET::CIDR output confusion

Поиск
Список
Период
Сортировка

TEXT::CIDR/INET::CIDR output confusion

От
"Alexander M. Pravking"
Дата:
It looks a bit strange that CIDR output depends on datatype it has been
casted from:

fduch=# SELECT '1.1.1.1'::cidr;   cidr
------------1.1.1.1/32
(1 row)

fduch=# SELECT '1.1.1.1'::inet::cidr; cidr
---------1.1.1.1
(1 row)


However these two seem to be 'equal' in terms of backend:

fduch=# SELECT '1.1.1.1'::inet::cidr = '1.1.1.1'::inet;?column?
----------t
(1 row)

fduch=# SELECT '1.1.1.1'::inet::cidr = '1.1.1.1'::cidr;?column?
----------t
(1 row)


I'm just curious how can it even be...

fduch=# SELECT version();                                           version
------------------------------------------------------------------------------------------------PostgreSQL 7.4.5 on
i386-portbld-freebsd5.3,compiled by GCC cc (GCC) 3.4.2 [FreeBSD] 20040728
 


-- 
Fduch M. Pravking


Re: TEXT::CIDR/INET::CIDR output confusion

От
Bruce Momjian
Дата:
Added to TODO list:
* Prevent INET cast to CIDR from droping netmask, SELECT  '1.1.1.1'::inet::cidr

It is probably related to the TODO item above it:* Prevent INET cast to CIDR if the unmasked bits are not zero, or
zerothe bits
 

I think the original code thought CIDR and INET where identical types
that could be cast with no changes but we are finding that was incorrect.

---------------------------------------------------------------------------

Alexander M. Pravking wrote:
> It looks a bit strange that CIDR output depends on datatype it has been
> casted from:
> 
> fduch=# SELECT '1.1.1.1'::cidr;
>     cidr
> ------------
>  1.1.1.1/32
> (1 row)
> 
> fduch=# SELECT '1.1.1.1'::inet::cidr;
>   cidr
> ---------
>  1.1.1.1
> (1 row)
> 
> 
> However these two seem to be 'equal' in terms of backend:
> 
> fduch=# SELECT '1.1.1.1'::inet::cidr = '1.1.1.1'::inet;
>  ?column?
> ----------
>  t
> (1 row)
> 
> fduch=# SELECT '1.1.1.1'::inet::cidr = '1.1.1.1'::cidr;
>  ?column?
> ----------
>  t
> (1 row)
> 
> 
> I'm just curious how can it even be...
> 
> fduch=# SELECT version();
>                                             version
> ------------------------------------------------------------------------------------------------
>  PostgreSQL 7.4.5 on i386-portbld-freebsd5.3, compiled by GCC cc (GCC) 3.4.2 [FreeBSD] 20040728
> 
> 
> -- 
> Fduch M. Pravking
> 
> ---------------------------(end of broadcast)---------------------------
> TIP 4: Don't 'kill -9' the postmaster
> 

--  Bruce Momjian                        |  http://candle.pha.pa.us pgman@candle.pha.pa.us               |  (610)
359-1001+  If your life is a hard drive,     |  13 Roberts Road +  Christ can be your backup.        |  Newtown Square,
Pennsylvania19073
 


Re: TEXT::CIDR/INET::CIDR output confusion

От
Tom Lane
Дата:
Bruce Momjian <pgman@candle.pha.pa.us> writes:
> I think the original code thought CIDR and INET where identical types
> that could be cast with no changes but we are finding that was incorrect.

That's what it seems to boil down to.  We need to rethink the separation
between those datatypes.  At the very least, the casts between them
cannot both be code-less binary-compatibility casts.
        regards, tom lane