User: rt Date: 2008-06-06 13:23:05+0000 Modified: dba/connectivity/source/drivers/mysql/YDriver.cxx
Log: INTEGRATION: CWS dba30c (1.19.10); FILE MERGED 2008/05/06 10:10:40 oj 1.19.10.1: #i78486# check if characterset must be appended File Changes: Directory: /dba/connectivity/source/drivers/mysql/ ================================================== File [changed]: YDriver.cxx Url: http://dba.openoffice.org/source/browse/dba/connectivity/source/drivers/mysql/YDriver.cxx?r1=1.19&r2=1.20 Delta lines: +38 -21 --------------------- --- YDriver.cxx 2008-04-10 10:23:13+0000 1.19 +++ YDriver.cxx 2008-06-06 13:23:02+0000 1.20 @@ -33,10 +33,13 @@ #include "mysql/YDriver.hxx" #include "mysql/YCatalog.hxx" #include <osl/diagnose.h> +#include <comphelper/namedvaluecollection.hxx> #include "connectivity/dbexception.hxx" +#include <connectivity/dbcharset.hxx> #include <com/sun/star/sdbc/XDriverAccess.hpp> #include "TConnection.hxx" + //........................................................................ namespace connectivity { @@ -108,23 +111,6 @@ return _sUrl.copy(0,16).equalsAscii("sdbc:mysql:odbc:"); } //-------------------------------------------------------------------- - ::rtl::OUString getDriverClass(const Sequence< PropertyValue >& info) - { - ::rtl::OUString sRet; - const PropertyValue* pSupported = info.getConstArray(); - const PropertyValue* pEnd = pSupported + info.getLength(); - for (;pSupported != pEnd; ++pSupported) - if ( !pSupported->Name.compareToAscii("JavaDriverClass") ) - { - OSL_VERIFY( pSupported->Value >>= sRet ); - break; - } - - if ( !sRet.getLength() ) - sRet = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.mysql.jdbc.Driver")); - return sRet; - } - //-------------------------------------------------------------------- ::rtl::OUString transformUrl(const ::rtl::OUString& _sUrl) { ::rtl::OUString sNewUrl = _sUrl.copy(11); @@ -218,9 +204,11 @@ } else { - ::rtl::OUString sDriverClass = getDriverClass(info); - if ( !sDriverClass.getLength() ) - throw SQLException(); + ::comphelper::NamedValueCollection aSettings( info ); + ::rtl::OUString sDriverClass(RTL_CONSTASCII_USTRINGPARAM("com.mysql.jdbc.Driver")); + sDriverClass = aSettings.getOrDefault( "JavaDriverClass", sDriverClass ); + ::rtl::OUString sCharSet = aSettings.getOrDefault( "CharSet", ::rtl::OUString() ); + TJDBCDrivers::iterator aFind = m_aJdbcDrivers.find(sDriverClass); if ( aFind == m_aJdbcDrivers.end() ) aFind = m_aJdbcDrivers.insert(TJDBCDrivers::value_type(sDriverClass,lcl_loadDriver(m_xFactory,sCuttedUrl))).first; @@ -241,8 +229,37 @@ if ( xDriver.is() ) { ::rtl::OUString sCuttedUrl = transformUrl(url); - sal_Bool bIsODBC = isOdbcUrl( url ); + const sal_Bool bIsODBC = isOdbcUrl( url ); Sequence< PropertyValue > aConvertedProperties = lcl_convertProperties(bIsODBC,info); + if ( !bIsODBC ) + { + ::comphelper::NamedValueCollection aSettings( info ); + ::rtl::OUString sIanaName = aSettings.getOrDefault( "CharSet", ::rtl::OUString() ); + if ( sIanaName.getLength() ) + { + ::dbtools::OCharsetMap aLookupIanaName; + ::dbtools::OCharsetMap::const_iterator aLookup = aLookupIanaName.find(sIanaName, ::dbtools::OCharsetMap::IANA()); + if (aLookup != aLookupIanaName.end() ) + { + ::rtl::OUString sAdd; + if ( RTL_TEXTENCODING_UTF8 == (*aLookup).getEncoding() ) + { + static const ::rtl::OUString s_sCharSetOp(RTL_CONSTASCII_USTRINGPARAM("useUnicode=true&")); + if ( !sCuttedUrl.matchIgnoreAsciiCase(s_sCharSetOp) ) + { + sAdd = s_sCharSetOp; + } // if ( !sCuttedUrl.matchIgnoreAsciiCase(s_sCharSetOp) ) + } // if ( RTL_TEXTENCODING_UTF8 == (*aLookup).getEncoding() ) + if ( sCuttedUrl.indexOf('?') == -1 ) + sCuttedUrl += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("?")); + else + sCuttedUrl += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("&")); + sCuttedUrl += sAdd; + sCuttedUrl += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("characterEncoding=")); + sCuttedUrl += sIanaName; + } + } + } // if ( !bIsODBC ) xConnection = xDriver->connect( sCuttedUrl, aConvertedProperties ); if ( xConnection.is() ) --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
