Обсуждение: c type of int8 / serial8?

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

c type of int8 / serial8?

От
"Joost Kraaijeveld"
Дата:
Hi,

I wonder what the C type of int8 / serial8 is.

If I use SQLGetTypeInfo() to get all the supported type is says that
int8 is of SQL type SQL_BIGINT. It does not show any values for serial8
but I suppose that that is a user defined type and the driver is not
required to show those (is that correct?).

If I use SQLColumns() and get the data type from that function, is says
for both int8 and serial8 that the SQL type is SQL_BIGINT. There is
however not mapping for SQL_BIGINT to a C type. There is a mapping to a
signed or unsigned 8 byte integer (SQL_C_SBIGINT or SQL_C_UBIGINT).

From the docs
(http://www.postgresql.org/docs/8.3/interactive/datatype.html , table
8.1)  I see that int8 is a "signed eight-byte integer". For serial8 it
only says "autoincrementing eight-byte integer". So I assume that int8
is actually SQL_C_SBIGINT, but I am unsure about serial8: is it signed
or unsigned?

Shouldn't both SQLGetTypeInfo and SQLColumns return SQL_C_SBIGINT for
int8, and/or return SQL_C_SBIGINT/SQL_C_UBIGINT for serial8,. depending
on the signed-ness?

TIA

--
Groeten,

Joost Kraaijeveld
Askesis B.V.
Molukkenstraat 14
6524NB Nijmegen
tel: 024-3888063 / 06-51855277
fax: 024-3608416
web: www.askesis.nl


Re: c type of int8 / serial8?

От
Hiroshi Inoue
Дата:
Joost Kraaijeveld wrote:
> Hi,
>
> I wonder what the C type of int8 / serial8 is.
>
> If I use SQLGetTypeInfo() to get all the supported type is says that
> int8 is of SQL type SQL_BIGINT. It does not show any values for serial8
> but I suppose that that is a user defined type and the driver is not
> required to show those (is that correct?).

No.
serial8 is bigint not a user defined type.

xxxx=> create table tab1 (id serial8);
NOTICE:  CREATE TABLE will create implicit sequence "tab1_id_seq" for
serial column "tab1.id"
CREATE TABLE
xxxx=> insert into tab1 values ('-9223372036854775808');
INSERT 0 1
xxxx=> select * from tab1;
           id
----------------------
  -9223372036854775808
(1 row)


Re: c type of int8 / serial8?

От
"Joost Kraaijeveld"
Дата:
On Tue, 2008-08-12 at 11:50 +0900, Hiroshi Inoue wrote:
> Joost Kraaijeveld wrote:
> > Hi,
> >
> > I wonder what the C type of int8 / serial8 is.
> >
> > If I use SQLGetTypeInfo() to get all the supported type is says that
> > int8 is of SQL type SQL_BIGINT. It does not show any values for serial8
> > but I suppose that that is a user defined type and the driver is not
> > required to show those (is that correct?).
>
> No.
> serial8 is bigint not a user defined type.

In that case : why doesn't SQLGetTypeInfo return serial8 (and serial) as
a supported type?

--
Groeten,

Joost Kraaijeveld
Askesis B.V.
Molukkenstraat 14
6524NB Nijmegen
tel: 024-3888063 / 06-51855277
fax: 024-3608416
web: www.askesis.nl


Re: c type of int8 / serial8?

От
Hiroshi Inoue
Дата:
Joost Kraaijeveld wrote:
> On Tue, 2008-08-12 at 11:50 +0900, Hiroshi Inoue wrote:
>> Joost Kraaijeveld wrote:
>>> Hi,
>>>
>>> I wonder what the C type of int8 / serial8 is.
>>>
>>> If I use SQLGetTypeInfo() to get all the supported type is says that
>>> int8 is of SQL type SQL_BIGINT. It does not show any values for serial8
>>> but I suppose that that is a user defined type and the driver is not
>>> required to show those (is that correct?).
>> No.
>> serial8 is bigint not a user defined type.
>
> In that case : why doesn't SQLGetTypeInfo return serial8 (and serial) as
> a supported type?

I'm not sure if the driver should report serial(8) as a suppooted type.
They both are kind of macro and don't exist in pg_type.

regards,
Hiroshi Inoue