[egenix-users] real 64-bit mxodbc zope da package?

Andrew Altepeter aaltepet at bethel.edu
Tue Nov 15 10:45:45 CET 2011


Greetings,

I am trying to run on opensuse 11.4 64-bit:
egenix mxodbc zope da 2.0.1
oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64
oracle-instantclient11.2-odbc-11.2.0.3.0-1.x86_64

Background: I've been using oracle instance client + unixodbc + egenix
mxodbc zope da for years, but in 32 bit.  Oracle instantclient (even going
back to 10.2.0.4) uses "real 64-bit" strings.

Suse's delivered 64-bit unixodbc is version 2.2.12.  With the stock ini
files configured properly, I can use isql to connect to my oracle server,
and run queries.  The strings returned from the queries are all blank, I
think due to the fact that this version of unixodbc uses 32-bit strings.

I compiled unixodbc 2.3.0 from source, configured it's odbc ini files in
exactly the same way.  When I connect to the oracle server using this
versions isql, strings returned from queries are no longer blank -- they
have the correct values in them.  In short, I think unixodbc 2.3.0 and
instanceclient 64-bit are the correct match.

Now  I move in to zope, with mxzopeda 2.0.1 installed.  I go to my database
adapter.

When using unixodbc 2.2.12, the database adapter's manage_main loads, says
one connection is open.  I go to the test tab and run a query, strings are
returned blank.

When using unixodbc 2.3.0, I get segfaults.  Visiting the DA's manage_main
sometimes segfaults, but using the test tab will always segfault.

I've combed through the egenix-users mailing lists, and learned a few
things:
http://www.egenix.com/mailman-archives/egenix-users/2008-June/114412.html
http://permalink.gmane.org/gmane.comp.python.egenix.user/1547<http://osdir.com/ml/python.egenix.user/2008-06/msg00005.html>
http://osdir.com/ml/python.egenix.user/2008-06/msg00005.html

The latter I found most revealing, in particular:

> This would lead to a segfault when used with the mx.ODBC.unixODBC
> package we provide, since in "REAL 64bit" mode, unixODBC doesn't
> follow the MS ODBC standard. It uses the native 64-bit support
> and bit lengths on Linux instead.

I think the segfault is due to mxodbc expecting strings to be 32 bit, while
unixodbc/instantclient is delivering 64 bit strings.  While a few years
old, the message quote above leads me to think that the mx.ODBC.unixODBC
package you provide could be recompiled to provide "real 64bit" mode
support.  Is this possible?
Or, what is the current state of 64 bit odbc support from egenix?

I also read in another post (which I can't find now) that Microsoft changed
the odbc standard for 64 bit late in the game, switching from 32-bit to
64-bit strings after the unix odbc support had implemented 32 bit strings.
 As it stands, since instantclient appears to support (only) the "real 64
bit" strings, I can't using mxodbc with it in 64 bit linux.

Thanks,
Andy
-------------- next part --------------
An HTML attachment was scrubbed...
URL: /mailman-archives/egenix-users/attachments/20111115/0624fdf0/attachment.htm


More information about the egenix-users mailing list