Hi, 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):
----
SQLExecDirectW
Preparing statement:
INSERT INTO FOO VALUES(NU
Preparing statement:
INSERT INTO FOO VALUES(NU
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
www.chaospixel.com
cytrinox@freenode/ircnet/quakenet
pgpodhp6aDj4j.pgp
Description: PGP signature
------------------------------------------------------------------------------ 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! http://www2.precog.com/precogplatform/slashdotnewsletter
_______________________________________________ Firebird-odbc-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/firebird-odbc-devel
