xref: /trunk/main/connectivity/source/inc/mysql/YDriver.hxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 #ifndef CONNECTIVITY_MYSQL_DRIVER_HXX
28 #define CONNECTIVITY_MYSQL_DRIVER_HXX
29 
30 #include <com/sun/star/sdbc/XDriver.hpp>
31 #include <com/sun/star/sdbcx/XDataDefinitionSupplier.hpp>
32 #include <com/sun/star/lang/XServiceInfo.hpp>
33 #include <cppuhelper/compbase3.hxx>
34 #include <comphelper/uno3.hxx>
35 #include <comphelper/stl_types.hxx>
36 #include <comphelper/broadcasthelper.hxx>
37 #include "connectivity/CommonTools.hxx"
38 
39 //........................................................................
40 namespace connectivity
41 {
42 //........................................................................
43 
44     class OMetaConnection;
45 
46     namespace mysql
47     {
48         ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL ODriverDelegator_CreateInstance(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxFactory) throw( ::com::sun::star::uno::Exception );
49 
50         typedef ::cppu::WeakComponentImplHelper3<   ::com::sun::star::sdbc::XDriver
51                                                 ,   ::com::sun::star::sdbcx::XDataDefinitionSupplier
52                                                 ,   ::com::sun::star::lang::XServiceInfo
53                                                 >   ODriverDelegator_BASE;
54 
55         typedef ::std::pair< ::com::sun::star::uno::WeakReferenceHelper,OMetaConnection*> TWeakConnectionPair;
56         typedef ::std::pair< ::com::sun::star::uno::WeakReferenceHelper,TWeakConnectionPair> TWeakPair;
57         typedef ::std::vector< TWeakPair > TWeakPairVector;
58         DECLARE_STL_USTRINGACCESS_MAP(::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDriver >,TJDBCDrivers);
59         typedef enum
60         {
61             D_ODBC,
62             D_JDBC,
63             D_NATIVE
64         } T_DRIVERTYPE;
65 
66 
67         /** delegates all calls to the orignal driver and extend the existing one with the SDBCX layer.
68 
69         */
70         class ODriverDelegator : public ::comphelper::OBaseMutex
71                                 ,public ODriverDelegator_BASE
72         {
73             TJDBCDrivers                                                        m_aJdbcDrivers; // all jdbc drivers
74             TWeakPairVector                                                     m_aConnections; //  vector containing a list
75                                                                                                 //  of all the Connection objects
76                                                                                                 //  for this Driver
77             ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDriver >                 m_xODBCDriver;
78             ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDriver >                 m_xNativeDriver;
79             ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >    m_xFactory;
80             ::rtl::OUString     m_sOldDriverClass;
81             T_DRIVERTYPE        m_eDriverType;
82 
83             /** load the driver we want to delegate.
84                 The <member>m_xODBCDriver</member> or <member>m_xDBCDriver</member> may be <NULL/> if the driver could not be loaded.
85                 @param  url
86                     The URL.
87                 @param  info
88                     The property info contains which driver we have to delegate.
89                 @return
90                     The driver which was currently selected.
91             */
92             ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDriver > loadDriver( const ::rtl::OUString& url, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& info );
93 
94         public:
95             /** creates a new delegator for a mysql driver
96             */
97             ODriverDelegator(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxFactory);
98 
99             // XServiceInfo
100             DECLARE_SERVICE_INFO();
101             static ::rtl::OUString getImplementationName_Static(  ) throw(::com::sun::star::uno::RuntimeException);
102             static ::com::sun::star::uno::Sequence< ::rtl::OUString > getSupportedServiceNames_Static(  ) throw (::com::sun::star::uno::RuntimeException);
103 
104             // XDriver
105             virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection > SAL_CALL connect( const ::rtl::OUString& url, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& info ) throw (::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
106             virtual sal_Bool SAL_CALL acceptsURL( const ::rtl::OUString& url ) throw (::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
107             virtual ::com::sun::star::uno::Sequence< ::com::sun::star::sdbc::DriverPropertyInfo > SAL_CALL getPropertyInfo( const ::rtl::OUString& url, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& info ) throw (::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
108             virtual sal_Int32 SAL_CALL getMajorVersion(  ) throw (::com::sun::star::uno::RuntimeException);
109             virtual sal_Int32 SAL_CALL getMinorVersion(  ) throw (::com::sun::star::uno::RuntimeException);
110 
111             // XDataDefinitionSupplier
112             virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbcx::XTablesSupplier > SAL_CALL getDataDefinitionByConnection( const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >& connection ) throw (::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
113             virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbcx::XTablesSupplier > SAL_CALL getDataDefinitionByURL( const ::rtl::OUString& url, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& info ) throw (::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
114         protected:
115             /// dtor
116             virtual ~ODriverDelegator();
117             // OComponentHelper
118             virtual void SAL_CALL disposing(void);
119         };
120     }
121 
122 //........................................................................
123 }   // namespace connectivity
124 //........................................................................
125 #endif // CONNECTIVITY_MYSQL_DRIVER_HXX
126 
127