Thread: contrib/intarray/_int_gist.c

contrib/intarray/_int_gist.c

From
维 姜
Date:
In "g_int_compress" :

int                *dr; ...memmove((void *) &dr[cand - 1], (void *) &dr[cand + 1], (len - cand -
1) * sizeof(int));



Should be

int32 *dr; ...memmove((void *) &dr[cand - 1], (void *) &dr[cand + 1], (len - cand -
1) * sizeof(int32));




Re: contrib/intarray/_int_gist.c

From
"Qingqing Zhou"
Date:
<jw.pgsql@sduept.com> wrote
> In "g_int_compress" :
>
>
>  int                *dr;
>   ...
>  memmove((void *) &dr[cand - 1], (void *) &dr[cand + 1], (len - cand -
> 1) * sizeof(int));
>
> Should be
>
>  int32 *dr;
>   ...
>  memmove((void *) &dr[cand - 1], (void *) &dr[cand + 1], (len - cand -
> 1) * sizeof(int32));
>

AFAICS, int32 and int are exactly the same thing in PostgreSQL. For the
machine int is not 32 bits long, PostgreSQL won't even run.

Regards,
Qingqing

Re: contrib/intarray/_int_gist.c

From
Tom Lane
Date:
"Qingqing Zhou" <zhouqq@cs.toronto.edu> writes:
> AFAICS, int32 and int are exactly the same thing in PostgreSQL. For the
> machine int is not 32 bits long, PostgreSQL won't even run.

Ideally we should operate correctly if "int" is 64 bits.  In practice
I agree that making contrib work would be mighty far down the list of
things to fix...

It appears to me that the current de-facto standard for C on 64-bit
machines is
    char    8 bits
    short    16 bits
    int    32 bits
    long    64 bits
Promoting "int" to 64 bits has a big problem: you have to drop one of
the widths entirely, because there is no other basic type allowed by
C.  (int16_t and the others are only typedefs not new basic types.)
So I'm not really expecting to see int = 64 bits any time soon.

As for the other direction (int = 16 bits), there's no real hope of
running Postgres on a 16-bit machine anyway :-(

            regards, tom lane

Re: contrib/intarray/_int_gist.c

From
Bruce Momjian
Date:
Tom Lane wrote:
> "Qingqing Zhou" <zhouqq@cs.toronto.edu> writes:
> > AFAICS, int32 and int are exactly the same thing in PostgreSQL. For the
> > machine int is not 32 bits long, PostgreSQL won't even run.
>
> Ideally we should operate correctly if "int" is 64 bits.  In practice
> I agree that making contrib work would be mighty far down the list of
> things to fix...
>
> It appears to me that the current de-facto standard for C on 64-bit
> machines is
>     char    8 bits
>     short    16 bits
>     int    32 bits
>     long    64 bits
> Promoting "int" to 64 bits has a big problem: you have to drop one of
> the widths entirely, because there is no other basic type allowed by
> C.  (int16_t and the others are only typedefs not new basic types.)
> So I'm not really expecting to see int = 64 bits any time soon.
>
> As for the other direction (int = 16 bits), there's no real hope of
> running Postgres on a 16-bit machine anyway :-(

Agreed.  CVS change made for clarity, int->int32.

--
  Bruce Momjian   http://candle.pha.pa.us
  EnterpriseDB    http://www.enterprisedb.com

  + If your life is a hard drive, Christ can be your backup. +