Using Wide-Functions on unixODBC fails

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view

Using Wide-Functions on unixODBC fails

Daniel Vogelbacher

when using the Firebird ODBC driver with unixODBC, the Wide-Functions
like SQLExecDirectW fails.

UnixODBC defines SQLWCHAR as a 2-Byte value. I've transformed my
wchar_t* strings to UCS2 and call SQLExecDirectW() with them.

Here is the trace (debug version):

Preparing statement:
Preparing statement:

HY000:1:-104:[ODBC Firebird Driver][Firebird]Dynamic SQL Error
SQL error code = -104
Unexpected end of command - line 1, column 24

It seems that something in the ODBC driver truncates the
statement to the half. A short look into the code shows this function
inside the ConvertingString template (MainUnicode.cpp):

        SQLCHAR * convUnicodeToString( SQLWCHAR *wcString, int length )
                size_t bytesNeeded;
                wchar_t *ptEndWC = NULL;
                wchar_t saveWC;

                if ( length == SQL_NTS )
                        length = (int)wcslen( (const wchar_t*)wcString );

I think the problem is that wcslen() expects a whar_t (4 bytes) sequence,
while SQLWCHAR is 2 bytes long.

Because I'm unsure if my code is correct, I've tested the same with
python3 and pyodbc (which uses the wide-functions, too).
This results in the same issue, so using the firebird odbc driver
with pyodbc/python3 is impossible for the moment.

Could anyone confirm this issue?

     Daniel Vogelbacher

Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis & visualization. Get a free account!
Firebird-odbc-devel mailing list
[hidden email]

attachment0 (853 bytes) Download Attachment