Обсуждение: psqlodbc-08.00.0101 compile error
Hi
I've just unsuccesfully attempted to build psqlodbc-08.00.0101 on my linux
system and have got a compile error in odbcapi30w.c. I must add that I'm not
certain this is psqlodbc's problem, it may belong to iODBC...
The function 'SQLColAttributeW' signature in this file differs from the one
in "sqlucode.h" provided by libiodbc-3.52.2. Specifically, the final
parameter 'pNumAttr' definitions don't match. GCC-3.3.4 is pulling this up
as an error.
from psqlodbc-08.00.0101's odbcapi30w.c :
RETCODE SQL_API SQLColAttributeW(
SQLHSTMT hstmt,
SQLUSMALLINT iCol,
SQLUSMALLINT iField,
SQLPOINTER pCharAttr,
SQLSMALLINT cbCharAttrMax,
SQLSMALLINT *pcbCharAttr,
SQLPOINTER pNumAttr )
from libiodbc-3.52.2's sqlucode.h (included by odbcapi30w.c) :
RETCODE SQL_API SQLColAttributeW(
SQLHSTMT hstmt,
SQLUSMALLINT iCol,
SQLUSMALLINT iField,
SQLPOINTER pCharAttr,
SQLSMALLINT cbCharAttrMax,
SQLSMALLINT *pcbCharAttr,
SQLLEN *pNumAttr )
In libiodbc-3.52.2's sqltypes.h SQLLEN is #defined as a long, SQLPOINTER is
typedefed to void*, hence the compiler's complaint - "conflicting types for
SQLColAttributeW"
Perhaps also of concern is that within SQLColAttributeW, pNumAttr is then
passed to a function (PGAPI_ColumnPrivileges) expecting a SQLINTEGER*.
Regards,
Rhys
Am Mittwoch, 9. März 2005 01:43 schrieb Rhys Ickeringill: > from psqlodbc-08.00.0101's odbcapi30w.c : > > RETCODE SQL_API SQLColAttributeW( > SQLHSTMT hstmt, > SQLUSMALLINT iCol, > SQLUSMALLINT iField, > SQLPOINTER pCharAttr, > SQLSMALLINT cbCharAttrMax, > SQLSMALLINT *pcbCharAttr, > SQLPOINTER pNumAttr ) > > from libiodbc-3.52.2's sqlucode.h (included by odbcapi30w.c) : > > RETCODE SQL_API SQLColAttributeW( > SQLHSTMT hstmt, > SQLUSMALLINT iCol, > SQLUSMALLINT iField, > SQLPOINTER pCharAttr, > SQLSMALLINT cbCharAttrMax, > SQLSMALLINT *pcbCharAttr, > SQLLEN *pNumAttr ) Both Microsoft and unixODBC agree with our version, and the SQL standard says it's SQLINTEGER *, so I'm afraid iODBC loses this vote. -- Peter Eisentraut http://developer.postgresql.org/~petere/
Peter Eisentraut <peter_e@gmx.net> writes: > Am Mittwoch, 9. März 2005 01:43 schrieb Rhys Ickeringill: > > from psqlodbc-08.00.0101's odbcapi30w.c : > > > > SQLPOINTER pNumAttr ) > > > > from libiodbc-3.52.2's sqlucode.h (included by odbcapi30w.c) : > > > > SQLLEN *pNumAttr ) > > Both Microsoft and unixODBC agree with our version, and the SQL standard says > it's SQLINTEGER *, so I'm afraid iODBC loses this vote. May I suggest an #ifdef WITH_IODBC around it? Tomas
Tomas Skäre wrote: > > Both Microsoft and unixODBC agree with our version, and the SQL > > standard says it's SQLINTEGER *, so I'm afraid iODBC loses this > > vote. > > May I suggest an #ifdef WITH_IODBC around it? That would be the easy way out. There are, however, two arguments against that: 1. Previous iODBC releases apparently got this right, so we might be breaking those releases. 2. Using SQLLEN for an attribute number is just plain wrong. I suggest that those interested in this issue first contact the iODBC authors and check why it was done this way. -- Peter Eisentraut http://developer.postgresql.org/~petere/