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 28 // MARKER(update_precomp.py): autogen include statement, do not remove 29 #include "precompiled_connectivity.hxx" 30 #include "ZDriverWrapper.hxx" 31 #include "ZConnectionPool.hxx" 32 #include <osl/diagnose.h> 33 34 //........................................................................ 35 namespace connectivity 36 { 37 //........................................................................ 38 39 using namespace ::com::sun::star::uno; 40 using namespace ::com::sun::star::sdbc; 41 using namespace ::com::sun::star::beans; 42 43 //==================================================================== 44 //= ODriverWrapper 45 //==================================================================== 46 //-------------------------------------------------------------------- 47 ODriverWrapper::ODriverWrapper( Reference< XAggregation >& _rxAggregateDriver, OConnectionPool* _pPool ) 48 :m_pConnectionPool(_pPool) 49 { 50 OSL_ENSURE(_rxAggregateDriver.is(), "ODriverWrapper::ODriverWrapper: invalid aggregate!"); 51 OSL_ENSURE(m_pConnectionPool, "ODriverWrapper::ODriverWrapper: invalid connection pool!"); 52 53 if (m_pConnectionPool) 54 m_pConnectionPool->acquire(); 55 56 osl_incrementInterlockedCount( &m_refCount ); 57 if (_rxAggregateDriver.is()) 58 { 59 // transfer the (one and only) real ref to the aggregate to our member 60 m_xDriverAggregate = _rxAggregateDriver; 61 _rxAggregateDriver = NULL; 62 63 // a second "real" reference 64 m_xDriver = Reference< XDriver >(m_xDriverAggregate, UNO_QUERY); 65 OSL_ENSURE(m_xDriver.is(), "ODriverWrapper::ODriverWrapper: invalid aggregate (no XDriver)!"); 66 67 // set ourself as delegator 68 m_xDriverAggregate->setDelegator( static_cast< XWeak* >( this ) ); 69 } 70 osl_decrementInterlockedCount( &m_refCount ); 71 } 72 73 //-------------------------------------------------------------------- 74 ODriverWrapper::~ODriverWrapper() 75 { 76 if (m_xDriverAggregate.is()) 77 m_xDriverAggregate->setDelegator(NULL); 78 79 if (m_pConnectionPool) 80 m_pConnectionPool->release(); 81 m_pConnectionPool = NULL; 82 } 83 84 //-------------------------------------------------------------------- 85 Any SAL_CALL ODriverWrapper::queryInterface( const Type& _rType ) throw (RuntimeException) 86 { 87 Any aReturn = ODriverWrapper_BASE::queryInterface(_rType); 88 return aReturn.hasValue() ? aReturn : (m_xDriverAggregate.is() ? m_xDriverAggregate->queryAggregation(_rType) : aReturn); 89 } 90 91 //-------------------------------------------------------------------- 92 Reference< XConnection > SAL_CALL ODriverWrapper::connect( const ::rtl::OUString& url, const Sequence< PropertyValue >& info ) throw (SQLException, RuntimeException) 93 { 94 Reference< XConnection > xConnection; 95 if (m_pConnectionPool) 96 // route this through the pool 97 xConnection = m_pConnectionPool->getConnectionWithInfo( url, info ); 98 else if (m_xDriver.is()) 99 xConnection = m_xDriver->connect( url, info ); 100 101 return xConnection; 102 } 103 104 //-------------------------------------------------------------------- 105 sal_Bool SAL_CALL ODriverWrapper::acceptsURL( const ::rtl::OUString& url ) throw (SQLException, RuntimeException) 106 { 107 return m_xDriver.is() && m_xDriver->acceptsURL(url); 108 } 109 110 //-------------------------------------------------------------------- 111 Sequence< DriverPropertyInfo > SAL_CALL ODriverWrapper::getPropertyInfo( const ::rtl::OUString& url, const Sequence< PropertyValue >& info ) throw (SQLException, RuntimeException) 112 { 113 Sequence< DriverPropertyInfo > aInfo; 114 if (m_xDriver.is()) 115 aInfo = m_xDriver->getPropertyInfo(url, info); 116 return aInfo; 117 } 118 119 //-------------------------------------------------------------------- 120 sal_Int32 SAL_CALL ODriverWrapper::getMajorVersion( ) throw (RuntimeException) 121 { 122 return m_xDriver.is() ? m_xDriver->getMajorVersion() : 0; 123 } 124 125 //-------------------------------------------------------------------- 126 sal_Int32 SAL_CALL ODriverWrapper::getMinorVersion( ) throw (RuntimeException) 127 { 128 return m_xDriver.is() ? m_xDriver->getMinorVersion() : 0; 129 } 130 131 //........................................................................ 132 } // namespace connectivity 133 //........................................................................ 134 135 136