Re: Passing unicode strings to prepare method and other unicode questions
Martin Evans <[email protected]>
| Newsgroups | gmane.comp.lang.perl.modules.dbi.sybase.devel |
|---|---|
| Organization | Easysoft Limited |
| Message-ID | <[email protected]> |
Martin Evans wrote: > Hi, > > Increasingly I am getting asked unicode questions and being presented > with unicode issues that currently don't work in DBD::ODBC. Currenty > DBD::ODBC supports the binding of unicode parameters and the returning > of unicode result-set data. > > I would like to change DBD::ODBC to support: > > a) unicode column names (from NAME attribute, column_info etc) > b) unicode connection strings > c) unicode SQL > d) unicode table names (table_info etc) > > Although I don't specifically need unicode connection strings I at least > need to turn connection strings usually passed to SQLDriverConnect into > ODBC wide characters and call SQLDriverConnectW because without this > call other calls to SQLXXXW (wide functions) are mapped to ANSI > functions by the ODBC driver manager. Since I need to do this it seemed > reasonable to just go the whole way and support unicode connection strings. > > (a) I have implemented and appears to be ok and (d) should be fairly > easy too but (b) and (c) are a little trickier with the existing DBI > interface (unless I'm mistaken). > > dbd_st_prepare and dbd_db_login6 both take char* and not the original SV > so how can I tell if the strings are utf8 encoded or not? > > What I'd like to be able to do (in ODBC terms is): > > In dbd_db_login6 > test if connection string has utf8 set on it > if (utf8on) > convert utf8 to utf16 (that is what ODBC wide functions use) > call SQLDriverConnectW > else > call SQLDriverConnect (this is the ANSI version) > > Similarly in prepare where a number of people have unicode column or > table names and hence want to do "select unicode_column_name from table". > > Is this what dbd_st_prepare_sv (as opposed to dbd_st_prepare) is for? > and should there be a dbd_db_login6_sv? > > Any help would be appreciated. > > Martin Also, to use dbd_st_prepare_sv am I supposed to add something like the following to ODBC.xs: #include "ODBC.h" # the following line added: #define dbd_st_prepare_sv dbd_st_prepare_sv DBISTATE_DECLARE; MODULE = DBD::ODBC PACKAGE = DBD::ODBC Martin -- Martin J. Evans Easysoft Limited http://www.easysoft.com