Re: what is the date format in binary query results

Поиск
Список
Период
Сортировка
От Andrew Chernow
Тема Re: what is the date format in binary query results
Дата
Msg-id 47609B31.3080700@esilo.com
обсуждение исходный текст
Ответ на Re: what is the date format in binary query results  ("Merlin Moncure" <mmoncure@gmail.com>)
Список pgsql-general
Merlin Moncure wrote:
> On Dec 12, 2007 2:14 AM, Samantha Atkins <sjatkins@mac.com> wrote:
>> This brings up a second question.  How should I do byte order
>> conversion for 8 byte ints?  I can't use hton ntoh routines as they
>> max out at 32 bits.  Is there a better way?  Also, are floating point
>> numbers guaranteed uniform?
>>
>> If any one knows a a clean code example of binary binding of
>> parameters and binary extraction of results for all major types in C
>> against lippq that would be a very useful thing to have in the
>> standard docs.
>
> We are working on a patch (not necessarily to be migrated with the
> source code) to allow simplified binding of binary types to native C
> types.  You can see an older version here: it has examples how to read
> off a lot of the types in binary.  We should have a new patch in a day
> or two that should demonstrate how to read the rest of the types in
> binary.  We also handled 64 bit ints...
>
> the patch is here
> http://archives.postgresql.org/pgsql-patches/2007-12/msg00014.php
>
> if you are patient we can provide examples for all the basic built in
> types, including possibly arrays...
>
> merlin
>
> p.s  don't top post, but I dig Ron Paul :-)
>
>

This is from the patch merlin mentioned.

static unsigned int *swap8(void *outp, void *inp, int tonet)
{
   static int n = 1;
   unsigned int *in = (unsigned int *)inp;
   unsigned int *out = (unsigned int *)outp;

   /* swap when needed */
   if(*(char *)&n == 1)
   {
     out[0] = (unsigned int)(tonet ? htonl(in[1]) : ntohl(in[1]));
     out[1] = (unsigned int)(tonet ? htonl(in[0]) : ntohl(in[0]));
   }
   else
   {
     out[0] = in[0];
     out[1] = in[1];
   }

   return out;
}

// example
if(PQfformat(res, field_num) == 1)
{
   long long n;
   swap8(&n, PQgetvalue(res, 0, 0), 0);
   printf("%lld\n", n);
}

andrew










В списке pgsql-general по дате отправления:

Предыдущее
От: Lew
Дата:
Сообщение: Re: Hijack!
Следующее
От: "Charles Mortell"
Дата:
Сообщение: user name and password woes