summaryrefslogtreecommitdiff
path: root/mysqlc/source/mysqlc_connection.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'mysqlc/source/mysqlc_connection.cxx')
-rw-r--r--mysqlc/source/mysqlc_connection.cxx791
1 files changed, 0 insertions, 791 deletions
diff --git a/mysqlc/source/mysqlc_connection.cxx b/mysqlc/source/mysqlc_connection.cxx
deleted file mode 100644
index 82536d8..0000000
--- a/mysqlc/source/mysqlc_connection.cxx
+++ /dev/null
@@ -1,791 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
-* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-*
-* Copyright 2008 by Sun Microsystems, Inc.
-*
-* OpenOffice.org - a multi-platform office productivity suite
-*
-* This file is part of OpenOffice.org.
-*
-* OpenOffice.org is free software: you can redistribute it and/or modify
-* it under the terms of the GNU Lesser General Public License version 3
-* only, as published by the Free Software Foundation.
-*
-* OpenOffice.org is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU Lesser General Public License version 3 for more details
-* (a copy is included in the LICENSE file that accompanied this code).
-*
-* You should have received a copy of the GNU Lesser General Public License
-* version 3 along with OpenOffice.org. If not, see
-* <http://www.openoffice.org/license.html>
-* for a copy of the LGPLv3 License.
-************************************************************************/
-
-#include "mysqlc_connection.hxx"
-#include "mysqlc_databasemetadata.hxx"
-
-
-#include "mysqlc_driver.hxx"
-#include "mysqlc_statement.hxx"
-#include "mysqlc_preparedstatement.hxx"
-#include "mysqlc_general.hxx"
-
-#include <cppconn/driver.h>
-#include <cppconn/connection.h>
-#include <cppconn/statement.h>
-#include <cppconn/metadata.h>
-#include <cppconn/exception.h>
-
-#include <com/sun/star/sdbc/ColumnValue.hpp>
-#include <com/sun/star/sdbc/XRow.hpp>
-#include <com/sun/star/sdbc/TransactionIsolation.hpp>
-#include <com/sun/star/lang/DisposedException.hpp>
-#include <com/sun/star/beans/NamedValue.hpp>
-
-#include <osl/module.hxx>
-#include <osl/thread.h>
-#include <osl/file.h>
-#include <rtl/uri.hxx>
-#include <rtl/ustrbuf.hxx>
-
-using namespace connectivity::mysqlc;
-
-#include <stdio.h>
-
-//------------------------------------------------------------------------------
-using namespace com::sun::star::uno;
-using namespace com::sun::star::container;
-using namespace com::sun::star::lang;
-using namespace com::sun::star::beans;
-using namespace com::sun::star::sdbc;
-using ::osl::MutexGuard;
-using ::rtl::OUString;
-
-
-#define MYSQLC_URI_PREFIX "sdbc:mysqlc:"
-
-
-/* {{{ OConnection::OConnection() -I- */
-OConnection::OConnection(MysqlCDriver& _rDriver, sql::Driver * _cppDriver)
- :OMetaConnection_BASE(m_aMutex)
- ,OSubComponent<OConnection, OConnection_BASE>((::cppu::OWeakObject*)&_rDriver, this)
- ,m_xMetaData(NULL)
- ,m_rDriver(_rDriver)
- ,cppDriver(_cppDriver)
- ,m_bClosed(sal_False)
- ,m_bUseCatalog(sal_False)
- ,m_bUseOldDateFormat(sal_False)
-{
- OSL_TRACE("OConnection::OConnection");
- m_rDriver.acquire();
-}
-/* }}} */
-
-
-/* {{{ OConnection::OConnection() -I- */
-OConnection::~OConnection()
-{
- OSL_TRACE("OConnection::~OConnection");
- if (!isClosed()) {
- close();
- }
- m_rDriver.release();
-}
-/* }}} */
-
-
-/* {{{ OConnection::release() -I- */
-void SAL_CALL OConnection::release()
- throw()
-{
- OSL_TRACE("OConnection::release");
- relase_ChildImpl();
-}
-/* }}} */
-
-#ifndef SYSTEM_MYSQL
- extern "C" { void SAL_CALL thisModule() {} }
-#endif
-
-/* {{{ OConnection::construct() -I- */
-void OConnection::construct(const OUString& url, const Sequence< PropertyValue >& info)
- throw(SQLException)
-{
- OSL_TRACE("OConnection::construct");
- MutexGuard aGuard(m_aMutex);
-
- sal_Int32 nIndex;
- sal_Bool bEmbedded = sal_False;
- OUString token;
- OUString aHostName(RTL_CONSTASCII_USTRINGPARAM("localhost"));
- sal_Int32 nPort = 3306;
- OUString aDbName;
-
- m_settings.encoding = m_rDriver.getDefaultEncoding();
- m_settings.quoteIdentifier = OUString();
-
- // parse url. Url has the following format:
- // external server: sdbc:mysqlc:[hostname]:[port]/[dbname]
-
- if (!url.compareTo(OUString(RTL_CONSTASCII_USTRINGPARAM(MYSQLC_URI_PREFIX)), sizeof(MYSQLC_URI_PREFIX)-1)) {
- nIndex = 12;
- } else {
- bEmbedded = sal_True;
- nIndex = 20;
- mysqlc_sdbc_driver::throwFeatureNotImplementedException("OConnection::construct (embedded MySQL)", *this);
- }
-
- token = url.getToken(0, '/', nIndex);
- if (token.getLength()) {
- sal_Int32 nIndex1 = 0;
- OUString hostandport = token.getToken(0,':', nIndex1);
- if (hostandport.getLength()) {
- aHostName = hostandport;
- hostandport = token.getToken(0, ':', nIndex1);
- if (hostandport.getLength() && nIndex1) {
- nPort = hostandport.toInt32();
- }
- token = url.getToken(0, '/', nIndex);
- if (token.getLength() && nIndex) {
- aDbName = token;
- }
- }
- }
-
- // get user and password for mysql connection
- const PropertyValue *pIter = info.getConstArray();
- const PropertyValue *pEnd = pIter + info.getLength();
- OUString aUser, aPass, sUnixSocket, sNamedPipe;
- bool unixSocketPassed = false;
- bool namedPipePassed = false;
-
- m_settings.connectionURL = url;
- for (;pIter != pEnd;++pIter) {
- if (!pIter->Name.compareToAscii("user")) {
- OSL_VERIFY( pIter->Value >>= aUser );
- } else if (!pIter->Name.compareToAscii("password")) {
- OSL_VERIFY( pIter->Value >>= aPass );
- } else if (!pIter->Name.compareToAscii("LocalSocket")) {
- OSL_VERIFY( pIter->Value >>= sUnixSocket );
- unixSocketPassed = true;
- } else if (!pIter->Name.compareToAscii("NamedPipe")) {
- OSL_VERIFY( pIter->Value >>= sNamedPipe );
- namedPipePassed = true;
- } else if ( !pIter->Name.compareToAscii("PublicConnectionURL")) {
- OSL_VERIFY( pIter->Value >>= m_settings.connectionURL );
- } else if ( !pIter->Name.compareToAscii("NewURL")) { // legacy name for "PublicConnectionURL"
- OSL_VERIFY( pIter->Value >>= m_settings.connectionURL );
- }
- }
-
- if (bEmbedded == sal_False) {
- try {
- sql::ConnectOptionsMap connProps;
- std::string host_str = OUStringToOString(aHostName, m_settings.encoding).getStr();
- std::string user_str = OUStringToOString(aUser, m_settings.encoding).getStr();
- std::string pass_str = OUStringToOString(aPass, m_settings.encoding).getStr();
- std::string schema_str = OUStringToOString(aDbName, m_settings.encoding).getStr();
- connProps["hostName"] = sql::ConnectPropertyVal(host_str);
- connProps["userName"] = sql::ConnectPropertyVal(user_str);
- connProps["password"] = sql::ConnectPropertyVal(pass_str);
- connProps["schema"] = sql::ConnectPropertyVal(schema_str);
- connProps["port"] = sql::ConnectPropertyVal((int)(nPort));
- if (unixSocketPassed) {
- sql::SQLString socket_str = OUStringToOString(sUnixSocket, m_settings.encoding).getStr();
- connProps["socket"] = socket_str;
- } else if (namedPipePassed) {
- sql::SQLString pipe_str = OUStringToOString(sNamedPipe, m_settings.encoding).getStr();
- connProps["socket"] = pipe_str;
- }
-
-#ifndef SYSTEM_MYSQL
- ::rtl::OUString sMySQLClientLib( RTL_CONSTASCII_USTRINGPARAM( MYSQL_LIB ) );
-
- ::rtl::OUString moduleBase;
- OSL_VERIFY( ::osl::Module::getUrlFromAddress( &thisModule, moduleBase ) );
- ::rtl::OUString sMySQLClientLibURL;
- try
- {
- sMySQLClientLibURL = ::rtl::Uri::convertRelToAbs( moduleBase, sMySQLClientLib.pData );
- }
- catch ( const ::rtl::MalformedUriException& e )
- {
- (void)e; // silence compiler
- #if OSL_DEBUG_LEVEL > 0
- ::rtl::OString sMessage( "OConnection::construct: malformed URI: " );
- sMessage += ::rtl::OUStringToOString( e.getMessage(), osl_getThreadTextEncoding() );
- OSL_FAIL( sMessage.getStr() );
- #endif
- }
-
- ::rtl::OUString sMySQLClientLibPath;
- osl_getSystemPathFromFileURL( sMySQLClientLibURL.pData, &sMySQLClientLibPath.pData );
-
- sql::SQLString mysqlLib = ::rtl::OUStringToOString( sMySQLClientLibPath, osl_getThreadTextEncoding() ).getStr();
- connProps["clientlib"] = mysqlLib;
-
- OSL_TRACE("clientlib=%s", mysqlLib.c_str());
-#endif
-
- OSL_TRACE("hostName=%s", host_str.c_str());
- OSL_TRACE("port=%i", int(nPort));
- OSL_TRACE("userName=%s", user_str.c_str());
- OSL_TRACE("password=%s", pass_str.c_str());
- OSL_TRACE("schema=%s", schema_str.c_str());
-
- m_settings.cppConnection.reset(cppDriver->connect(connProps));
- } catch (sql::SQLException &e) {
- mysqlc_sdbc_driver::translateAndThrow(e, *this, getConnectionEncoding());
- }
- } else {
- // TODO: support for embedded server
- }
-
- m_settings.schema = aDbName;
- OSL_TRACE("%s", OUStringToOString(m_settings.schema, getConnectionEncoding()).getStr());
-
- // Check if the server is 4.1 or above
- if (this->getMysqlVersion() < 40100) {
- throw SQLException(
- ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "MySQL Connector/OO.org requires MySQL Server 4.1 or above" ) ),
- *this,
- ::rtl::OUString(),
- 0,
- Any());
- }
- std::auto_ptr<sql::Statement> stmt(m_settings.cppConnection->createStatement());
- stmt->executeUpdate("SET session sql_mode='ANSI_QUOTES'");
- stmt->executeUpdate("SET NAMES utf8");
-}
-/* }}} */
-
-
-// XServiceInfo
-IMPLEMENT_SERVICE_INFO(OConnection, "com.sun.star.sdbc.drivers.mysqlc.OConnection", "com.sun.star.sdbc.Connection")
-
-
-/* {{{ OConnection::createStatement() -I- */
-Reference< XStatement > SAL_CALL OConnection::createStatement()
- throw(SQLException, RuntimeException)
-{
- OSL_TRACE("OConnection::createStatement");
- MutexGuard aGuard(m_aMutex);
- checkDisposed(OConnection_BASE::rBHelper.bDisposed);
-
- // create a statement
- Reference< XStatement > xReturn;
- // the statement can only be executed once
- try {
- xReturn = new OStatement(this, m_settings.cppConnection->createStatement());
- m_aStatements.push_back(WeakReferenceHelper(xReturn));
- return xReturn;
- } catch (sql::SQLException & e) {
- mysqlc_sdbc_driver::translateAndThrow(e, *this, getConnectionEncoding());
- }
- return xReturn;
-}
-/* }}} */
-
-
-/* {{{ OConnection::createStatement() -I- */
-Reference< XPreparedStatement > SAL_CALL OConnection::prepareStatement(const OUString& _sSql)
- throw(SQLException, RuntimeException)
-{
- OSL_TRACE("OConnection::prepareStatement");
- MutexGuard aGuard(m_aMutex);
- checkDisposed(OConnection_BASE::rBHelper.bDisposed);
- const ::rtl::OUString sSqlStatement = transFormPreparedStatement( _sSql );
-
- Reference< XPreparedStatement > xStatement;
- try {
- // create a statement
- // the statement can only be executed more than once
- xStatement = new OPreparedStatement(this,
- m_settings.cppConnection->prepareStatement(OUStringToOString(sSqlStatement, getConnectionEncoding()).getStr()));
- m_aStatements.push_back( WeakReferenceHelper( xStatement ) );
- } catch (sql::SQLException & e) {
- mysqlc_sdbc_driver::translateAndThrow(e, *this, getConnectionEncoding());
- }
- return xStatement;
-}
-/* }}} */
-
-
-/* {{{ OConnection::prepareCall() -U- */
-Reference< XPreparedStatement > SAL_CALL OConnection::prepareCall(const OUString& /*_sSql*/ )
- throw(SQLException, RuntimeException)
-{
- OSL_TRACE("OConnection::prepareCall");
- MutexGuard aGuard(m_aMutex);
- checkDisposed(OConnection_BASE::rBHelper.bDisposed);
-
- mysqlc_sdbc_driver::throwFeatureNotImplementedException("OConnection::prepareCall", *this);
- return Reference< XPreparedStatement >();
-}
-/* }}} */
-
-
-/* {{{ OConnection::nativeSQL() -I- */
-OUString SAL_CALL OConnection::nativeSQL(const OUString& _sSql)
- throw(SQLException, RuntimeException)
-{
- OSL_TRACE("OConnection::nativeSQL");
- MutexGuard aGuard(m_aMutex);
-
- const ::rtl::OUString sSqlStatement = transFormPreparedStatement( _sSql );
- ::rtl::OUString sNativeSQL;
- try {
- sNativeSQL = mysqlc_sdbc_driver::convert(m_settings.cppConnection->nativeSQL(mysqlc_sdbc_driver::convert(sSqlStatement, getConnectionEncoding())),
- getConnectionEncoding());
- } catch (sql::SQLException & e) {
- mysqlc_sdbc_driver::translateAndThrow(e, *this, getConnectionEncoding());
- }
- return sNativeSQL;
-}
-/* }}} */
-
-
-/* {{{ OConnection::setAutoCommit() -I- */
-void SAL_CALL OConnection::setAutoCommit(sal_Bool autoCommit)
- throw(SQLException, RuntimeException)
-{
- OSL_TRACE("OConnection::setAutoCommit");
- MutexGuard aGuard(m_aMutex);
- checkDisposed(OConnection_BASE::rBHelper.bDisposed);
- try {
- m_settings.cppConnection->setAutoCommit(autoCommit == sal_True? true:false);
- } catch (sql::SQLException & e) {
- mysqlc_sdbc_driver::translateAndThrow(e, *this, getConnectionEncoding());
- }
-}
-/* }}} */
-
-
-/* {{{ OConnection::getAutoCommit() -I- */
-sal_Bool SAL_CALL OConnection::getAutoCommit()
- throw(SQLException, RuntimeException)
-{
- OSL_TRACE("OConnection::getAutoCommit");
- // you have to distinguish which if you are in autocommit mode or not
- // at normal case true should be fine here
-
- MutexGuard aGuard(m_aMutex);
- checkDisposed(OConnection_BASE::rBHelper.bDisposed);
-
- sal_Bool autoCommit = sal_False;
- try {
- autoCommit = m_settings.cppConnection->getAutoCommit() == true ? sal_True : sal_False;
- } catch (sql::SQLException & e) {
- mysqlc_sdbc_driver::translateAndThrow(e, *this, getConnectionEncoding());
- }
- return autoCommit;
-}
-/* }}} */
-
-
-/* {{{ OConnection::commit() -I- */
-void SAL_CALL OConnection::commit()
- throw(SQLException, RuntimeException)
-{
- OSL_TRACE("OConnection::commit");
- MutexGuard aGuard(m_aMutex);
- checkDisposed(OConnection_BASE::rBHelper.bDisposed);
- try {
- m_settings.cppConnection->commit();
- } catch (sql::SQLException & e) {
- mysqlc_sdbc_driver::translateAndThrow(e, *this, getConnectionEncoding());
- }
-}
-/* }}} */
-
-
-/* {{{ OConnection::rollback() -I- */
-void SAL_CALL OConnection::rollback()
- throw(SQLException, RuntimeException)
-{
- OSL_TRACE("OConnection::rollback");
- MutexGuard aGuard(m_aMutex);
- checkDisposed(OConnection_BASE::rBHelper.bDisposed);
- try {
- m_settings.cppConnection->rollback();
- } catch (sql::SQLException & e) {
- mysqlc_sdbc_driver::translateAndThrow(e, *this, getConnectionEncoding());
- }
-}
-/* }}} */
-
-
-/* {{{ OConnection::isClosed() -I- */
-sal_Bool SAL_CALL OConnection::isClosed()
- throw(SQLException, RuntimeException)
-{
- OSL_TRACE("OConnection::isClosed");
- MutexGuard aGuard(m_aMutex);
-
- // just simple -> we are close when we are disposed taht means someone called dispose(); (XComponent)
- return (OConnection_BASE::rBHelper.bDisposed);
-}
-/* }}} */
-
-
-/* {{{ OConnection::createStatement() -I- */
-Reference< XDatabaseMetaData > SAL_CALL OConnection::getMetaData()
- throw(SQLException, RuntimeException)
-{
- OSL_TRACE("OConnection::getMetaData");
- MutexGuard aGuard(m_aMutex);
- checkDisposed(OConnection_BASE::rBHelper.bDisposed);
-
- Reference< XDatabaseMetaData > xMetaData = m_xMetaData;
- if (!xMetaData.is()) {
- try {
- xMetaData = new ODatabaseMetaData(*this); // need the connection because it can return it
- } catch (sql::SQLException & e) {
- mysqlc_sdbc_driver::translateAndThrow(e, *this, getConnectionEncoding());
- }
- m_xMetaData = xMetaData;
- }
-
- return xMetaData;
-}
-/* }}} */
-
-
-/* {{{ OConnection::createStatement() -I- */
-void SAL_CALL OConnection::setReadOnly(sal_Bool readOnly)
- throw(SQLException, RuntimeException)
-{
- OSL_TRACE("OConnection::setReadOnly");
- MutexGuard aGuard(m_aMutex);
- checkDisposed(OConnection_BASE::rBHelper.bDisposed);
-
- m_settings.readOnly = readOnly;
-}
-/* }}} */
-
-
-/* {{{ OConnection::createStatement() -I- */
-sal_Bool SAL_CALL OConnection::isReadOnly()
- throw(SQLException, RuntimeException)
-{
- OSL_TRACE("OConnection::isReadOnly");
- MutexGuard aGuard(m_aMutex);
- checkDisposed(OConnection_BASE::rBHelper.bDisposed);
-
- // return if your connection to readonly
- return (m_settings.readOnly);
-}
-/* }}} */
-
-
-/* {{{ OConnection::createStatement() -I- */
-void SAL_CALL OConnection::setCatalog(const OUString& catalog)
- throw(SQLException, RuntimeException)
-{
- OSL_TRACE("OConnection::setCatalog");
- MutexGuard aGuard(m_aMutex);
- checkDisposed(OConnection_BASE::rBHelper.bDisposed);
-
- try {
-// m_settings.cppConnection->setCatalog(OUStringToOString(catalog, m_settings.encoding).getStr());
- m_settings.cppConnection->setSchema(OUStringToOString(catalog, getConnectionEncoding()).getStr());
- } catch (sql::SQLException & e) {
- mysqlc_sdbc_driver::translateAndThrow(e, *this, getConnectionEncoding());
- }
-}
-/* }}} */
-
-
-/* {{{ OConnection::createStatement() -I- */
-OUString SAL_CALL OConnection::getCatalog()
- throw(SQLException, RuntimeException)
-{
- OSL_TRACE("OConnection::getCatalog");
- MutexGuard aGuard(m_aMutex);
- checkDisposed(OConnection_BASE::rBHelper.bDisposed);
-
- OUString catalog;
- try {
- catalog = mysqlc_sdbc_driver::convert(m_settings.cppConnection->getSchema(), getConnectionEncoding());
- } catch (sql::SQLException & e) {
- mysqlc_sdbc_driver::translateAndThrow(e, *this, getConnectionEncoding());
- }
- return catalog;
-}
-/* }}} */
-
-
-/* {{{ OConnection::createStatement() -I- */
-void SAL_CALL OConnection::setTransactionIsolation(sal_Int32 level)
- throw(SQLException, RuntimeException)
-{
- OSL_TRACE("OConnection::setTransactionIsolation");
- MutexGuard aGuard(m_aMutex);
- checkDisposed(OConnection_BASE::rBHelper.bDisposed);
-
- sql::enum_transaction_isolation cpplevel = sql::TRANSACTION_SERIALIZABLE;
-
- switch (level) {
- case TransactionIsolation::READ_UNCOMMITTED:
- cpplevel = sql::TRANSACTION_READ_UNCOMMITTED;
- break;
- case TransactionIsolation::READ_COMMITTED:
- cpplevel = sql::TRANSACTION_READ_COMMITTED;
- break;
- case TransactionIsolation::REPEATABLE_READ:
- cpplevel = sql::TRANSACTION_REPEATABLE_READ;
- break;
- case TransactionIsolation::SERIALIZABLE:
- cpplevel = sql::TRANSACTION_SERIALIZABLE;
- break;
- case TransactionIsolation::NONE:
- cpplevel = sql::TRANSACTION_SERIALIZABLE;
- break;
- default:;
- /* XXX: Exception ?? */
- }
- try {
- m_settings.cppConnection->setTransactionIsolation(cpplevel);
- } catch (sql::SQLException & e) {
- mysqlc_sdbc_driver::translateAndThrow(e, *this, getConnectionEncoding());
- }
-}
-/* }}} */
-
-
-/* {{{ OConnection::createStatement() -I- */
-sal_Int32 SAL_CALL OConnection::getTransactionIsolation()
- throw(SQLException, RuntimeException)
-{
- OSL_TRACE("OConnection::getTransactionIsolation");
- MutexGuard aGuard(m_aMutex);
- checkDisposed(OConnection_BASE::rBHelper.bDisposed);
-
- try {
- switch (m_settings.cppConnection->getTransactionIsolation()) {
- case sql::TRANSACTION_SERIALIZABLE: return TransactionIsolation::SERIALIZABLE;
- case sql::TRANSACTION_REPEATABLE_READ: return TransactionIsolation::REPEATABLE_READ;
- case sql::TRANSACTION_READ_COMMITTED: return TransactionIsolation::READ_COMMITTED;
- case sql::TRANSACTION_READ_UNCOMMITTED: return TransactionIsolation::READ_UNCOMMITTED;
- default:
- ;
- }
- } catch (sql::SQLException & e) {
- mysqlc_sdbc_driver::translateAndThrow(e, *this, getConnectionEncoding());
- }
- return TransactionIsolation::NONE;
-}
-/* }}} */
-
-
-/* {{{ OConnection::getTypeMap() -I- */
-Reference<XNameAccess> SAL_CALL OConnection::getTypeMap()
- throw(SQLException, RuntimeException)
-{
- OSL_TRACE("OConnection::getTypeMap");
- MutexGuard aGuard(m_aMutex);
- checkDisposed(OConnection_BASE::rBHelper.bDisposed);
-
- Reference<XNameAccess > t;
- {
- t = m_typeMap;
- }
- return (t);
-}
-/* }}} */
-
-
-/* {{{ OConnection::setTypeMap() -I- */
-void SAL_CALL OConnection::setTypeMap(const Reference<XNameAccess >& typeMap)
- throw(SQLException, RuntimeException)
-{
- OSL_TRACE("OConnection::setTypeMap");
- MutexGuard aGuard(m_aMutex);
- checkDisposed(OConnection_BASE::rBHelper.bDisposed);
-
- m_typeMap = typeMap;
-}
-/* }}} */
-
-
-// XCloseable
-/* {{{ OConnection::close() -I- */
-void SAL_CALL OConnection::close()
- throw(SQLException, RuntimeException)
-{
- OSL_TRACE("OConnection::close");
- /*
- we need block, because the mutex is a local variable,
- which will guard the block
- */
- {
- // we just dispose us
- MutexGuard aGuard(m_aMutex);
- checkDisposed(OConnection_BASE::rBHelper.bDisposed);
- }
- dispose();
-}
-/* }}} */
-
-
-// XWarningsSupplier
-/* {{{ OConnection::getWarnings() -I- */
-Any SAL_CALL OConnection::getWarnings()
- throw(SQLException, RuntimeException)
-{
- Any x = Any();
- OSL_TRACE("OConnection::getWarnings");
- // when you collected some warnings -> return it
- return x;
-}
-/* }}} */
-
-
-/* {{{ OConnection::clearWarnings() -I- */
-void SAL_CALL OConnection::clearWarnings()
- throw(SQLException, RuntimeException)
-{
- OSL_TRACE("OConnection::clearWarnings");
- // you should clear your collected warnings here#
-}
-/* }}} */
-
-
-/* {{{ OConnection::buildTypeInfo() -I- */
-void OConnection::buildTypeInfo()
- throw(SQLException)
-{
- OSL_TRACE("OConnection::buildTypeInfo");
-}
-/* }}} */
-
-
-/* {{{ OConnection::disposing() -I- */
-void OConnection::disposing()
-{
- OSL_TRACE("OConnection::disposing");
- // we noticed that we should be destroied in near future so we have to dispose our statements
- MutexGuard aGuard(m_aMutex);
-
- for (OWeakRefArray::iterator i = m_aStatements.begin(); i != m_aStatements.end() ; ++i) {
- Reference< XComponent > xComp(i->get(), UNO_QUERY);
- if (xComp.is()) {
- xComp->dispose();
- }
- }
- m_aStatements.clear();
-
- m_bClosed = sal_True;
- m_xMetaData = WeakReference< XDatabaseMetaData >();
-
- dispose_ChildImpl();
- OConnection_BASE::disposing();
-}
-/* }}} */
-
-
-/* ToDo - upcast the connection to MySQL_Connection and use ::getSessionVariable() */
-
-/* {{{ OConnection::getMysqlVariable() -I- */
-OUString OConnection::getMysqlVariable(const char *varname)
- throw(SQLException, RuntimeException)
-{
- OSL_TRACE("OConnection::getMysqlVariable");
- MutexGuard aGuard(m_aMutex);
- checkDisposed(OConnection_BASE::rBHelper.bDisposed);
-
- OUString ret;
- ::rtl::OUStringBuffer aStatement;
- aStatement.appendAscii( "SHOW SESSION VARIABLES LIKE '" );
- aStatement.appendAscii( varname );
- aStatement.append( sal_Unicode( '\'' ) );
-
- try {
- XStatement * stmt = new OStatement(this, m_settings.cppConnection->createStatement());
- Reference< XResultSet > rs = stmt->executeQuery( aStatement.makeStringAndClear() );
- if (rs.is() && rs->next()) {
- Reference< XRow > xRow(rs, UNO_QUERY);
- ret = xRow->getString(2);
- }
- } catch (sql::SQLException & e) {
- mysqlc_sdbc_driver::translateAndThrow(e, *this, getConnectionEncoding());
- }
-
- return ret;
-}
-/* }}} */
-
-
-/* {{{ OConnection::getMysqlVersion() -I- */
-sal_Int32 OConnection::getMysqlVersion()
- throw(SQLException, RuntimeException)
-{
- OSL_TRACE("OConnection::getMysqlVersion");
- MutexGuard aGuard(m_aMutex);
- checkDisposed(OConnection_BASE::rBHelper.bDisposed);
-
- sal_Int32 version(0);
- try {
- version = 10000 * m_settings.cppConnection->getMetaData()->getDatabaseMajorVersion();
- version += 100 * m_settings.cppConnection->getMetaData()->getDatabaseMinorVersion();
- version += m_settings.cppConnection->getMetaData()->getDatabasePatchVersion();
- } catch (sql::SQLException & e) {
- mysqlc_sdbc_driver::translateAndThrow(e, *this, getConnectionEncoding());
- }
- return version;
-}
-/* }}} */
-
-
-/* {{{ OConnection::sdbcColumnType() -I- */
-// TODO: Not used
-//sal_Int32 OConnection::sdbcColumnType(OUString typeName)
-//{
-// OSL_TRACE("OConnection::sdbcColumnType");
-// int i = 0;
-// while (mysqlc_types[i].typeName) {
-// if (OUString::createFromAscii(mysqlc_types[i].typeName).equals(
-// typeName.toAsciiUpperCase()))
-// {
-// return mysqlc_types[i].dataType;
-// }
-// i++;
-// }
-// return 0;
-//}
-// -----------------------------------------------------------------------------
-::rtl::OUString OConnection::transFormPreparedStatement(const ::rtl::OUString& _sSQL)
-{
- ::rtl::OUString sSqlStatement = _sSQL;
- if ( !m_xParameterSubstitution.is() ) {
- try {
- Sequence< Any > aArgs(1);
- Reference< XConnection> xCon = this;
- aArgs[0] <<= NamedValue(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ActiveConnection")), makeAny(xCon));
-
- m_xParameterSubstitution.set(m_rDriver.getFactory()->createInstanceWithArguments(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("org.openoffice.comp.helper.ParameterSubstitution")),aArgs),UNO_QUERY);
- } catch(const Exception&) {}
- }
- if ( m_xParameterSubstitution.is() ) {
- try {
- sSqlStatement = m_xParameterSubstitution->substituteVariables(sSqlStatement,sal_True);
- } catch(const Exception&) { }
- }
- return sSqlStatement;
-}
-
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: noet sw=4 ts=4 fdm=marker
- * vim<600: noet sw=4 ts=4
- */
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */