Обсуждение: experimental Unicode support
I'm attaching a few tweaks to build psqlodbc with Unicode support on Unix. I changed some code that assumes two-byte SQLWCHAR and I changed configure.ac and Makefile.am, as necessary. I tested this with unixODBC 2.2.7 on SuSE Linux 8.2. I built unixODBC --with-iconv-ucode-enc=UCS-4LE and with SQL_WCHART_CONVERT defined, so that SQLWCHAR is wchar_t. I have not tested it with UCS-2 / unsigned short. I also tested this with iODBC 3.51.1, which always uses wchar_t on Unix. One caveat, if anyone actually plays with this: sqlext.h should include sqlucode.h, so I haven't patched psqlodbc to do so. The next release of unixODBC will contain this fix, and I've mentioned it to the iODBC maintainer. I realize that the demand for Unicode ODBC on Unix for PostgreSQL is pretty small. Nonetheless, I've learned a few things poking around the code, and I figured someone might be interested.
Вложения
Hi John, I haven't tried this on a Unix system yet, but unfortunately it does break the Win32 Unicode build: Building the PostgreSQL Unicode 3.0 Driver for Win32... No configuration specified. Defaulting to Unicode30. cl.exe /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PSQLODBC_EXPORTS" /D "ODBCVER=0x0300" /D UNICODE_SUPPORT" /D "DRIVER_CURSOR_IMPLEMENT" /D "WIN_MULTITHREAD_SUPPORT" /Fp".\Unicode30\psqlodbc.pch" /YX /Fo".\Unicode30\\" /Fd".\Unicode30\\" /FD /c win_unicode.c win_unicode.c win_unicode.c(28) : error C2059: syntax error : 'type' NMAKE : fatal error U1077: 'cl.exe' : return code '0x2' Stop. Regards, Dave. > -----Original Message----- > From: Jon Willeke [mailto:willeke@users.sourceforge.net] > Sent: 02 February 2004 23:23 > To: pgsql-odbc@postgresql.org > Subject: [ODBC] experimental Unicode support > > I'm attaching a few tweaks to build psqlodbc with Unicode > support on Unix. I changed some code that assumes two-byte > SQLWCHAR and I changed configure.ac and Makefile.am, as necessary. > > I tested this with unixODBC 2.2.7 on SuSE Linux 8.2. I built > unixODBC --with-iconv-ucode-enc=UCS-4LE and with > SQL_WCHART_CONVERT defined, so that SQLWCHAR is wchar_t. I > have not tested it with UCS-2 / unsigned short. > > I also tested this with iODBC 3.51.1, which always uses > wchar_t on Unix. > > One caveat, if anyone actually plays with this: sqlext.h > should include sqlucode.h, so I haven't patched psqlodbc to > do so. The next release of unixODBC will contain this fix, > and I've mentioned it to the iODBC maintainer. > > I realize that the demand for Unicode ODBC on Unix for > PostgreSQL is pretty small. Nonetheless, I've learned a few > things poking around the code, and I figured someone might be > interested. >
I haven't looked at the code, yet, but I'm pretty sure I know the problem. I added the HAVE_ISWASCII condition to make win_unicode.c work for Linux, which doesn't support this extension. However, Windows uses a different build system, so I need to guard it with HAVE_CONFIG, or something like that. I'll fix this and try to find a Windows build machine. At 09:06 AM 2/3/2004 +0000, Dave Page wrote: >I haven't tried this on a Unix system yet, but unfortunately it does >break the Win32 Unicode build: > >Building the PostgreSQL Unicode 3.0 Driver for Win32... > >No configuration specified. Defaulting to Unicode30. > > cl.exe /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D >"_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PSQLODBC_EXPORTS" /D >"ODBCVER=0x0300" /D UNICODE_SUPPORT" /D "DRIVER_CURSOR_IMPLEMENT" /D >"WIN_MULTITHREAD_SUPPORT" /Fp".\Unicode30\psqlodbc.pch" /YX >/Fo".\Unicode30\\" /Fd".\Unicode30\\" /FD /c win_unicode.c >win_unicode.c >win_unicode.c(28) : error C2059: syntax error : 'type' >NMAKE : fatal error U1077: 'cl.exe' : return code '0x2' >Stop.
I'm attaching an updated patch. I haven't yet tested it on Windows, but the fix is simple enough. I have been unable to build psqlodbc satisfactorily with the PostgreSQL config files, as the configure script fails to find support for shared libraries. I did a quick test with a statically linked client. When I stripped out the PGAC* macros and inlined PGAC_VAR_INT_TIMEZONE, I was able to build and test a shared library. (I have not included those changes.) At 2/3/2004, Jon Willeke wrote: >I haven't looked at the code, yet, but I'm pretty sure I know the >problem. I added the HAVE_ISWASCII condition to make win_unicode.c work >for Linux, which doesn't support this extension. However, Windows uses a >different build system, so I need to guard it with HAVE_CONFIG, or >something like that. > >I'll fix this and try to find a Windows build machine.
Вложения
> -----Original Message----- > From: Jon Willeke [mailto:willeke@users.sourceforge.net] > Sent: 03 February 2004 20:02 > To: pgsql-odbc@postgresql.org > Subject: Re: [ODBC] experimental Unicode support > > I'm attaching an updated patch. I haven't yet tested it on > Windows, but the fix is simple enough. Thanks John - that got it. Patch applied :-) Regards, Dave.