Thread: c type of int8 / serial8?
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
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)
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
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