Re: Error from mxODBCZopeDA for Zope 2.12 with Python 2.6 on x86_64

"M.-A. Lemburg" <[email protected]>
Newsgroups gmane.comp.python.egenix.user
Organization eGenix.com Software GmbH; http://www.egenix.com/
Message-ID <[email protected]>
Baiju M wrote:
> On Fri, Dec 18, 2009 at 3:28 PM, M.-A. Lemburg <[email protected]> wrote:
>> Baiju M wrote:
>>> Hi,
>>>     I am using beta version of mxODBCZopeDA for Zope 2.12 with Python
>>> 2.6 on x86_64.
>>> File: egenix-mxodbc-zopeda-1.0.10.linux-x86_64-py2.4_ucs4.zip
>>>
>>> When I am trying to make a query, it shows "ODBC driver sent negative
>>> string size" error.
>>> This is the output from Zope's debug prompt:
>>>
>>>>>> app.db._v_database_connection.query("select * from tbl_name")
>>> Traceback (most recent call last):
>>>   File "<stdin>", line 1, in <module>
>>>   File "Products/mxODBCZopeDA/ZopeDA.py", line 1534, in query
>>>   File "Products/mxODBCZopeDA/ZopeDA.py", line 1409, in run_cursor_callback
>>> mx.ODBC.Error.InterfaceError: ODBC driver sent negative string size
>>>
>>> I am using "unixODBC 2.2.15pre".  With unixODBC 2.2.14 also this error
>>> is raised.
>>> But in 2.2.14 I cann't even get any result from "isql" command line prompt.
>>>
>>> I am connecting to Oracle using instant_client 10.2.0.4 for x86_64
>>>
>>> Few other details:
>>>
>>> $ uname -a
>>> Linux xxxxxxxxxx 2.6.18-128.el5 #1 SMP Wed Jan 21 10:41:14 EST 2009
>>> x86_64 x86_64 x86_64 GNU/Linux
>>> $ cat /etc/redhat-release
>>> CentOS release 5.3 (Final)
>>>
>>> Please let me know if any more details required
>>
>> This appears to be a bug in unixODBC 2.2.14. We've had similar
>> reports for the MySQL ODBC driver used in combination with
>> unixODBC 2.2.14.
>>
>> Please try unixODBC 2.2.12 and see if the problem goes away.
> 
> I forgot to mention, I have tried 2.2.12 also. It was showing the same error.
> 
> FYI, In 2.2.12 & 2.2.14 we are getting this error from "isql":
> 
>   [ISQL]ERROR: Could not SQLAllocStmt
> 
> I can see this error mentioned in Oracle forum:
> http://forums.oracle.com/forums/thread.jspa?threadID=340030&tstart=0

We have now spoken to EasySoft who maintain unixODBC: they apparently
switched two important variable types between the releases
2.2.12 and 2.2.13 of the unixODBC manager.

In 2.2.12, unixODBC defaults to using 32-bit values for the
SQLLEN/SQLULEN types. In 2.2.14, it defaults to 64-bit values.

Unfortunately, they left the library version name at the
same libodbc.so.1.0.0, so the linker won't hint you to a possible
problem with the API change.

Our products are built against unixODBC 2.2.12 and use its
default settings. As a result they use 32-bit values for
all SQLLEN/SQLULEN parameters. When used against a
2.2.14+ unixODBC manager library, the linker won't
complain (it sees the same version on the file), but all
calls will end up creating a garbled stack.

Now, to make things even more interesting, the Oracle driver
for 64-bit Linux uses 64-bit SQLLEN values as well, so you
can't use it with unixODBC 2.2.12, but you should be able
to use it with 2.2.14 or a later version.

Note that iODBC, the other ODBC manager for Unix, still
uses the 32-bit defaults.

We'll have to find a way to make all this just magically
work in some way.

64-bit ODBC is a real mess and the fact that MS changed SQLLEN
from long to long long on Win64 late in the spec process and after
Unix 64-bit platforms had already adopted the 32-bit
interpretation didn't really help either.

-- 
Marc-Andre Lemburg
eGenix.com

Professional Python Services directly from the Source  (#1, Feb 16 2010)
>>> Python/Zope Consulting and Support ...        http://www.egenix.com/
>>> mxODBC.Zope.Database.Adapter ...             http://zope.egenix.com/
>>> mxODBC, mxDateTime, mxTextTools ...        http://python.egenix.com/
________________________________________________________________________

::: Try our new mxODBC.Connect Python Database Interface for free ! ::::


   eGenix.com Software, Skills and Services GmbH  Pastor-Loeh-Str.48
    D-40764 Langenfeld, Germany. CEO Dipl.-Math. Marc-Andre Lemburg
           Registered at Amtsgericht Duesseldorf: HRB 46611
               http://www.egenix.com/company/contact/


_______________________________________________________________________
eGenix.com User Mailing List                     http://www.egenix.com/
https://www.egenix.com/mailman/listinfo/egenix-users
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.