Re: int to inet conversion

From: Anton Nikiforov <anton(at)nikiforov(dot)ru>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: int to inet conversion
Date: 2005-12-04 11:09:53
Message-ID: 4392CE81.9060609@nikiforov.ru
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Tom Lane wrote:

> Anton Nikiforov <anton(at)nikiforov(dot)ru> writes:
>
>>is there any function that can translate INT to INET type?
>
>
> Nothing built-in, and given the fact that "inet" no longer means "IPv4",
> it's unlikely we'd add one in the future. But there's nothing stopping
> you from adding one of your own. For example
>
> regression=# create or replace function int2inet(int) returns inet as $$
> regression$# declare oct1 int;
> regression$# oct2 int;
> regression$# oct3 int;
> regression$# oct4 int;
> regression$# begin
> regression$# oct1 := ((($1 >> 24) % 256) + 256) % 256;
> regression$# oct2 := ((($1 >> 16) % 256) + 256) % 256;
> regression$# oct3 := ((($1 >> 8) % 256) + 256) % 256;
> regression$# oct4 := ((($1 ) % 256) + 256) % 256;
> regression$# return oct1 || '.' || oct2 || '.' || oct3 || '.' || oct4;
> regression$# end$$ language plpgsql strict immutable;
> CREATE FUNCTION
> regression=# select int2inet(-1062726656);
> int2inet
> --------------
> 192.168.20.0
> (1 row)
>
> There's probably a better way to do the shifting-and-masking, but that
> was the first thing that came to mind. (Actually, if you are planning
> to push a whole lot of data through this, it might be worth your time
> to write something in C. But for a one-shot data conversion task this
> is probably plenty good enough.)
>
> regards, tom lane
>
> ---------------------------(end of broadcast)---------------------------
> TIP 1: if posting/reading through Usenet, please send an appropriate
> subscribe-nomail command to majordomo(at)postgresql(dot)org so that your
> message can get through to the mailing list cleanly
>
Sorry for my stupidity but, maybe there is a function that converts mask
stored in int format to a numer of bits? ;)
Your function easyly convert this mask to dot decimal notation, but how
to count the number of 1 in it?

Best regards,
Anton

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Martijn van Oosterhout 2005-12-04 11:54:15 Re: int to inet conversion
Previous Message Martijn van Oosterhout 2005-12-04 10:07:21 Re: function in index expression and unnecessary function calls in select