xref: /AOO41X/main/mysqlc/source/mysqlc_driver.cxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1*cdf0e10cSrcweir /*************************************************************************
2*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
3*cdf0e10cSrcweir *
4*cdf0e10cSrcweir * Copyright 2008 by Sun Microsystems, Inc.
5*cdf0e10cSrcweir *
6*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite
7*cdf0e10cSrcweir *
8*cdf0e10cSrcweir * $RCSfile: mysqlc_driver.cxx,v $
9*cdf0e10cSrcweir *
10*cdf0e10cSrcweir * $Revision: 1.1.2.5 $
11*cdf0e10cSrcweir *
12*cdf0e10cSrcweir * This file is part of OpenOffice.org.
13*cdf0e10cSrcweir *
14*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify
15*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3
16*cdf0e10cSrcweir * only, as published by the Free Software Foundation.
17*cdf0e10cSrcweir *
18*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful,
19*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of
20*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details
22*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code).
23*cdf0e10cSrcweir *
24*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License
25*cdf0e10cSrcweir * version 3 along with OpenOffice.org.  If not, see
26*cdf0e10cSrcweir * <http://www.openoffice.org/license.html>
27*cdf0e10cSrcweir * for a copy of the LGPLv3 License.
28*cdf0e10cSrcweir ************************************************************************/
29*cdf0e10cSrcweir #include "mysqlc_driver.hxx"
30*cdf0e10cSrcweir #include "mysqlc_connection.hxx"
31*cdf0e10cSrcweir #include "mysqlc_general.hxx"
32*cdf0e10cSrcweir 
33*cdf0e10cSrcweir using namespace com::sun::star::uno;
34*cdf0e10cSrcweir using namespace com::sun::star::lang;
35*cdf0e10cSrcweir using namespace com::sun::star::beans;
36*cdf0e10cSrcweir using namespace com::sun::star::sdbc;
37*cdf0e10cSrcweir using namespace connectivity::mysqlc;
38*cdf0e10cSrcweir using ::rtl::OUString;
39*cdf0e10cSrcweir #include <stdio.h>
40*cdf0e10cSrcweir 
41*cdf0e10cSrcweir #include <preextstl.h>
42*cdf0e10cSrcweir #include <cppconn/exception.h>
43*cdf0e10cSrcweir #ifdef SYSTEM_MYSQL_CPPCONN
44*cdf0e10cSrcweir     #include <mysql_driver.h>
45*cdf0e10cSrcweir #endif
46*cdf0e10cSrcweir #include <postextstl.h>
47*cdf0e10cSrcweir 
48*cdf0e10cSrcweir 
49*cdf0e10cSrcweir /* {{{ MysqlCDriver::MysqlCDriver() -I- */
50*cdf0e10cSrcweir MysqlCDriver::MysqlCDriver(const Reference< XMultiServiceFactory >& _rxFactory)
51*cdf0e10cSrcweir 	: ODriver_BASE(m_aMutex)
52*cdf0e10cSrcweir     ,m_xFactory(_rxFactory)
53*cdf0e10cSrcweir #ifndef SYSTEM_MYSQL_CPPCONN
54*cdf0e10cSrcweir     ,m_hCppConnModule( NULL )
55*cdf0e10cSrcweir     ,m_bAttemptedLoadCppConn( false )
56*cdf0e10cSrcweir #endif
57*cdf0e10cSrcweir {
58*cdf0e10cSrcweir 	OSL_TRACE("MysqlCDriver::MysqlCDriver");
59*cdf0e10cSrcweir 	cppDriver = NULL;
60*cdf0e10cSrcweir }
61*cdf0e10cSrcweir /* }}} */
62*cdf0e10cSrcweir 
63*cdf0e10cSrcweir 
64*cdf0e10cSrcweir /* {{{ MysqlCDriver::disposing() -I- */
65*cdf0e10cSrcweir void MysqlCDriver::disposing()
66*cdf0e10cSrcweir {
67*cdf0e10cSrcweir 	OSL_TRACE("MysqlCDriver::disposing");
68*cdf0e10cSrcweir 	::osl::MutexGuard aGuard(m_aMutex);
69*cdf0e10cSrcweir 
70*cdf0e10cSrcweir 	// when driver will be destroied so all our connections have to be destroied as well
71*cdf0e10cSrcweir 	for (OWeakRefArray::iterator i = m_xConnections.begin(); m_xConnections.end() != i; ++i)
72*cdf0e10cSrcweir 	{
73*cdf0e10cSrcweir 		Reference< XComponent > xComp(i->get(), UNO_QUERY);
74*cdf0e10cSrcweir 		if (xComp.is()) {
75*cdf0e10cSrcweir 			xComp->dispose();
76*cdf0e10cSrcweir 		}
77*cdf0e10cSrcweir 	}
78*cdf0e10cSrcweir 	m_xConnections.clear();
79*cdf0e10cSrcweir 
80*cdf0e10cSrcweir 	ODriver_BASE::disposing();
81*cdf0e10cSrcweir }
82*cdf0e10cSrcweir /* }}} */
83*cdf0e10cSrcweir 
84*cdf0e10cSrcweir 
85*cdf0e10cSrcweir // static ServiceInfo
86*cdf0e10cSrcweir /* {{{ MysqlCDriver::getImplementationName_Static() -I- */
87*cdf0e10cSrcweir OUString MysqlCDriver::getImplementationName_Static()
88*cdf0e10cSrcweir 	throw(RuntimeException)
89*cdf0e10cSrcweir {
90*cdf0e10cSrcweir 	OSL_TRACE("MysqlCDriver::getImplementationName_Static");
91*cdf0e10cSrcweir     return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.sdbc.mysqlc.MysqlCDriver" ) );
92*cdf0e10cSrcweir }
93*cdf0e10cSrcweir /* }}} */
94*cdf0e10cSrcweir 
95*cdf0e10cSrcweir 
96*cdf0e10cSrcweir /* {{{ MysqlCDriver::getSupportedServiceNames_Static() -I- */
97*cdf0e10cSrcweir Sequence< OUString > MysqlCDriver::getSupportedServiceNames_Static()
98*cdf0e10cSrcweir 	throw(RuntimeException)
99*cdf0e10cSrcweir {
100*cdf0e10cSrcweir 	OSL_TRACE("MysqlCDriver::getSupportedServiceNames_Static");
101*cdf0e10cSrcweir 	// which service is supported
102*cdf0e10cSrcweir 	// for more information @see com.sun.star.sdbc.Driver
103*cdf0e10cSrcweir 	Sequence< OUString > aSNS(1);
104*cdf0e10cSrcweir 	aSNS[0] = OUString::createFromAscii("com.sun.star.sdbc.Driver");
105*cdf0e10cSrcweir 	return aSNS;
106*cdf0e10cSrcweir }
107*cdf0e10cSrcweir /* }}} */
108*cdf0e10cSrcweir 
109*cdf0e10cSrcweir 
110*cdf0e10cSrcweir /* {{{ MysqlCDriver::getImplementationName() -I- */
111*cdf0e10cSrcweir OUString SAL_CALL MysqlCDriver::getImplementationName()
112*cdf0e10cSrcweir 	throw(RuntimeException)
113*cdf0e10cSrcweir {
114*cdf0e10cSrcweir 	OSL_TRACE("MysqlCDriver::getImplementationName");
115*cdf0e10cSrcweir 	return getImplementationName_Static();
116*cdf0e10cSrcweir }
117*cdf0e10cSrcweir /* }}} */
118*cdf0e10cSrcweir 
119*cdf0e10cSrcweir 
120*cdf0e10cSrcweir /* {{{ MysqlCDriver::supportsService() -I- */
121*cdf0e10cSrcweir sal_Bool SAL_CALL MysqlCDriver::supportsService(const OUString& _rServiceName)
122*cdf0e10cSrcweir 	throw(RuntimeException)
123*cdf0e10cSrcweir {
124*cdf0e10cSrcweir 	OSL_TRACE("MysqlCDriver::supportsService");
125*cdf0e10cSrcweir 	Sequence< OUString > aSupported(getSupportedServiceNames());
126*cdf0e10cSrcweir 	const OUString* pSupported = aSupported.getConstArray();
127*cdf0e10cSrcweir 	const OUString* pEnd = pSupported + aSupported.getLength();
128*cdf0e10cSrcweir 	for (;pSupported != pEnd && !pSupported->equals(_rServiceName); ++pSupported){}
129*cdf0e10cSrcweir 
130*cdf0e10cSrcweir 	return (pSupported != pEnd);
131*cdf0e10cSrcweir }
132*cdf0e10cSrcweir /* }}} */
133*cdf0e10cSrcweir 
134*cdf0e10cSrcweir 
135*cdf0e10cSrcweir /* {{{ MysqlCDriver::getSupportedServiceNames() -I- */
136*cdf0e10cSrcweir Sequence< OUString > SAL_CALL MysqlCDriver::getSupportedServiceNames()
137*cdf0e10cSrcweir 	throw(RuntimeException)
138*cdf0e10cSrcweir {
139*cdf0e10cSrcweir 	OSL_TRACE("MysqlCDriver::getSupportedServiceNames");
140*cdf0e10cSrcweir 	return getSupportedServiceNames_Static();
141*cdf0e10cSrcweir }
142*cdf0e10cSrcweir /* }}} */
143*cdf0e10cSrcweir 
144*cdf0e10cSrcweir 
145*cdf0e10cSrcweir extern "C" { static void SAL_CALL thisModule() {} }
146*cdf0e10cSrcweir 
147*cdf0e10cSrcweir void MysqlCDriver::impl_initCppConn_lck_throw()
148*cdf0e10cSrcweir {
149*cdf0e10cSrcweir #ifdef SYSTEM_MYSQL_CPPCONN
150*cdf0e10cSrcweir     cppDriver = get_driver_instance();
151*cdf0e10cSrcweir #else
152*cdf0e10cSrcweir     if ( !m_bAttemptedLoadCppConn )
153*cdf0e10cSrcweir     {
154*cdf0e10cSrcweir         const ::rtl::OUString sModuleName = ::rtl::OUString::createFromAscii( CPPCONN_LIB );
155*cdf0e10cSrcweir         m_hCppConnModule = osl_loadModuleRelative( &thisModule, sModuleName.pData, 0 );
156*cdf0e10cSrcweir         m_bAttemptedLoadCppConn = true;
157*cdf0e10cSrcweir     }
158*cdf0e10cSrcweir 
159*cdf0e10cSrcweir     // attempted to load - was it successful?
160*cdf0e10cSrcweir     if ( !m_hCppConnModule )
161*cdf0e10cSrcweir     {
162*cdf0e10cSrcweir         OSL_ENSURE( false, "MysqlCDriver::impl_initCppConn_lck_throw: could not load the " CPPCONN_LIB " library!");
163*cdf0e10cSrcweir         throw SQLException(
164*cdf0e10cSrcweir             ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Unable to load the " CPPCONN_LIB " library." ) ),
165*cdf0e10cSrcweir             *this,
166*cdf0e10cSrcweir             ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "08001" ) ),  // "unable to connect"
167*cdf0e10cSrcweir             0,
168*cdf0e10cSrcweir             Any()
169*cdf0e10cSrcweir         );
170*cdf0e10cSrcweir     }
171*cdf0e10cSrcweir 
172*cdf0e10cSrcweir     // find the factory symbol
173*cdf0e10cSrcweir     const ::rtl::OUString sSymbolName = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "sql_mysql_get_driver_instance" ) );
174*cdf0e10cSrcweir 	typedef void* (* FGetMySQLDriver)();
175*cdf0e10cSrcweir 
176*cdf0e10cSrcweir     const FGetMySQLDriver pFactoryFunction = (FGetMySQLDriver)( osl_getFunctionSymbol( m_hCppConnModule, sSymbolName.pData ) );
177*cdf0e10cSrcweir     if ( !pFactoryFunction )
178*cdf0e10cSrcweir     {
179*cdf0e10cSrcweir         OSL_ENSURE( false, "MysqlCDriver::impl_initCppConn_lck_throw: could not find the factory symbol in " CPPCONN_LIB "!");
180*cdf0e10cSrcweir         throw SQLException(
181*cdf0e10cSrcweir             ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( CPPCONN_LIB " is invalid: missing the driver factory function." ) ),
182*cdf0e10cSrcweir             *this,
183*cdf0e10cSrcweir             ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "08001" ) ),  // "unable to connect"
184*cdf0e10cSrcweir             0,
185*cdf0e10cSrcweir             Any()
186*cdf0e10cSrcweir         );
187*cdf0e10cSrcweir     }
188*cdf0e10cSrcweir 
189*cdf0e10cSrcweir     cppDriver = static_cast< sql::Driver* >( (*pFactoryFunction)() );
190*cdf0e10cSrcweir #endif
191*cdf0e10cSrcweir     if ( !cppDriver )
192*cdf0e10cSrcweir     {
193*cdf0e10cSrcweir         throw SQLException(
194*cdf0e10cSrcweir             ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Unable to obtain the MySQL_Driver instance from Connector/C++." ) ),
195*cdf0e10cSrcweir             *this,
196*cdf0e10cSrcweir             ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "08001" ) ),  // "unable to connect"
197*cdf0e10cSrcweir             0,
198*cdf0e10cSrcweir             Any()
199*cdf0e10cSrcweir         );
200*cdf0e10cSrcweir     }
201*cdf0e10cSrcweir }
202*cdf0e10cSrcweir 
203*cdf0e10cSrcweir /* {{{ MysqlCDriver::connect() -I- */
204*cdf0e10cSrcweir Reference< XConnection > SAL_CALL MysqlCDriver::connect(const OUString& url, const Sequence< PropertyValue >& info)
205*cdf0e10cSrcweir 	throw(SQLException, RuntimeException)
206*cdf0e10cSrcweir {
207*cdf0e10cSrcweir     ::osl::MutexGuard aGuard( m_aMutex );
208*cdf0e10cSrcweir 
209*cdf0e10cSrcweir 	OSL_TRACE("MysqlCDriver::connect");
210*cdf0e10cSrcweir 	if (!acceptsURL(url)) {
211*cdf0e10cSrcweir 		return NULL;
212*cdf0e10cSrcweir 	}
213*cdf0e10cSrcweir 
214*cdf0e10cSrcweir     if ( !cppDriver )
215*cdf0e10cSrcweir     {
216*cdf0e10cSrcweir         impl_initCppConn_lck_throw();
217*cdf0e10cSrcweir         OSL_POSTCOND( cppDriver, "MySQLCDriver::connect: internal error." );
218*cdf0e10cSrcweir         if ( !cppDriver )
219*cdf0e10cSrcweir             throw RuntimeException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "MySQLCDriver::connect: internal error." ) ), *this );
220*cdf0e10cSrcweir     }
221*cdf0e10cSrcweir 
222*cdf0e10cSrcweir     Reference< XConnection > xConn;
223*cdf0e10cSrcweir 	// create a new connection with the given properties and append it to our vector
224*cdf0e10cSrcweir 	try {
225*cdf0e10cSrcweir 		OConnection* pCon = new OConnection(*this, cppDriver);
226*cdf0e10cSrcweir 		xConn = pCon;
227*cdf0e10cSrcweir 
228*cdf0e10cSrcweir         pCon->construct(url,info);
229*cdf0e10cSrcweir         m_xConnections.push_back(WeakReferenceHelper(*pCon));
230*cdf0e10cSrcweir 	}
231*cdf0e10cSrcweir     catch (sql::SQLException &e)
232*cdf0e10cSrcweir     {
233*cdf0e10cSrcweir 		mysqlc_sdbc_driver::translateAndThrow(e, *this, getDefaultEncoding());
234*cdf0e10cSrcweir 	}
235*cdf0e10cSrcweir     return xConn;
236*cdf0e10cSrcweir }
237*cdf0e10cSrcweir /* }}} */
238*cdf0e10cSrcweir 
239*cdf0e10cSrcweir 
240*cdf0e10cSrcweir /* {{{ MysqlCDriver::acceptsURL() -I- */
241*cdf0e10cSrcweir sal_Bool SAL_CALL MysqlCDriver::acceptsURL(const OUString& url)
242*cdf0e10cSrcweir 		throw(SQLException, RuntimeException)
243*cdf0e10cSrcweir {
244*cdf0e10cSrcweir 	OSL_TRACE("MysqlCDriver::acceptsURL");
245*cdf0e10cSrcweir 	return (!url.compareTo(OUString::createFromAscii("sdbc:mysqlc:"), sizeof("sdbc:mysqlc:")-1));
246*cdf0e10cSrcweir }
247*cdf0e10cSrcweir /* }}} */
248*cdf0e10cSrcweir 
249*cdf0e10cSrcweir 
250*cdf0e10cSrcweir /* {{{ MysqlCDriver::getPropertyInfo() -I- */
251*cdf0e10cSrcweir Sequence< DriverPropertyInfo > SAL_CALL MysqlCDriver::getPropertyInfo(const OUString& url, const Sequence< PropertyValue >& /* info */)
252*cdf0e10cSrcweir 	throw(SQLException, RuntimeException)
253*cdf0e10cSrcweir {
254*cdf0e10cSrcweir 	OSL_TRACE("MysqlCDriver::getPropertyInfo");
255*cdf0e10cSrcweir 	if (acceptsURL(url)) {
256*cdf0e10cSrcweir 		::std::vector< DriverPropertyInfo > aDriverInfo;
257*cdf0e10cSrcweir 
258*cdf0e10cSrcweir 		aDriverInfo.push_back(DriverPropertyInfo(
259*cdf0e10cSrcweir 				OUString(RTL_CONSTASCII_USTRINGPARAM("Hostname"))
260*cdf0e10cSrcweir 				,OUString(RTL_CONSTASCII_USTRINGPARAM("Name of host"))
261*cdf0e10cSrcweir 				,sal_True
262*cdf0e10cSrcweir 				,OUString::createFromAscii("localhost")
263*cdf0e10cSrcweir 				,Sequence< OUString >())
264*cdf0e10cSrcweir 			);
265*cdf0e10cSrcweir 		aDriverInfo.push_back(DriverPropertyInfo(
266*cdf0e10cSrcweir 				OUString(RTL_CONSTASCII_USTRINGPARAM("Port"))
267*cdf0e10cSrcweir 				,OUString(RTL_CONSTASCII_USTRINGPARAM("Port"))
268*cdf0e10cSrcweir 				,sal_True
269*cdf0e10cSrcweir 				,OUString::createFromAscii("3306")
270*cdf0e10cSrcweir 				,Sequence< OUString >())
271*cdf0e10cSrcweir 			);
272*cdf0e10cSrcweir 		return Sequence< DriverPropertyInfo >(&(aDriverInfo[0]),aDriverInfo.size());
273*cdf0e10cSrcweir 	}
274*cdf0e10cSrcweir 
275*cdf0e10cSrcweir 	return Sequence< DriverPropertyInfo >();
276*cdf0e10cSrcweir }
277*cdf0e10cSrcweir /* }}} */
278*cdf0e10cSrcweir 
279*cdf0e10cSrcweir 
280*cdf0e10cSrcweir /* {{{ MysqlCDriver::getMajorVersion() -I- */
281*cdf0e10cSrcweir sal_Int32 SAL_CALL MysqlCDriver::getMajorVersion()
282*cdf0e10cSrcweir 	throw(RuntimeException)
283*cdf0e10cSrcweir {
284*cdf0e10cSrcweir 	OSL_TRACE("MysqlCDriver::getMajorVersion");
285*cdf0e10cSrcweir 	return MYSQLC_VERSION_MAJOR;
286*cdf0e10cSrcweir }
287*cdf0e10cSrcweir /* }}} */
288*cdf0e10cSrcweir 
289*cdf0e10cSrcweir 
290*cdf0e10cSrcweir /* {{{ MysqlCDriver::getMinorVersion() -I- */
291*cdf0e10cSrcweir sal_Int32 SAL_CALL MysqlCDriver::getMinorVersion()
292*cdf0e10cSrcweir 	throw(RuntimeException)
293*cdf0e10cSrcweir {
294*cdf0e10cSrcweir 	OSL_TRACE("MysqlCDriver::getMinorVersion");
295*cdf0e10cSrcweir 	return MYSQLC_VERSION_MINOR;
296*cdf0e10cSrcweir }
297*cdf0e10cSrcweir /* }}} */
298*cdf0e10cSrcweir 
299*cdf0e10cSrcweir 
300*cdf0e10cSrcweir namespace connectivity
301*cdf0e10cSrcweir {
302*cdf0e10cSrcweir namespace mysqlc
303*cdf0e10cSrcweir {
304*cdf0e10cSrcweir 
305*cdf0e10cSrcweir Reference< XInterface >  SAL_CALL MysqlCDriver_CreateInstance(const Reference< XMultiServiceFactory >& _rxFactory)
306*cdf0e10cSrcweir 	throw(::com::sun::star::uno::Exception)
307*cdf0e10cSrcweir {
308*cdf0e10cSrcweir 	return(*(new MysqlCDriver(_rxFactory)));
309*cdf0e10cSrcweir }
310*cdf0e10cSrcweir 
311*cdf0e10cSrcweir /* {{{ connectivity::mysqlc::release() -I- */
312*cdf0e10cSrcweir void release(oslInterlockedCount& _refCount,
313*cdf0e10cSrcweir 			 ::cppu::OBroadcastHelper& rBHelper,
314*cdf0e10cSrcweir 			 Reference< XInterface >& _xInterface,
315*cdf0e10cSrcweir 			 ::com::sun::star::lang::XComponent* _pObject)
316*cdf0e10cSrcweir {
317*cdf0e10cSrcweir 	if (osl_decrementInterlockedCount(&_refCount) == 0) {
318*cdf0e10cSrcweir 		osl_incrementInterlockedCount(&_refCount);
319*cdf0e10cSrcweir 
320*cdf0e10cSrcweir 		if (!rBHelper.bDisposed && !rBHelper.bInDispose) {
321*cdf0e10cSrcweir 			// remember the parent
322*cdf0e10cSrcweir 			Reference< XInterface > xParent;
323*cdf0e10cSrcweir 			{
324*cdf0e10cSrcweir 				::osl::MutexGuard aGuard(rBHelper.rMutex);
325*cdf0e10cSrcweir 				xParent = _xInterface;
326*cdf0e10cSrcweir 				_xInterface = NULL;
327*cdf0e10cSrcweir 			}
328*cdf0e10cSrcweir 
329*cdf0e10cSrcweir 			// First dispose
330*cdf0e10cSrcweir 			_pObject->dispose();
331*cdf0e10cSrcweir 
332*cdf0e10cSrcweir 			// only the alive ref holds the object
333*cdf0e10cSrcweir 			OSL_ASSERT(_refCount == 1);
334*cdf0e10cSrcweir 
335*cdf0e10cSrcweir 			// release the parent in the destructor
336*cdf0e10cSrcweir 			if (xParent.is()) {
337*cdf0e10cSrcweir 				::osl::MutexGuard aGuard(rBHelper.rMutex);
338*cdf0e10cSrcweir 				_xInterface = xParent;
339*cdf0e10cSrcweir 			}
340*cdf0e10cSrcweir 		}
341*cdf0e10cSrcweir 	} else {
342*cdf0e10cSrcweir 		osl_incrementInterlockedCount(&_refCount);
343*cdf0e10cSrcweir 	}
344*cdf0e10cSrcweir }
345*cdf0e10cSrcweir /* }}} */
346*cdf0e10cSrcweir 
347*cdf0e10cSrcweir 
348*cdf0e10cSrcweir 
349*cdf0e10cSrcweir /* {{{ connectivity::mysqlc::checkDisposed() -I- */
350*cdf0e10cSrcweir void checkDisposed(sal_Bool _bThrow)
351*cdf0e10cSrcweir 	throw (DisposedException)
352*cdf0e10cSrcweir {
353*cdf0e10cSrcweir 	if (_bThrow) {
354*cdf0e10cSrcweir 		throw DisposedException();
355*cdf0e10cSrcweir 	}
356*cdf0e10cSrcweir }
357*cdf0e10cSrcweir /* }}} */
358*cdf0e10cSrcweir 
359*cdf0e10cSrcweir } /* mysqlc */
360*cdf0e10cSrcweir } /* connectivity */
361*cdf0e10cSrcweir 
362*cdf0e10cSrcweir /*
363*cdf0e10cSrcweir  * Local variables:
364*cdf0e10cSrcweir  * tab-width: 4
365*cdf0e10cSrcweir  * c-basic-offset: 4
366*cdf0e10cSrcweir  * End:
367*cdf0e10cSrcweir  * vim600: noet sw=4 ts=4 fdm=marker
368*cdf0e10cSrcweir  * vim<600: noet sw=4 ts=4
369*cdf0e10cSrcweir  */
370