reassign 354723 r-cran-rodbc tags 354723 patch thanks Back to you, Dirk. :) Explanation below.
On Thu, Mar 02, 2006 at 07:16:14PM -0600, Dirk Eddelbuettel wrote: > On 2 March 2006 at 14:22, Steve Langasek wrote: > | On Thu, Mar 02, 2006 at 11:10:56PM +0100, Johannes Ranke wrote: > | > > | So with RODBC the only variable here, I'm still pretty sure it's an > RODBC > | > > | bug. > | > I just built r-cran-rodbc 1.1.3 on my unstable box - the problem is > | > back! If I reinstall the version from stable, it goes away again (and so > | > on:) > | Hah, ok, you beat me to it. :) > | Alright, I'll try to take a look at what could be different between unixodbc > | 2.2.4 and unixodbc 2.2.11 that would be triggering this. I have an amd64 > | system I can test on, so hopefully the problem will be reproducible. > That sounds more like it. The upstream author/maintainer of RODBC is pretty > experienced in matters relating to 64bit having had access to 64bit Solaris > "forever". Be that as it may, the default UnixODBC API is not 64-bit clean. The spec wrongly specifies SQLLEN and SQLULEN to be 32-bit, and then shoves pointers into them all over the place -- and even, IIRC, defines some of these pointer-carrying functions to take SQLINT instead of SQLLEN. The only way you get a 64-bit clean interface out of UnixODBC is by specifying -DBUILD_REAL_64_BIT_MODE to the compiler. I've tried in the past to convince UnixODBC upstream to make this the default, so far without any success; I'm going to go ahead and make the Debian packages use this unconditionally, since this *is* the only way to have a 64-bit-clean UnixODBC, and it is the way that the library is being built today. But anyway, r-cran-rodbc still needs a patch, because it's using SQLINT in several places where SQLLEN is needed. The patch is attached. I have confirmed that this patch fixes the problem with returning rows on amd64. The only thing I don't have an explanation for, is why the sarge version of r-cran-rodbc works correctly. The hacks in the Debian package to support 64-bit systems properly aren't new; the sarge build had a different name for this variable, but libodbc was still shipping a "non-standard" 64-bit ABI. Incidentally, you're missing a proper clean target in this package; if the build is interrupted in the middle, ./debian/rules clean will fail to clean up the binaries from the src/ directory. On Fri, Mar 03, 2006 at 02:34:55PM -0600, Dirk Eddelbuettel wrote: > > No, it's clearly a difference in how r-cran-rodbc is being built against > > unixodbc 2.2.4 vs. 2.2.11, possibly due to 2.2.11's support for additional > > ODBC API calls. > If memory serves, and in a galaxy far away, I once built RODBC against iODBC. > Would it help to reconsider the other ODBC library? Or is that one dead now? I think iODBC is languishing unmaintained. I'm not sure if it's 64-bit clean or not; if it is, you need this same patch, and if it *isn't*, you have problems with truncated pointers all over the place instead. Cheers, -- Steve Langasek Give me a lever long enough and a Free OS Debian Developer to set it on, and I can move the world. [EMAIL PROTECTED] http://www.debian.org/
diff -Nru /tmp/KeP9uZ3ItY/rodbc-1.1.5/debian/changelog /tmp/W7l6P0uH3P/rodbc-1.1.5/debian/changelog --- /tmp/KeP9uZ3ItY/rodbc-1.1.5/debian/changelog 2006-03-04 12:45:05.000000000 -0800 +++ /tmp/W7l6P0uH3P/rodbc-1.1.5/debian/changelog 2006-03-04 12:45:07.000000000 -0800 @@ -1,3 +1,10 @@ +rodbc (1.1.5-1.1) unstable; urgency=low + + * Non-maintainer upload. + * Fix a handful of SQL types for 64-bit compatibility + + -- Steve Langasek <[EMAIL PROTECTED]> Sat, 4 Mar 2006 02:09:39 -0800 + rodbc (1.1.5-1) unstable; urgency=low * New upstream release diff -Nru /tmp/KeP9uZ3ItY/rodbc-1.1.5/debian/rules /tmp/W7l6P0uH3P/rodbc-1.1.5/debian/rules --- /tmp/KeP9uZ3ItY/rodbc-1.1.5/debian/rules 2006-03-04 12:45:05.000000000 -0800 +++ /tmp/W7l6P0uH3P/rodbc-1.1.5/debian/rules 2006-03-04 12:45:07.000000000 -0800 @@ -6,6 +6,9 @@ include /usr/share/cdbs/1/rules/debhelper.mk include /usr/share/cdbs/1/class/langcore.mk +CPPFLAGS := -DBUILD_REAL_64_BIT_MODE +export CPPFLAGS + ## We need the CRAN (upstream) name cranName := $(shell grep Package: DESCRIPTION | cut -f2 -d" ") ## and we need to build a Debian Policy-conformant lower-case package name diff -Nru /tmp/KeP9uZ3ItY/rodbc-1.1.5/src/RODBC.c /tmp/W7l6P0uH3P/rodbc-1.1.5/src/RODBC.c --- /tmp/KeP9uZ3ItY/rodbc-1.1.5/src/RODBC.c 2005-08-05 23:32:57.000000000 -0700 +++ /tmp/W7l6P0uH3P/rodbc-1.1.5/src/RODBC.c 2006-03-04 12:45:07.000000000 -0800 @@ -53,7 +53,7 @@ SQLCHAR ColName[256]; SQLSMALLINT NameLength; SQLSMALLINT DataType; - SQLUINTEGER ColSize; + SQLULEN ColSize; SQLSMALLINT DecimalDigits; SQLSMALLINT Nullable; char *pData; @@ -61,7 +61,7 @@ SQLREAL R4Data; SQLINTEGER IData; SQLSMALLINT I2Data; - SQLINTEGER IndPtr; + SQLLEN IndPtr; } COLUMNS; typedef struct mess { @@ -74,7 +74,7 @@ SQLHDBC hDbc; SQLHSTMT hStmt; int fStmt; - SQLINTEGER nRows; + SQLLEN nRows; SQLSMALLINT nColumns; int channel; int id;
signature.asc
Description: Digital signature