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]

Reply via email to