diff options
author | Tamas Bunth <tamas.bunth@collabora.co.uk> | 2018-08-16 16:35:17 +0200 |
---|---|---|
committer | Tamás Bunth <btomi96@gmail.com> | 2018-08-24 17:19:51 +0200 |
commit | 26b40fcfc67480e75bd9959b0c5cb9db10fdf6a1 (patch) | |
tree | 0d36eda88da5d9f1a28a5b915494d08c55456a02 /mysqlc/source | |
parent | 84c02b6d9f2fbe6658b58182f57d60e2bc797016 (diff) |
Moving mysqlc into connectivity as a library
Additionally I erased the remains of the old mysql C++ connector.
Also update the code where the clang plugins were unhappy after moving
the mysqlc module.
Remove mysql-cpp-connector external.
Change-Id: I771cc7afacf5012fc349afb6b36828fb0fee5a66
Reviewed-on: https://gerrit.libreoffice.org/59200
Tested-by: Jenkins
Reviewed-by: Tamás Bunth <btomi96@gmail.com>
Diffstat (limited to 'mysqlc/source')
27 files changed, 0 insertions, 7058 deletions
diff --git a/mysqlc/source/DataAccess.xcu b/mysqlc/source/DataAccess.xcu deleted file mode 100644 index 2b652ec87649..000000000000 --- a/mysqlc/source/DataAccess.xcu +++ /dev/null @@ -1,35 +0,0 @@ -<!-- - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - --> -<oor:node xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" oor:name="DataAccess" oor:package="org.openoffice.Office"> - <node oor:name="UserDefinedDriverSettings"> - <node oor:name="org.openoffice.comp.connectivity.mysql_native.Driver" oor:op="replace"> - <prop oor:name="DriverName"> - <value>org.openoffice.comp.connectivity.mysql_native.Driver</value> - </prop> - <prop oor:name="DriverPageDisplayName"> - <value>MySQL native driver</value> - </prop> - <prop oor:name="DriverTypeDisplayName"> - <value>MySQL native driver</value> - </prop> - <prop oor:name="DriverDsnPrefix"> - <value>sdbc:mysqlc:</value> - </prop> - </node> - </node> -</oor:node> diff --git a/mysqlc/source/META-INF/manifest.xml b/mysqlc/source/META-INF/manifest.xml deleted file mode 100644 index b3a94aca14c1..000000000000 --- a/mysqlc/source/META-INF/manifest.xml +++ /dev/null @@ -1,25 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE manifest:manifest PUBLIC "-//OpenOffice.org//DTD Manifest 1.0//EN" "Manifest.dtd"> -<!-- - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - --> -<manifest:manifest xmlns:manifest="http://openoffice.org/2001/manifest"> - <manifest:file-entry manifest:media-type="application/vnd.sun.star.uno-components;platform=@PLATFORM@" - manifest:full-path="components.rdb"/> - <manifest:file-entry manifest:media-type="application/vnd.sun.star.configuration-data" - manifest:full-path="registry/data/org/openoffice/Office/DataAccess/Drivers.xcu"/> -</manifest:manifest> diff --git a/mysqlc/source/description-en-US.txt b/mysqlc/source/description-en-US.txt deleted file mode 100644 index d99ac31d4374..000000000000 --- a/mysqlc/source/description-en-US.txt +++ /dev/null @@ -1 +0,0 @@ -MySQL Connector installs a native MySQL database driver. It is faster, seamless integrated, easier to administrate and there is no need to install and setup a JDBC or ODBC driver separately. It was never easier to use MySQL databases in LibreOffice Base. diff --git a/mysqlc/source/description.xml b/mysqlc/source/description.xml deleted file mode 100644 index 7335fb5d1add..000000000000 --- a/mysqlc/source/description.xml +++ /dev/null @@ -1,40 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - --> -<description xmlns="http://openoffice.org/extensions/description/2006" xmlns:d="http://openoffice.org/extensions/description/2006" - xmlns:xlink="http://www.w3.org/1999/xlink"> - - <identifier value="com.sun.star.mysql-connector-ooo-@PLATFORM@"/> - <version value="1.0.2" /> - <platform value="@PLATFORM@" /> - <display-name> - <name lang="en-US">MySQL Connector</name> - </display-name> - <dependencies> - <OpenOffice.org-minimal-version value="3.3" d:name="OpenOffice.org 3.3"/> - </dependencies> - <publisher> - <name xlink:href="http://www.documentfoundation.org" lang="en-US">The Document Foundation</name> - </publisher> - <icon> - <default xlink:href="images/extension_32.png" /> - </icon> - <extension-description> - <src lang="en-US" xlink:href="description-en-US.txt"/> - </extension-description> -</description> diff --git a/mysqlc/source/mysqlc.component b/mysqlc/source/mysqlc.component deleted file mode 100644 index e4295110f84b..000000000000 --- a/mysqlc/source/mysqlc.component +++ /dev/null @@ -1,15 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * ---> -<component xmlns="http://openoffice.org/2010/uno-components" - loader="com.sun.star.loader.SharedLibrary"> - <implementation name="com.sun.star.comp.sdbc.mysqlc.MysqlCDriver"> - <service name="com.sun.star.sdbc.Driver"/> - </implementation> -</component> diff --git a/mysqlc/source/mysqlc_connection.cxx b/mysqlc/source/mysqlc_connection.cxx deleted file mode 100644 index 1b3169845e19..000000000000 --- a/mysqlc/source/mysqlc_connection.cxx +++ /dev/null @@ -1,537 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#include <memory> -#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; - - -#define MYSQLC_URI_PREFIX "sdbc:mysqlc:" - - -namespace -{ - void lcl_executeUpdate(MYSQL* pMySql, const rtl::OString& sql) - { - mysql_real_query(pMySql, sql.getStr(), sql.getLength()); - // TODO handle error - } -} - -OConnection::OConnection(MysqlCDriver& _rDriver) - :OMetaConnection_BASE(m_aMutex) - ,m_xMetaData(nullptr) - ,m_xDriver(&_rDriver) -{ - mysql_init(&m_mysql); - - // use TCP as connection - mysql_protocol_type protocol = MYSQL_PROTOCOL_TCP; - mysql_options(&m_mysql, MYSQL_OPT_PROTOCOL, &protocol); -} - -OConnection::~OConnection() -{ - if (!isClosed()) { - close(); - } -} - -void OConnection::construct(const rtl::OUString& url, const Sequence< PropertyValue >& info) -{ - MutexGuard aGuard(m_aMutex); - - sal_Int32 nIndex; - bool bEmbedded = false; - rtl::OUString token; - rtl::OUString aHostName("localhost"); - sal_Int32 nPort = 3306; - rtl::OUString aDbName; - - m_settings.encoding = MysqlCDriver::getDefaultEncoding(); - - // parse url. Url has the following format: - // external server: sdbc:mysqlc:[hostname]:[port]/[dbname] - - if (url.startsWith(MYSQLC_URI_PREFIX)) { - nIndex = 12; - } else { - bEmbedded = true; - nIndex = 20; - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OConnection::construct (embedded MySQL)", *this); - } - - token = url.getToken(0, '/', nIndex); - if (!token.isEmpty()) { - sal_Int32 nIndex1 = 0; - rtl::OUString hostandport = token.getToken(0,':', nIndex1); - if (!hostandport.isEmpty()) { - aHostName = hostandport; - hostandport = token.getToken(0, ':', nIndex1); - if (!hostandport.isEmpty() && nIndex1) { - nPort = hostandport.toInt32(); - } - token = url.getToken(0, '/', nIndex); - if (!token.isEmpty() && nIndex) { - aDbName = token; - } - } - } - - // get user and password for mysql connection - const PropertyValue *pIter = info.getConstArray(); - const PropertyValue *pEnd = pIter + info.getLength(); - rtl::OUString aUser, aPass, sUnixSocket, sNamedPipe; - bool unixSocketPassed = false; - bool namedPipePassed = false; - - m_settings.connectionURL = url; - for (;pIter != pEnd;++pIter) { - if (pIter->Name.equalsAscii("user")) { - OSL_VERIFY( pIter->Value >>= aUser ); - } else if (pIter->Name.equalsAscii("password")) { - OSL_VERIFY( pIter->Value >>= aPass ); - } else if (pIter->Name.equalsAscii("LocalSocket")) { - OSL_VERIFY( pIter->Value >>= sUnixSocket ); - unixSocketPassed = !sUnixSocket.isEmpty(); - } else if (pIter->Name.equalsAscii("NamedPipe")) { - OSL_VERIFY( pIter->Value >>= sNamedPipe ); - namedPipePassed = !sNamedPipe.isEmpty(); - } else if ( pIter->Name.equalsAscii("PublicConnectionURL")) { - OSL_VERIFY( pIter->Value >>= m_settings.connectionURL ); - } else if ( pIter->Name.equalsAscii("NewURL")) { // legacy name for "PublicConnectionURL" - OSL_VERIFY( pIter->Value >>= m_settings.connectionURL ); - } - } - - if (!bEmbedded) { - rtl::OString host_str = rtl::OUStringToOString(aHostName, m_settings.encoding); - rtl::OString user_str = rtl::OUStringToOString(aUser, m_settings.encoding); - rtl::OString pass_str = rtl::OUStringToOString(aPass, m_settings.encoding); - rtl::OString schema_str = rtl::OUStringToOString(aDbName, m_settings.encoding); - rtl::OString socket_str; - if (unixSocketPassed) { - socket_str = rtl::OUStringToOString(sUnixSocket, m_settings.encoding); - } else if (namedPipePassed) { - socket_str = rtl::OUStringToOString(sNamedPipe, m_settings.encoding); - } - - // flags can also be passed as last parameter - if(!mysql_real_connect(&m_mysql, host_str.getStr(), user_str.getStr(), - pass_str.getStr(), schema_str.getStr(), nPort, socket_str.getStr(), 0)) - mysqlc_sdbc_driver::throwSQLExceptionWithMsg(mysql_error(&m_mysql), - mysql_errno(&m_mysql),*this, getConnectionEncoding()); - } else { - // TODO: support for embedded server - } - - m_settings.schema = aDbName; - - // Check if the server is 4.1 or above - if (getMysqlVersion() < 40100) { - throw SQLException( - "MariaDB LibreOffice Connector requires MySQL Server 4.1 or above", - *this, - rtl::OUString(), - 0, - Any()); - } - - lcl_executeUpdate(&m_mysql, rtl::OString{"SET session sql_mode='ANSI_QUOTES'"}); - lcl_executeUpdate(&m_mysql, rtl::OString{"SET NAMES utf8"}); -} - -rtl::OUString OConnection::getImplementationName() -{ - return rtl::OUString("com.sun.star.sdbc.drivers.mysqlc.OConnection"); -} - -css::uno::Sequence<rtl::OUString> OConnection::getSupportedServiceNames() -{ - css::uno::Sequence<rtl::OUString> s(1); - s[0] = "com.sun.star.sdbc.Connection"; - return s; -} - -sal_Bool OConnection::supportsService(rtl::OUString const & ServiceName) -{ - return cppu::supportsService(this, ServiceName); -} - -Reference< XStatement > SAL_CALL 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_aStatements.push_back(WeakReferenceHelper(xReturn)); - return xReturn; - } catch (const sql::SQLException & e) { - mysqlc_sdbc_driver::translateAndThrow(e, *this, getConnectionEncoding()); - } - return xReturn; -} - -Reference< XPreparedStatement > SAL_CALL OConnection::prepareStatement(const rtl::OUString& _sSql) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OConnection_BASE::rBHelper.bDisposed); - const rtl::OString sSqlStatement = rtl::OUStringToOString( - _sSql, getConnectionEncoding()); // FIXME transform statement ? - - MYSQL_STMT* pStmt = mysql_stmt_init(&m_mysql); - mysql_stmt_prepare(pStmt, sSqlStatement.getStr(), sSqlStatement.getLength()); - - unsigned int nErrorNum = mysql_errno(&m_mysql); - if(nErrorNum != 0) - mysqlc_sdbc_driver::throwSQLExceptionWithMsg(mysql_error(&m_mysql), - nErrorNum,*this, getConnectionEncoding()); - - Reference< XPreparedStatement > xStatement; - xStatement = new OPreparedStatement(this, pStmt); - m_aStatements.push_back( WeakReferenceHelper( xStatement ) ); - return xStatement; -} - -Reference< XPreparedStatement > SAL_CALL OConnection::prepareCall(const rtl::OUString& /*_sSql*/ ) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OConnection_BASE::rBHelper.bDisposed); - - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OConnection::prepareCall", *this); - return Reference< XPreparedStatement >(); -} - -rtl::OUString SAL_CALL OConnection::nativeSQL(const rtl::OUString& _sSql) -{ - 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 (const sql::SQLException & e) { - mysqlc_sdbc_driver::translateAndThrow(e, *this, getConnectionEncoding()); - } - return sNativeSQL; -} - -void SAL_CALL OConnection::setAutoCommit(sal_Bool autoCommit) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OConnection_BASE::rBHelper.bDisposed); - if(!mysql_autocommit(&m_mysql, autoCommit)) - mysqlc_sdbc_driver::throwSQLExceptionWithMsg(mysql_error(&m_mysql), mysql_errno(&m_mysql), *this, getConnectionEncoding()); -} - -sal_Bool SAL_CALL OConnection::getAutoCommit() -{ - // you have to distinguish which if you are in autocommit mode or not - // at normal case true should be fine here - - // TODO use SELECT @@autocommit query for that - MutexGuard aGuard(m_aMutex); - checkDisposed(OConnection_BASE::rBHelper.bDisposed); - - bool autoCommit = false; - try { - autoCommit = m_settings.cppConnection->getAutoCommit(); - } catch (const sql::SQLException & e) { - mysqlc_sdbc_driver::translateAndThrow(e, *this, getConnectionEncoding()); - } - return autoCommit; -} - -void SAL_CALL OConnection::commit() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OConnection_BASE::rBHelper.bDisposed); - - if(!mysql_commit(&m_mysql)) - mysqlc_sdbc_driver::throwSQLExceptionWithMsg(mysql_error(&m_mysql), mysql_errno(&m_mysql), *this, getConnectionEncoding()); -} - -void SAL_CALL OConnection::rollback() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OConnection_BASE::rBHelper.bDisposed); - - if(!mysql_rollback(&m_mysql)) - mysqlc_sdbc_driver::throwSQLExceptionWithMsg(mysql_error(&m_mysql), mysql_errno(&m_mysql), *this, getConnectionEncoding()); -} - -sal_Bool SAL_CALL OConnection::isClosed() -{ - MutexGuard aGuard(m_aMutex); - - // just simple -> we are close when we are disposed that means someone called dispose(); (XComponent) - return OConnection_BASE::rBHelper.bDisposed; -} - -Reference< XDatabaseMetaData > SAL_CALL OConnection::getMetaData() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OConnection_BASE::rBHelper.bDisposed); - - Reference< XDatabaseMetaData > xMetaData = m_xMetaData; - if (!xMetaData.is()) - { - xMetaData = new ODatabaseMetaData(*this, &m_mysql); - m_xMetaData = xMetaData; - } - - return xMetaData; -} - -void SAL_CALL OConnection::setReadOnly(sal_Bool readOnly) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OConnection_BASE::rBHelper.bDisposed); - - m_settings.readOnly = readOnly; -} - -sal_Bool SAL_CALL OConnection::isReadOnly() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OConnection_BASE::rBHelper.bDisposed); - - // return if your connection to readonly - return m_settings.readOnly; -} - -void SAL_CALL OConnection::setCatalog(const rtl::OUString& catalog) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OConnection_BASE::rBHelper.bDisposed); - - // TODO How? - try { -// m_settings.cppConnection->setCatalog(rtl::OUStringToOString(catalog, m_settings.encoding).getStr()); - m_settings.cppConnection->setSchema(rtl::OUStringToOString(catalog, getConnectionEncoding()).getStr()); - } catch (sql::SQLException & e) { - mysqlc_sdbc_driver::translateAndThrow(e, *this, getConnectionEncoding()); - } -} - -rtl::OUString SAL_CALL OConnection::getCatalog() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OConnection_BASE::rBHelper.bDisposed); - - // TODO How? - rtl::OUString catalog; - try { - catalog = mysqlc_sdbc_driver::convert(m_settings.cppConnection->getSchema(), getConnectionEncoding()); - } catch (const sql::SQLException & e) { - mysqlc_sdbc_driver::translateAndThrow(e, *this, getConnectionEncoding()); - } - return catalog; -} - -void SAL_CALL OConnection::setTransactionIsolation(sal_Int32 level) -{ - 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 (const sql::SQLException & e) { - mysqlc_sdbc_driver::translateAndThrow(e, *this, getConnectionEncoding()); - } -} - -sal_Int32 SAL_CALL 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 (const sql::SQLException & e) { - mysqlc_sdbc_driver::translateAndThrow(e, *this, getConnectionEncoding()); - } - return TransactionIsolation::NONE; -} - -Reference<XNameAccess> SAL_CALL OConnection::getTypeMap() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OConnection_BASE::rBHelper.bDisposed); - - Reference<XNameAccess > t = m_typeMap; - return t; -} - -void SAL_CALL OConnection::setTypeMap(const Reference<XNameAccess >& typeMap) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OConnection_BASE::rBHelper.bDisposed); - - m_typeMap = typeMap; -} - -// XCloseable -void SAL_CALL 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); - } - mysql_close(&m_mysql); - dispose(); -} - -// XWarningsSupplier -Any SAL_CALL OConnection::getWarnings() -{ - Any x = Any(); - // when you collected some warnings -> return it - return x; -} - -void SAL_CALL OConnection::clearWarnings() -{ - // you should clear your collected warnings here# -} - -void OConnection::disposing() -{ - // we noticed that we should be destroyed in near future so we have to dispose our statements - MutexGuard aGuard(m_aMutex); - - for (auto const& statement : m_aStatements) - { - Reference< XComponent > xComp(statement.get(), UNO_QUERY); - if (xComp.is()) { - xComp->dispose(); - } - } - m_aStatements.clear(); - - m_xMetaData = WeakReference< XDatabaseMetaData >(); - - OConnection_BASE::disposing(); -} - -sal_Int32 OConnection::getMysqlVersion() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OConnection_BASE::rBHelper.bDisposed); - - unsigned long version = mysql_get_server_version(&m_mysql); - return static_cast<sal_Int32>(version); -} - -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("ActiveConnection"), makeAny(xCon)); - - m_xParameterSubstitution.set(m_xDriver->getFactory()->createInstanceWithArguments("org.openoffice.comp.helper.ParameterSubstitution",aArgs),UNO_QUERY); - } catch(const Exception&) {} - } - if ( m_xParameterSubstitution.is() ) { - try { - sSqlStatement = m_xParameterSubstitution->substituteVariables(sSqlStatement,true); - } catch(const Exception&) { } - } - return sSqlStatement; -} - - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/mysqlc/source/mysqlc_connection.hxx b/mysqlc/source/mysqlc_connection.hxx deleted file mode 100644 index 72af3c89e886..000000000000 --- a/mysqlc/source/mysqlc_connection.hxx +++ /dev/null @@ -1,191 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef INCLUDED_MYSQLC_SOURCE_MYSQLC_CONNECTION_HXX -#define INCLUDED_MYSQLC_SOURCE_MYSQLC_CONNECTION_HXX - -#include <memory> -#include "mysqlc_subcomponent.hxx" -#include "mysqlc_types.hxx" - -#include <com/sun/star/beans/PropertyValue.hpp> -#include <com/sun/star/lang/DisposedException.hpp> -#include <com/sun/star/lang/XServiceInfo.hpp> -#include <com/sun/star/lang/XUnoTunnel.hpp> -#include <com/sun/star/sdbc/ColumnSearch.hpp> -#include <com/sun/star/sdbc/ColumnValue.hpp> -#include <com/sun/star/sdbc/DataType.hpp> -#include <com/sun/star/sdbc/SQLWarning.hpp> -#include <com/sun/star/sdbc/XConnection.hpp> -#include <com/sun/star/sdbc/XWarningsSupplier.hpp> -#include <com/sun/star/util/XStringSubstitution.hpp> - -#include <cppconn/driver.h> - -#include <cppuhelper/compbase3.hxx> -#include <cppuhelper/weakref.hxx> -#include <rtl/string.hxx> -#include <rtl/ref.hxx> - -#include <mysql.h> - -#include <map> - - -namespace sql -{ - class SQLException; -} - -namespace connectivity -{ - class OMetaConnection; - class ODatabaseMetaData; - - namespace mysqlc - { - using ::com::sun::star::sdbc::SQLWarning; - using ::com::sun::star::sdbc::SQLException; - using ::com::sun::star::uno::RuntimeException; - typedef css::uno::Reference< css::container::XNameAccess > my_XNameAccessRef; - - typedef ::cppu::WeakComponentImplHelper3< css::sdbc::XConnection, - css::sdbc::XWarningsSupplier, - css::lang::XServiceInfo - > OMetaConnection_BASE; - struct ConnectionSettings - { - rtl_TextEncoding encoding; - std::unique_ptr<sql::Connection> cppConnection; - rtl::OUString schema; - rtl::OUString connectionURL; - bool readOnly; - }; - - class MysqlCDriver; - - typedef OMetaConnection_BASE OConnection_BASE; - - typedef std::vector< css::uno::WeakReferenceHelper > OWeakRefArray; - - class OConnection final : public OBase_Mutex, - public OConnection_BASE - { - private: - MYSQL m_mysql; - ConnectionSettings m_settings; - css::uno::Reference< css::container::XNameAccess > m_typeMap; - css::uno::Reference< css::util::XStringSubstitution > m_xParameterSubstitution; - - // Data attributes - - css::uno::WeakReference< css::sdbc::XDatabaseMetaData > m_xMetaData; - - OWeakRefArray m_aStatements; // vector containing a list - // of all the Statement objects - // for this Connection - - rtl::Reference<MysqlCDriver> m_xDriver; // Pointer to the owning driver object - public: - MYSQL* getMysqlConnection() { return &m_mysql; } - - /// @throws SQLException - /// @throws RuntimeException - sal_Int32 getMysqlVersion(); - - /// @throws SQLException - void construct(const rtl::OUString& url,const css::uno::Sequence< css::beans::PropertyValue >& info); - - OConnection(MysqlCDriver& _rDriver ); - virtual ~OConnection(); - - rtl_TextEncoding getConnectionEncoding() const { return m_settings.encoding; } - - - // OComponentHelper - virtual void SAL_CALL disposing() SAL_OVERRIDE; - - // XServiceInfo - virtual rtl::OUString SAL_CALL getImplementationName() SAL_OVERRIDE; - - virtual sal_Bool SAL_CALL supportsService( - rtl::OUString const & ServiceName) - SAL_OVERRIDE; - - virtual css::uno::Sequence<rtl::OUString> SAL_CALL - getSupportedServiceNames() - SAL_OVERRIDE; - - // XConnection - css::uno::Reference< css::sdbc::XStatement > SAL_CALL createStatement() SAL_OVERRIDE; - - css::uno::Reference< css::sdbc::XPreparedStatement > SAL_CALL prepareStatement(const rtl::OUString& sql) SAL_OVERRIDE; - - css::uno::Reference< css::sdbc::XPreparedStatement > SAL_CALL prepareCall(const rtl::OUString& sql) SAL_OVERRIDE; - - rtl::OUString SAL_CALL nativeSQL(const rtl::OUString& sql) SAL_OVERRIDE; - - void SAL_CALL setAutoCommit(sal_Bool autoCommit) SAL_OVERRIDE; - - sal_Bool SAL_CALL getAutoCommit() SAL_OVERRIDE; - - void SAL_CALL commit() SAL_OVERRIDE; - - void SAL_CALL rollback() SAL_OVERRIDE; - - sal_Bool SAL_CALL isClosed() SAL_OVERRIDE; - - css::uno::Reference< css::sdbc::XDatabaseMetaData > SAL_CALL getMetaData() SAL_OVERRIDE; - - void SAL_CALL setReadOnly(sal_Bool readOnly) SAL_OVERRIDE; - - sal_Bool SAL_CALL isReadOnly() SAL_OVERRIDE; - - void SAL_CALL setCatalog(const rtl::OUString& catalog) SAL_OVERRIDE; - - rtl::OUString SAL_CALL getCatalog() SAL_OVERRIDE; - - void SAL_CALL setTransactionIsolation(sal_Int32 level) SAL_OVERRIDE; - - sal_Int32 SAL_CALL getTransactionIsolation() SAL_OVERRIDE; - - my_XNameAccessRef SAL_CALL getTypeMap() SAL_OVERRIDE; - - void SAL_CALL setTypeMap(const my_XNameAccessRef& typeMap) SAL_OVERRIDE; - // XCloseable - void SAL_CALL close() SAL_OVERRIDE; - // XWarningsSupplier - css::uno::Any SAL_CALL getWarnings() SAL_OVERRIDE; - void SAL_CALL clearWarnings() SAL_OVERRIDE; - - // TODO: Not used - //sal_Int32 sdbcColumnType(rtl::OUString typeName); - const ConnectionSettings& getConnectionSettings() const { return m_settings; } - rtl::OUString transFormPreparedStatement(const rtl::OUString& _sSQL); - - const MysqlCDriver& getDriver() const { return *m_xDriver.get();} - - }; /* OConnection */ - // TODO: Not used. - //inline rtl::OUString getPattern(rtl::OUString p) { return (p.getLength()) ? p : ASC2OU("%"); } - } /* mysqlc */ -} /* connectivity */ -#endif // INCLUDED_MYSQLC_SOURCE_MYSQLC_CONNECTION_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/mysqlc/source/mysqlc_databasemetadata.hxx b/mysqlc/source/mysqlc_databasemetadata.hxx deleted file mode 100644 index 3801acadc4a7..000000000000 --- a/mysqlc/source/mysqlc_databasemetadata.hxx +++ /dev/null @@ -1,219 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef INCLUDED_MYSQLC_SOURCE_MYSQLC_DATABASEMETADATA_HXX -#define INCLUDED_MYSQLC_SOURCE_MYSQLC_DATABASEMETADATA_HXX - -#include "mysqlc_connection.hxx" - -#include <com/sun/star/sdbc/XDatabaseMetaData.hpp> -#include <cppuhelper/implbase1.hxx> - -#include <cppconn/metadata.h> - -namespace connectivity -{ - namespace mysqlc - { - using ::com::sun::star::uno::Any; - - - //************ Class: ODatabaseMetaData - - - typedef ::cppu::WeakImplHelper1< css::sdbc::XDatabaseMetaData> ODatabaseMetaData_BASE; - - class ODatabaseMetaData final : public ODatabaseMetaData_BASE - { - OConnection& m_rConnection; - MYSQL * m_pMySql; - rtl::OUString identifier_quote_string; - bool identifier_quote_string_set; - - rtl::OUString impl_getStringMetaData( const sal_Char* _methodName, const sql::SQLString& (sql::DatabaseMetaData::*Method)() ); - rtl::OUString impl_getStringMetaData( const sal_Char* _methodName, sql::SQLString (sql::DatabaseMetaData::*Method)() ); - sal_Int32 impl_getInt32MetaData( const sal_Char* _methodName, unsigned int (sql::DatabaseMetaData::*Method)() ); - bool impl_getBoolMetaData( const sal_Char* _methodName, bool (sql::DatabaseMetaData::*Method)() ); - bool impl_getBoolMetaData( const sal_Char* _methodName, bool (sql::DatabaseMetaData::*Method)(int), sal_Int32 _arg ); - bool impl_getRSTypeMetaData( const sal_Char* _methodName, bool (sql::DatabaseMetaData::*Method)(int), sal_Int32 _resultSetType ); - - public: - const OConnection& getOwnConnection() const { return m_rConnection; } - - explicit ODatabaseMetaData(OConnection& _rCon, MYSQL* pMySql); - virtual ~ODatabaseMetaData(); - - // as I mentioned before this interface is really BIG - // XDatabaseMetaData - sal_Bool SAL_CALL allProceduresAreCallable() SAL_OVERRIDE; - sal_Bool SAL_CALL allTablesAreSelectable() SAL_OVERRIDE; - rtl::OUString SAL_CALL getURL() SAL_OVERRIDE; - rtl::OUString SAL_CALL getUserName() SAL_OVERRIDE; - sal_Bool SAL_CALL isReadOnly() SAL_OVERRIDE; - sal_Bool SAL_CALL nullsAreSortedHigh() SAL_OVERRIDE; - sal_Bool SAL_CALL nullsAreSortedLow() SAL_OVERRIDE; - sal_Bool SAL_CALL nullsAreSortedAtStart() SAL_OVERRIDE; - sal_Bool SAL_CALL nullsAreSortedAtEnd() SAL_OVERRIDE; - rtl::OUString SAL_CALL getDatabaseProductName() SAL_OVERRIDE; - rtl::OUString SAL_CALL getDatabaseProductVersion() SAL_OVERRIDE; - rtl::OUString SAL_CALL getDriverName() SAL_OVERRIDE; - rtl::OUString SAL_CALL getDriverVersion() SAL_OVERRIDE; - sal_Int32 SAL_CALL getDriverMajorVersion() SAL_OVERRIDE; - sal_Int32 SAL_CALL getDriverMinorVersion() SAL_OVERRIDE; - sal_Bool SAL_CALL usesLocalFiles() SAL_OVERRIDE; - sal_Bool SAL_CALL usesLocalFilePerTable() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsMixedCaseIdentifiers() SAL_OVERRIDE; - sal_Bool SAL_CALL storesUpperCaseIdentifiers() SAL_OVERRIDE; - sal_Bool SAL_CALL storesLowerCaseIdentifiers() SAL_OVERRIDE; - sal_Bool SAL_CALL storesMixedCaseIdentifiers() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsMixedCaseQuotedIdentifiers() SAL_OVERRIDE; - sal_Bool SAL_CALL storesUpperCaseQuotedIdentifiers() SAL_OVERRIDE; - sal_Bool SAL_CALL storesLowerCaseQuotedIdentifiers() SAL_OVERRIDE; - sal_Bool SAL_CALL storesMixedCaseQuotedIdentifiers() SAL_OVERRIDE; - rtl::OUString SAL_CALL getIdentifierQuoteString() SAL_OVERRIDE; - rtl::OUString SAL_CALL getSQLKeywords() SAL_OVERRIDE; - rtl::OUString SAL_CALL getNumericFunctions() SAL_OVERRIDE; - rtl::OUString SAL_CALL getStringFunctions() SAL_OVERRIDE; - rtl::OUString SAL_CALL getSystemFunctions() SAL_OVERRIDE; - rtl::OUString SAL_CALL getTimeDateFunctions() SAL_OVERRIDE; - rtl::OUString SAL_CALL getSearchStringEscape() SAL_OVERRIDE; - rtl::OUString SAL_CALL getExtraNameCharacters() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsAlterTableWithAddColumn() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsAlterTableWithDropColumn() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsColumnAliasing() SAL_OVERRIDE; - sal_Bool SAL_CALL nullPlusNonNullIsNull() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsTypeConversion() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsConvert(sal_Int32 fromType, sal_Int32 toType) SAL_OVERRIDE; - sal_Bool SAL_CALL supportsTableCorrelationNames() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsDifferentTableCorrelationNames() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsExpressionsInOrderBy() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsOrderByUnrelated() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsGroupBy() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsGroupByUnrelated() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsGroupByBeyondSelect() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsLikeEscapeClause() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsMultipleResultSets() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsMultipleTransactions() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsNonNullableColumns() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsMinimumSQLGrammar() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsCoreSQLGrammar() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsExtendedSQLGrammar() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsANSI92EntryLevelSQL() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsANSI92IntermediateSQL() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsANSI92FullSQL() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsIntegrityEnhancementFacility() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsOuterJoins() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsFullOuterJoins() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsLimitedOuterJoins() SAL_OVERRIDE; - rtl::OUString SAL_CALL getSchemaTerm() SAL_OVERRIDE; - rtl::OUString SAL_CALL getProcedureTerm() SAL_OVERRIDE; - rtl::OUString SAL_CALL getCatalogTerm() SAL_OVERRIDE; - sal_Bool SAL_CALL isCatalogAtStart() SAL_OVERRIDE; - rtl::OUString SAL_CALL getCatalogSeparator() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsSchemasInDataManipulation() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsSchemasInProcedureCalls() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsSchemasInTableDefinitions() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsSchemasInIndexDefinitions() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsSchemasInPrivilegeDefinitions() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsCatalogsInDataManipulation() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsCatalogsInProcedureCalls() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsCatalogsInTableDefinitions() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsCatalogsInIndexDefinitions() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsCatalogsInPrivilegeDefinitions() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsPositionedDelete() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsPositionedUpdate() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsSelectForUpdate() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsStoredProcedures() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsSubqueriesInComparisons() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsSubqueriesInExists() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsSubqueriesInIns() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsSubqueriesInQuantifieds() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsCorrelatedSubqueries() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsUnion() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsUnionAll() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsOpenCursorsAcrossCommit() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsOpenCursorsAcrossRollback() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsOpenStatementsAcrossCommit() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsOpenStatementsAcrossRollback() SAL_OVERRIDE; - sal_Int32 SAL_CALL getMaxBinaryLiteralLength() SAL_OVERRIDE; - sal_Int32 SAL_CALL getMaxCharLiteralLength() SAL_OVERRIDE; - sal_Int32 SAL_CALL getMaxColumnNameLength() SAL_OVERRIDE; - sal_Int32 SAL_CALL getMaxColumnsInGroupBy() SAL_OVERRIDE; - sal_Int32 SAL_CALL getMaxColumnsInIndex() SAL_OVERRIDE; - sal_Int32 SAL_CALL getMaxColumnsInOrderBy() SAL_OVERRIDE; - sal_Int32 SAL_CALL getMaxColumnsInSelect() SAL_OVERRIDE; - sal_Int32 SAL_CALL getMaxColumnsInTable() SAL_OVERRIDE; - sal_Int32 SAL_CALL getMaxConnections() SAL_OVERRIDE; - sal_Int32 SAL_CALL getMaxCursorNameLength() SAL_OVERRIDE; - sal_Int32 SAL_CALL getMaxIndexLength() SAL_OVERRIDE; - sal_Int32 SAL_CALL getMaxSchemaNameLength() SAL_OVERRIDE; - sal_Int32 SAL_CALL getMaxProcedureNameLength() SAL_OVERRIDE; - sal_Int32 SAL_CALL getMaxCatalogNameLength() SAL_OVERRIDE; - sal_Int32 SAL_CALL getMaxRowSize() SAL_OVERRIDE; - sal_Bool SAL_CALL doesMaxRowSizeIncludeBlobs() SAL_OVERRIDE; - sal_Int32 SAL_CALL getMaxStatementLength() SAL_OVERRIDE; - sal_Int32 SAL_CALL getMaxStatements() SAL_OVERRIDE; - sal_Int32 SAL_CALL getMaxTableNameLength() SAL_OVERRIDE; - sal_Int32 SAL_CALL getMaxTablesInSelect() SAL_OVERRIDE; - sal_Int32 SAL_CALL getMaxUserNameLength() SAL_OVERRIDE; - sal_Int32 SAL_CALL getDefaultTransactionIsolation() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsTransactions() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsTransactionIsolationLevel(sal_Int32 level) SAL_OVERRIDE; - sal_Bool SAL_CALL supportsDataDefinitionAndDataManipulationTransactions() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsDataManipulationTransactionsOnly() SAL_OVERRIDE; - sal_Bool SAL_CALL dataDefinitionCausesTransactionCommit() SAL_OVERRIDE; - sal_Bool SAL_CALL dataDefinitionIgnoredInTransactions() SAL_OVERRIDE; - css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getProcedures(const Any& catalog, const rtl::OUString& schemaPattern, const rtl::OUString& procedureNamePattern) SAL_OVERRIDE; - css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getProcedureColumns(const Any& catalog, const rtl::OUString& schemaPattern, const rtl::OUString& procedureNamePattern, const rtl::OUString& columnNamePattern) SAL_OVERRIDE; - css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getTables(const Any& catalog, const rtl::OUString& schemaPattern, const rtl::OUString& tableNamePattern, const css::uno::Sequence< rtl::OUString >& types) SAL_OVERRIDE; - css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getSchemas() SAL_OVERRIDE; - css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getCatalogs() SAL_OVERRIDE; - css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getTableTypes() SAL_OVERRIDE; - css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getColumns(const Any& catalog, const rtl::OUString& schemaPattern, const rtl::OUString& tableNamePattern, const rtl::OUString& columnNamePattern) SAL_OVERRIDE; - css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getColumnPrivileges(const Any& catalog, const rtl::OUString& schema, const rtl::OUString& table, const rtl::OUString& columnNamePattern) SAL_OVERRIDE; - css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getTablePrivileges(const Any& catalog, const rtl::OUString& schemaPattern, const rtl::OUString& tableNamePattern) SAL_OVERRIDE; - css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getBestRowIdentifier(const Any& catalog, const rtl::OUString& schema, const rtl::OUString& table, sal_Int32 scope, sal_Bool nullable) SAL_OVERRIDE; - css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getVersionColumns(const Any& catalog, const rtl::OUString& schema, const rtl::OUString& table) SAL_OVERRIDE; - css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getPrimaryKeys(const Any& catalog, const rtl::OUString& schema, const rtl::OUString& table) SAL_OVERRIDE; - css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getImportedKeys(const Any& catalog, const rtl::OUString& schema, const rtl::OUString& table) SAL_OVERRIDE; - css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getExportedKeys(const Any& catalog, const rtl::OUString& schema, const rtl::OUString& table) SAL_OVERRIDE; - css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getCrossReference(const Any& primaryCatalog, const rtl::OUString& primarySchema, const rtl::OUString& primaryTable, const Any& foreignCatalog, const rtl::OUString& foreignSchema, const rtl::OUString& foreignTable) SAL_OVERRIDE; - css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getTypeInfo() SAL_OVERRIDE; - css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getIndexInfo(const Any& catalog, const rtl::OUString& schema, const rtl::OUString& table, sal_Bool unique, sal_Bool approximate) SAL_OVERRIDE; - sal_Bool SAL_CALL supportsResultSetType(sal_Int32 setType) SAL_OVERRIDE; - sal_Bool SAL_CALL supportsResultSetConcurrency(sal_Int32 setType, sal_Int32 concurrency) SAL_OVERRIDE; - sal_Bool SAL_CALL ownUpdatesAreVisible(sal_Int32 setType) SAL_OVERRIDE; - sal_Bool SAL_CALL ownDeletesAreVisible(sal_Int32 setType) SAL_OVERRIDE; - sal_Bool SAL_CALL ownInsertsAreVisible(sal_Int32 setType) SAL_OVERRIDE; - sal_Bool SAL_CALL othersUpdatesAreVisible(sal_Int32 setType) SAL_OVERRIDE; - sal_Bool SAL_CALL othersDeletesAreVisible(sal_Int32 setType) SAL_OVERRIDE; - sal_Bool SAL_CALL othersInsertsAreVisible(sal_Int32 setType) SAL_OVERRIDE; - sal_Bool SAL_CALL updatesAreDetected(sal_Int32 setType) SAL_OVERRIDE; - sal_Bool SAL_CALL deletesAreDetected(sal_Int32 setType) SAL_OVERRIDE; - sal_Bool SAL_CALL insertsAreDetected(sal_Int32 setType) SAL_OVERRIDE; - sal_Bool SAL_CALL supportsBatchUpdates() SAL_OVERRIDE; - css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getUDTs(const Any& catalog, const rtl::OUString& schemaPattern, const rtl::OUString& typeNamePattern, const css::uno::Sequence< sal_Int32 >& types) SAL_OVERRIDE; - css::uno::Reference< css::sdbc::XConnection > SAL_CALL getConnection() SAL_OVERRIDE; - }; - } -} - -#endif // INCLUDED_MYSQLC_SOURCE_MYSQLC_DATABASEMETADATA_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/mysqlc/source/mysqlc_driver.cxx b/mysqlc/source/mysqlc_driver.cxx deleted file mode 100644 index 40cab769e912..000000000000 --- a/mysqlc/source/mysqlc_driver.cxx +++ /dev/null @@ -1,283 +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_driver.hxx" -#include "mysqlc_connection.hxx" -#include "mysqlc_general.hxx" - -using namespace com::sun::star::uno; -using namespace com::sun::star::lang; -using namespace com::sun::star::beans; -using namespace com::sun::star::sdbc; -using namespace connectivity::mysqlc; - -#include <cppuhelper/supportsservice.hxx> -#include <stdio.h> - -#include <cppconn/exception.h> -#ifdef SYSTEM_MYSQL_CPPCONN - #include <mysql_driver.h> -#endif - -MysqlCDriver::MysqlCDriver(const Reference< XMultiServiceFactory >& _rxFactory) - : ODriver_BASE(m_aMutex) - ,m_xFactory(_rxFactory) -#ifndef SYSTEM_MYSQL_CPPCONN - ,m_hCppConnModule( nullptr ) - ,m_bAttemptedLoadCppConn( false ) -#endif -{ - cppDriver = nullptr; -} - -void MysqlCDriver::disposing() -{ - ::osl::MutexGuard aGuard(m_aMutex); - - // when driver will be destroyed so all our connections have to be destroyed as well - for (auto const& connection : m_xConnections) - { - Reference< XComponent > xComp(connection.get(), UNO_QUERY); - if (xComp.is()) { - xComp->dispose(); - } - } - m_xConnections.clear(); - - ODriver_BASE::disposing(); -} - -// static ServiceInfo -rtl::OUString MysqlCDriver::getImplementationName_Static() -{ - return rtl::OUString( "com.sun.star.comp.sdbc.mysqlc.MysqlCDriver" ); -} - -Sequence< rtl::OUString > MysqlCDriver::getSupportedServiceNames_Static() -{ - // which service is supported - // for more information @see com.sun.star.sdbc.Driver - Sequence< rtl::OUString > aSNS(1); - aSNS[0] = "com.sun.star.sdbc.Driver"; - return aSNS; -} - -rtl::OUString SAL_CALL MysqlCDriver::getImplementationName() -{ - return getImplementationName_Static(); -} - -sal_Bool SAL_CALL MysqlCDriver::supportsService(const rtl::OUString& _rServiceName) -{ - return cppu::supportsService(this, _rServiceName); -} - -Sequence< rtl::OUString > SAL_CALL MysqlCDriver::getSupportedServiceNames() -{ - return getSupportedServiceNames_Static(); -} - -#ifndef SYSTEM_MYSQL_CPPCONN -extern "C" { static void thisModule() {} } -#endif - -void MysqlCDriver::impl_initCppConn_lck_throw() -{ -#ifdef SYSTEM_MYSQL_CPPCONN - cppDriver = get_driver_instance(); -#else -#ifdef BUNDLE_MARIADB - if ( !m_bAttemptedLoadCConn ) - { - const rtl::OUString sModuleName(BUNDLE_MARIADB); - m_hCConnModule = osl_loadModuleRelative( &thisModule, sModuleName.pData, 0 ); - m_bAttemptedLoadCConn = true; - } - - // attempted to load - was it successful? - if ( !m_hCConnModule ) - { - OSL_FAIL( "MysqlCDriver::impl_initCppConn_lck_throw: could not load the " BUNDLE_MARIADB " library!"); - throw SQLException( - "Unable to load the " BUNDLE_MARIADB " library.", - *this, - rtl::OUString( "08001" ), // "unable to connect" - 0, - Any() - ); - } -#endif - if ( !m_bAttemptedLoadCppConn ) - { - const rtl::OUString sModuleName(CPPCONN_LIB); - m_hCppConnModule = osl_loadModuleRelative( &thisModule, sModuleName.pData, 0 ); - m_bAttemptedLoadCppConn = true; - } - - // attempted to load - was it successful? - if ( !m_hCppConnModule ) - { - OSL_FAIL( "MysqlCDriver::impl_initCppConn_lck_throw: could not load the " CPPCONN_LIB " library!"); - throw SQLException( - "Unable to load the " CPPCONN_LIB " library.", - *this, - rtl::OUString( "08001" ), // "unable to connect" - 0, - Any() - ); - } - - // find the factory symbol - const rtl::OUString sSymbolName = "sql_mysql_get_driver_instance"; - typedef void* (* FGetMySQLDriver)(); - - const FGetMySQLDriver pFactoryFunction = reinterpret_cast<FGetMySQLDriver>( osl_getFunctionSymbol( m_hCppConnModule, sSymbolName.pData ) ); - if ( !pFactoryFunction ) - { - OSL_FAIL( "MysqlCDriver::impl_initCppConn_lck_throw: could not find the factory symbol in " CPPCONN_LIB "!"); - throw SQLException( - CPPCONN_LIB " is invalid: missing the driver factory function.", - *this, - rtl::OUString( "08001" ), // "unable to connect" - 0, - Any() - ); - } - - cppDriver = static_cast< sql::Driver* >( (*pFactoryFunction)() ); -#endif - if ( !cppDriver ) - { - throw SQLException( - "Unable to obtain the MySQL_Driver instance from Connector/C++.", - *this, - rtl::OUString( "08001" ), // "unable to connect" - 0, - Any() - ); - } -} - -Reference< XConnection > SAL_CALL MysqlCDriver::connect(const rtl::OUString& url, const Sequence< PropertyValue >& info) -{ - ::osl::MutexGuard aGuard( m_aMutex ); - - if (!acceptsURL(url)) { - return nullptr; - } - - if ( !cppDriver ) - { - impl_initCppConn_lck_throw(); - if ( !cppDriver ) - throw RuntimeException("MySQLCDriver::connect: internal error.", *this ); - } - - Reference< XConnection > xConn; - // create a new connection with the given properties and append it to our vector - try { - OConnection* pCon = new OConnection(*this); - xConn = pCon; - - pCon->construct(url,info); - m_xConnections.push_back(WeakReferenceHelper(*pCon)); - } - catch (const sql::SQLException &e) - { - mysqlc_sdbc_driver::translateAndThrow(e, *this, getDefaultEncoding()); - } - return xConn; -} - -sal_Bool SAL_CALL MysqlCDriver::acceptsURL(const rtl::OUString& url) -{ - return url.startsWith("sdbc:mysqlc:"); -} - -Sequence< DriverPropertyInfo > SAL_CALL MysqlCDriver::getPropertyInfo(const rtl::OUString& url, const Sequence< PropertyValue >& /* info */) -{ - if (acceptsURL(url)) { - ::std::vector< DriverPropertyInfo > aDriverInfo; - - aDriverInfo.push_back(DriverPropertyInfo( - rtl::OUString("Hostname") - ,rtl::OUString("Name of host") - ,true - ,rtl::OUString("localhost") - ,Sequence< rtl::OUString >()) - ); - aDriverInfo.push_back(DriverPropertyInfo( - rtl::OUString("Port") - ,rtl::OUString("Port") - ,true - ,rtl::OUString("3306") - ,Sequence< rtl::OUString >()) - ); - return Sequence< DriverPropertyInfo >(&(aDriverInfo[0]),aDriverInfo.size()); - } - - return Sequence< DriverPropertyInfo >(); -} - -sal_Int32 SAL_CALL MysqlCDriver::getMajorVersion() -{ - return MARIADBC_VERSION_MAJOR; -} - -sal_Int32 SAL_CALL MysqlCDriver::getMinorVersion() -{ - return MARIADBC_VERSION_MINOR; -} - -namespace connectivity -{ -namespace mysqlc -{ - -Reference< XInterface > MysqlCDriver_CreateInstance(const Reference< XMultiServiceFactory >& _rxFactory) -{ - return(*(new MysqlCDriver(_rxFactory))); -} - -void checkDisposed(bool _bThrow) -{ - if (_bThrow) { - throw DisposedException(); - } -} - -} /* mysqlc */ -} /* connectivity */ - -/* - * 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: */ diff --git a/mysqlc/source/mysqlc_driver.hxx b/mysqlc/source/mysqlc_driver.hxx deleted file mode 100644 index 0a8337d9b347..000000000000 --- a/mysqlc/source/mysqlc_driver.hxx +++ /dev/null @@ -1,124 +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. -************************************************************************/ - -#ifndef INCLUDED_MYSQLC_SOURCE_MYSQLC_DRIVER_HXX -#define INCLUDED_MYSQLC_SOURCE_MYSQLC_DRIVER_HXX - -#include <config_lgpl.h> - -#include "mysqlc_connection.hxx" - -#include <com/sun/star/sdbc/XDriver.hpp> -#include <com/sun/star/lang/XServiceInfo.hpp> -#include <com/sun/star/lang/XMultiServiceFactory.hpp> - -#include <cppuhelper/compbase2.hxx> -#include <cppconn/driver.h> -#include <osl/module.h> - -namespace connectivity -{ - namespace mysqlc - { - using ::com::sun::star::sdbc::SQLException; - using ::com::sun::star::uno::RuntimeException; - using ::com::sun::star::uno::Exception; - using ::com::sun::star::uno::Reference; - using ::com::sun::star::uno::Sequence; - /// @throws Exception - Reference< css::uno::XInterface > MysqlCDriver_CreateInstance(const Reference< css::lang::XMultiServiceFactory >& _rxFactory); - - typedef ::cppu::WeakComponentImplHelper2< css::sdbc::XDriver, - css::lang::XServiceInfo > ODriver_BASE; - - typedef void* (* OMysqlCConnection_CreateInstanceFunction)(void* _pDriver); - - class MysqlCDriver : public ODriver_BASE - { - protected: - Reference< css::lang::XMultiServiceFactory > m_xFactory; - ::osl::Mutex m_aMutex; // mutex is need to control member access - OWeakRefArray m_xConnections; // vector containing a list - // of all the Connection objects - // for this Driver -#ifndef SYSTEM_MYSQL_CPPCONN -#ifdef BUNDLE_MARIADB - oslModule m_hCConnModule; - bool m_bAttemptedLoadCConn; -#endif - oslModule m_hCppConnModule; - bool m_bAttemptedLoadCppConn; -#endif - - sql::Driver * cppDriver; - - public: - - explicit MysqlCDriver(const Reference< css::lang::XMultiServiceFactory >& _rxFactory); - - // OComponentHelper - void SAL_CALL disposing() SAL_OVERRIDE; - // XInterface - /// @throws RuntimeException - static rtl::OUString getImplementationName_Static(); - /// @throws RuntimeException - static Sequence< rtl::OUString > getSupportedServiceNames_Static(); - - // XServiceInfo - rtl::OUString SAL_CALL getImplementationName() SAL_OVERRIDE; - sal_Bool SAL_CALL supportsService(const rtl::OUString& ServiceName) SAL_OVERRIDE; - Sequence< rtl::OUString > SAL_CALL getSupportedServiceNames() SAL_OVERRIDE; - - // XDriver - Reference< css::sdbc::XConnection > SAL_CALL connect(const rtl::OUString& url, const Sequence< css::beans::PropertyValue >& info) SAL_OVERRIDE; - - sal_Bool SAL_CALL acceptsURL(const rtl::OUString& url) SAL_OVERRIDE; - Sequence< css::sdbc::DriverPropertyInfo > SAL_CALL getPropertyInfo(const rtl::OUString& url, const Sequence< css::beans::PropertyValue >& info) SAL_OVERRIDE; - - sal_Int32 SAL_CALL getMajorVersion() SAL_OVERRIDE; - sal_Int32 SAL_CALL getMinorVersion() SAL_OVERRIDE; - - const Reference< css::lang::XMultiServiceFactory >& getFactory() const { return m_xFactory; } - - static rtl_TextEncoding getDefaultEncoding() { return RTL_TEXTENCODING_UTF8; } - - private: - void impl_initCppConn_lck_throw(); - }; - } /* mysqlc */ -} /* connectivity */ - -#endif // INCLUDED_MYSQLC_SOURCE_MYSQLC_DRIVER_HXX -/* - * 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: */ diff --git a/mysqlc/source/mysqlc_general.hxx b/mysqlc/source/mysqlc_general.hxx deleted file mode 100644 index 43544a2a172e..000000000000 --- a/mysqlc/source/mysqlc_general.hxx +++ /dev/null @@ -1,128 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef INCLUDED_MYSQLC_SOURCE_MYSQLC_GENERAL_HXX -#define INCLUDED_MYSQLC_SOURCE_MYSQLC_GENERAL_HXX - -#include <config_lgpl.h> - -#include <com/sun/star/uno/XInterface.hpp> -#include <com/sun/star/sdbc/SQLException.hpp> - -#include <osl/diagnose.h> -#include <mysql.h> - -#if defined __GNUC__ -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wdeprecated" -#endif -#include <cppconn/exception.h> -#if defined __GNUC__ -#pragma GCC diagnostic pop -#endif - -namespace mysqlc_sdbc_driver -{ - template<typename T> - void resetSqlVar(void** target, T* pValue, enum_field_types type, sal_Int32 nSize = 0) - { - if(*target) - { - free(*target); - *target = nullptr; - } - constexpr auto nUnitSize = sizeof(T); - switch(type) - { - case MYSQL_TYPE_INT24: - case MYSQL_TYPE_YEAR: - case MYSQL_TYPE_NEWDATE: - case MYSQL_TYPE_BIT: - case MYSQL_TYPE_GEOMETRY: - case MYSQL_TYPE_LONG: - case MYSQL_TYPE_SHORT: - case MYSQL_TYPE_TINY: - case MYSQL_TYPE_LONGLONG: - case MYSQL_TYPE_FLOAT: - case MYSQL_TYPE_DOUBLE: - case MYSQL_TYPE_TIME: - case MYSQL_TYPE_DATE: - case MYSQL_TYPE_DATETIME: - case MYSQL_TYPE_TIMESTAMP: - *target = malloc(nUnitSize); - memcpy(*target, pValue, nUnitSize); - break; - case MYSQL_TYPE_STRING: - case MYSQL_TYPE_BLOB: - case MYSQL_TYPE_DECIMAL: - case MYSQL_TYPE_VARCHAR: - case MYSQL_TYPE_NEWDECIMAL: - case MYSQL_TYPE_ENUM: - case MYSQL_TYPE_SET: - case MYSQL_TYPE_VAR_STRING: - case MYSQL_TYPE_TINY_BLOB: - case MYSQL_TYPE_MEDIUM_BLOB: - case MYSQL_TYPE_LONG_BLOB: - *target = malloc(nUnitSize*nSize); - memcpy(*target, pValue, nUnitSize*nSize); - break; - case MYSQL_TYPE_NULL: - // nothing I guess - break; - default: - OSL_FAIL("resetSqlVar: unknown enum_field_type"); - } - } - - void allocateSqlVar(void** mem, enum_field_types eType, unsigned nSize = 0); - - rtl::OString escapeSql(const rtl::OString& from); - - rtl::OUString getStringFromAny(const css::uno::Any& _rAny); - - /// @throws css::sdbc::SQLException - void throwFeatureNotImplementedException( - const sal_Char* _pAsciiFeatureName, - const css::uno::Reference< css::uno::XInterface >& _rxContext - ); - - /// @throws css::sdbc::SQLException - void throwInvalidArgumentException( - const sal_Char* _pAsciiFeatureName, - const css::uno::Reference< css::uno::XInterface >& _rxContext - ); - - void translateAndThrow(const ::sql::SQLException& _error, const css::uno::Reference< css::uno::XInterface >& _context, const rtl_TextEncoding encoding); - - void throwSQLExceptionWithMsg(const char* msg, unsigned int errorNum, const css::uno::Reference< css::uno::XInterface >& _context, const rtl_TextEncoding encoding); - - int mysqlToOOOType(int eType, int charsetnr) noexcept; - - rtl::OUString mysqlTypeToStr(MYSQL_FIELD* pField); - - int mysqlStrToOOOType(const rtl::OUString& sType); - - rtl::OUString convert(const ::std::string& _string, const rtl_TextEncoding encoding); - - ::std::string convert(const rtl::OUString& _string, const rtl_TextEncoding encoding); -} - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/mysqlc/source/mysqlc_prepared_resultset.cxx b/mysqlc/source/mysqlc_prepared_resultset.cxx deleted file mode 100644 index 1d5b9ad359bf..000000000000 --- a/mysqlc/source/mysqlc_prepared_resultset.cxx +++ /dev/null @@ -1,1097 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#include "mysqlc_propertyids.hxx" -#include "mysqlc_general.hxx" -#include "mysqlc_prepared_resultset.hxx" -#include "mysqlc_resultsetmetadata.hxx" - -#include <com/sun/star/beans/PropertyAttribute.hpp> -#include <com/sun/star/lang/DisposedException.hpp> -#include <com/sun/star/sdbc/DataType.hpp> -#include <com/sun/star/sdbc/ResultSetConcurrency.hpp> -#include <com/sun/star/sdbc/ResultSetType.hpp> -#include <com/sun/star/sdbc/FetchDirection.hpp> -#include <com/sun/star/sdbcx/CompareBookmark.hpp> -#include <cppuhelper/supportsservice.hxx> -#include <cppuhelper/typeprovider.hxx> - -using namespace rtl; -#include <comphelper/string.hxx> - -#include <cstdlib> - -using namespace connectivity::mysqlc; -using namespace cppu; -using namespace com::sun::star; -using namespace com::sun::star::lang; -using namespace com::sun::star::beans; -using namespace com::sun::star::sdbc; -using namespace com::sun::star::sdbcx; -using namespace com::sun::star::container; -using namespace com::sun::star::io; -using namespace com::sun::star::util; -using namespace ::comphelper; -using ::osl::MutexGuard; - -#include <cppconn/resultset.h> -#include <cppconn/resultset_metadata.h> - -#include <stdio.h> - -rtl::OUString SAL_CALL OPreparedResultSet::getImplementationName() -{ - return rtl::OUString("com.sun.star.sdbcx.mysqlc.ResultSet"); -} - -uno::Sequence<rtl::OUString> SAL_CALL OPreparedResultSet::getSupportedServiceNames() -{ - uno::Sequence<rtl::OUString> aSupported(2); - aSupported[0] = "com.sun.star.sdbc.ResultSet"; - aSupported[1] = "com.sun.star.sdbcx.ResultSet"; - return aSupported; -} - -sal_Bool SAL_CALL OPreparedResultSet::supportsService(const rtl::OUString& _rServiceName) -{ - return cppu::supportsService(this, _rServiceName); -} -OPreparedResultSet::OPreparedResultSet(OConnection& rConn, OPreparedStatement* pPrepared, - MYSQL_STMT* pStmt) - : OPreparedResultSet_BASE(m_aMutex) - , OPropertySetHelper(OPreparedResultSet_BASE::rBHelper) - , m_rConnection(rConn) - , m_aStatement(static_cast<OWeakObject*>(pPrepared)) - , m_xMetaData(nullptr) - , m_pStmt(pStmt) - , m_encoding(rConn.getConnectionEncoding()) -{ - m_nFieldCount = mysql_stmt_field_count(pStmt); - m_pResult = mysql_stmt_result_metadata(m_pStmt); - m_aFields.reset(mysql_fetch_fields(m_pResult)); -} - -OPreparedResultSet::~OPreparedResultSet() {} - -void OPreparedResultSet::disposing() -{ - OPropertySetHelper::disposing(); - - MutexGuard aGuard(m_aMutex); - - m_aStatement = nullptr; - m_xMetaData = nullptr; -} - -Any SAL_CALL OPreparedResultSet::queryInterface(const Type& rType) -{ - Any aRet = OPropertySetHelper::queryInterface(rType); - if (!aRet.hasValue()) - { - aRet = OPreparedResultSet_BASE::queryInterface(rType); - } - return aRet; -} - -uno::Sequence<Type> SAL_CALL OPreparedResultSet::getTypes() -{ - OTypeCollection aTypes(cppu::UnoType<XMultiPropertySet>::get(), - cppu::UnoType<XFastPropertySet>::get(), - cppu::UnoType<XPropertySet>::get()); - - return concatSequences(aTypes.getTypes(), OPreparedResultSet_BASE::getTypes()); -} - -sal_Int32 SAL_CALL OPreparedResultSet::findColumn(const rtl::OUString& columnName) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - - MYSQL_FIELD* pFields = mysql_fetch_field(m_pResult); - for (sal_Int32 i = 0; i < m_nFieldCount; ++i) - { - if (columnName.equalsIgnoreAsciiCaseAscii(pFields[i].name)) - return i + 1; // sdbc indexes from 1 - } - - throw SQLException("The column name '" + columnName + "' is not valid.", *this, - rtl::OUString("42S22"), 0, Any()); -} - -uno::Reference<XInputStream> SAL_CALL OPreparedResultSet::getBinaryStream(sal_Int32 column) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OPreparedResultSet::getBinaryStream", - *this); - return nullptr; -} - -uno::Reference<XInputStream> SAL_CALL OPreparedResultSet::getCharacterStream(sal_Int32 column) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - - mysqlc_sdbc_driver::throwFeatureNotImplementedException( - "OPreparedResultSet::getCharacterStream", *this); - return nullptr; -} - -sal_Bool SAL_CALL OPreparedResultSet::getBoolean(sal_Int32 column) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - - if (*m_aData[column - 1].is_null) - { - m_bWasNull = true; - return false; - } - m_bWasNull = false; - return *static_cast<bool*>(m_aData[column - 1].buffer); -} - -sal_Int8 SAL_CALL OPreparedResultSet::getByte(sal_Int32 column) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - - if (*m_aData[column - 1].is_null) - { - m_bWasNull = true; - return 0; - } - m_bWasNull = false; - return *static_cast<sal_Int8*>(m_aData[column - 1].buffer); -} - -uno::Sequence<sal_Int8> SAL_CALL OPreparedResultSet::getBytes(sal_Int32 column) -{ - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - MutexGuard aGuard(m_aMutex); - - if (*m_aData[column - 1].is_null) - { - m_bWasNull = true; - return uno::Sequence<sal_Int8>(); - } - m_bWasNull = false; - - return uno::Sequence<sal_Int8>(static_cast<sal_Int8 const*>(m_aData[column - 1].buffer), - *m_aData[column - 1].length); -} - -Date SAL_CALL OPreparedResultSet::getDate(sal_Int32 column) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - - if (*m_aData[column - 1].is_null) - { - m_bWasNull = true; - return Date{}; // TODO init - } - m_bWasNull = false; - - const MYSQL_TIME* pTime = static_cast<MYSQL_TIME*>(m_aData[column - 1].buffer); - - assert(pTime != nullptr); - - Date d; - d.Year = pTime->year; - d.Month = pTime->month; - d.Day = pTime->day; - return d; -} - -double SAL_CALL OPreparedResultSet::getDouble(sal_Int32 column) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - - if (*m_aData[column - 1].is_null) - { - m_bWasNull = true; - return 0; - } - m_bWasNull = false; - - if (m_aFields[column - 1].type == MYSQL_TYPE_FLOAT) - return *static_cast<float*>(m_aData[column - 1].buffer); - - return *static_cast<double*>(m_aData[column - 1].buffer); -} - -float SAL_CALL OPreparedResultSet::getFloat(sal_Int32 column) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - - if (*m_aData[column - 1].is_null) - { - m_bWasNull = true; - return 0; - } - m_bWasNull = false; - - return *static_cast<float*>(m_aData[column - 1].buffer); -} - -sal_Int32 SAL_CALL OPreparedResultSet::getInt(sal_Int32 column) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - if (*m_aData[column - 1].is_null) - { - m_bWasNull = true; - return 0; - } - m_bWasNull = false; - - return *static_cast<sal_Int32*>(m_aData[column - 1].buffer); -} - -sal_Int32 SAL_CALL OPreparedResultSet::getRow() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - - return static_cast<sal_Int32>(mysql_field_tell(m_pResult)); -} - -sal_Int64 SAL_CALL OPreparedResultSet::getLong(sal_Int32 column) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - - if (*m_aData[column - 1].is_null) - return 0; - - return *static_cast<sal_Int64*>(m_aData[column - 1].buffer); -} - -uno::Reference<XResultSetMetaData> SAL_CALL OPreparedResultSet::getMetaData() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - if (!m_xMetaData.is()) - { - m_xMetaData = new OResultSetMetaData(m_rConnection, m_pResult, m_encoding); - } - return m_xMetaData; -} - -uno::Reference<XArray> SAL_CALL OPreparedResultSet::getArray(sal_Int32 column) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OPreparedResultSet::getArray", *this); - return nullptr; -} - -uno::Reference<XClob> SAL_CALL OPreparedResultSet::getClob(sal_Int32 column) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OPreparedResultSet::getClob", *this); - return nullptr; -} - -uno::Reference<XBlob> SAL_CALL OPreparedResultSet::getBlob(sal_Int32 column) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OPreparedResultSet::getBlob", *this); - return nullptr; -} - -uno::Reference<XRef> SAL_CALL OPreparedResultSet::getRef(sal_Int32 column) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OPreparedResultSet::getRef", *this); - return nullptr; -} - -Any SAL_CALL OPreparedResultSet::getObject(sal_Int32 column, - const uno::Reference<XNameAccess>& /* typeMap */) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - - Any aRet = Any(); - - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OPreparedResultSet::getObject", *this); - return aRet; -} - -sal_Int16 SAL_CALL OPreparedResultSet::getShort(sal_Int32 column) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - - if (*m_aData[column - 1].is_null) - { - m_bWasNull = true; - return 0; - } - m_bWasNull = false; - - return *static_cast<sal_Int16*>(m_aData[column - 1].buffer); -} - -rtl::OUString SAL_CALL OPreparedResultSet::getString(sal_Int32 column) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - if (*m_aData[column - 1].is_null) - { - m_bWasNull = true; - return OUString{}; - } - m_bWasNull = false; - - if (m_aFields[column - 1].type == MYSQL_TYPE_BIT) - { - if (*static_cast<sal_Int8*>(m_aData[column - 1].buffer) != 0) - return OUString{ "YES" }; - return OUString{ "NO" }; - } - - const char* sStr = static_cast<const char*>(m_aData[column - 1].buffer); - - OUString sReturn = rtl::OUString(sStr, *m_aData[column - 1].length, m_encoding); - return sReturn; -} - -Time SAL_CALL OPreparedResultSet::getTime(sal_Int32 column) -{ - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - MutexGuard aGuard(m_aMutex); - checkColumnIndex(column); - - if (*m_aData[column - 1].is_null) - { - m_bWasNull = true; - return Time{}; // TODO init - } - m_bWasNull = false; - - const MYSQL_TIME* pTime = static_cast<MYSQL_TIME*>(m_aData[column - 1].buffer); - - assert(pTime != nullptr); - - Time t; - t.Hours = pTime->hour; - t.Minutes = pTime->minute; - t.Seconds = pTime->second; - return t; -} - -DateTime SAL_CALL OPreparedResultSet::getTimestamp(sal_Int32 column) -{ - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - MutexGuard aGuard(m_aMutex); - checkColumnIndex(column); - - if (*m_aData[column - 1].is_null) - { - m_bWasNull = true; - return DateTime{}; - } - m_bWasNull = false; - - const MYSQL_TIME* pTime = static_cast<MYSQL_TIME*>(m_aData[column - 1].buffer); - - assert(pTime != nullptr); - - DateTime t; - t.Year = pTime->year; - t.Month = pTime->month; - t.Day = pTime->day; - t.Hours = pTime->hour; - t.Minutes = pTime->minute; - t.Seconds = pTime->second; - return t; -} - -sal_Bool SAL_CALL OPreparedResultSet::isBeforeFirst() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - - return m_nCurrentField == 0; -} - -sal_Bool SAL_CALL OPreparedResultSet::isAfterLast() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - - return m_nCurrentField >= m_nFieldCount; -} - -sal_Bool SAL_CALL OPreparedResultSet::isFirst() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - - return m_nCurrentField == 1 && !isAfterLast(); -} - -sal_Bool SAL_CALL OPreparedResultSet::isLast() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - - return mysql_field_tell(m_pResult) == static_cast<unsigned>(m_nFieldCount); -} - -void SAL_CALL OPreparedResultSet::beforeFirst() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OPreparedResultSet::beforeFirst", - *this); -} - -void SAL_CALL OPreparedResultSet::afterLast() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OPreparedResultSet::afterLast", *this); -} - -void SAL_CALL OPreparedResultSet::close() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - - m_aData.reset(); - m_aMetaData.reset(); - - if (m_pResult) - mysql_free_result(m_pResult); - mysql_stmt_free_result(m_pStmt); - dispose(); -} - -sal_Bool SAL_CALL OPreparedResultSet::first() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - - mysql_stmt_data_seek(m_pStmt, 0); - next(); - - return true; -} - -sal_Bool SAL_CALL OPreparedResultSet::last() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - - mysql_stmt_data_seek(m_pStmt, m_nFieldCount - 1); - next(); - - return true; -} - -sal_Bool SAL_CALL OPreparedResultSet::absolute(sal_Int32 row) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - - sal_Int32 nFields = m_nFieldCount; - sal_Int32 nToGo = row < 0 ? nFields - row : row - 1; - - if (nToGo >= nFields) - nToGo = nFields - 1; - if (nToGo < 0) - nToGo = 0; - - mysql_stmt_data_seek(m_pStmt, nToGo); - next(); - - return true; -} - -sal_Bool SAL_CALL OPreparedResultSet::relative(sal_Int32 row) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - - sal_Int32 nFields = m_nFieldCount; - if (row == 0) - return true; - - sal_Int32 nToGo = m_nCurrentField + row; - if (nToGo >= nFields) - nToGo = nFields - 1; - if (nToGo < 0) - nToGo = 0; - - mysql_stmt_data_seek(m_pStmt, nToGo); - next(); - m_nCurrentField += row; - - return true; -} - -sal_Bool SAL_CALL OPreparedResultSet::previous() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - - if (m_nCurrentField <= 1) - return false; - - mysql_stmt_data_seek(m_pStmt, m_nCurrentField - 2); - next(); - --m_nFieldCount; - return true; -} - -uno::Reference<uno::XInterface> SAL_CALL OPreparedResultSet::getStatement() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - - return m_aStatement.get(); -} - -sal_Bool SAL_CALL OPreparedResultSet::rowDeleted() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - - return false; -} - -sal_Bool SAL_CALL OPreparedResultSet::rowInserted() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - - return false; -} - -sal_Bool SAL_CALL OPreparedResultSet::rowUpdated() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - - return false; -} - -sal_Bool SAL_CALL OPreparedResultSet::next() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - - bool bFirstRun = false; - // allocate array if it does not exist - if (m_aData == nullptr) - { - bFirstRun = true; - m_aData.reset(new MYSQL_BIND[m_nFieldCount]); - memset(m_aData.get(), 0, m_nFieldCount * sizeof(MYSQL_BIND)); - m_aMetaData.reset(new BindMetaData[m_nFieldCount]); - } - for (sal_Int32 i = 0; i < m_nFieldCount; ++i) - { - m_aMetaData[i].is_null = 0; - m_aMetaData[i].length = 0l; - m_aMetaData[i].error = 0; - - m_aData[i].is_null = &m_aMetaData[i].is_null; - m_aData[i].buffer_length = m_aFields[i].type == MYSQL_TYPE_BLOB ? 0 : m_aFields[i].length; - m_aData[i].length = &m_aMetaData[i].length; - m_aData[i].error = &m_aMetaData[i].error; - m_aData[i].buffer = nullptr; - m_aData[i].buffer_type = m_aFields[i].type; - - // allocates memory, if it is a fixed size type. If not then nullptr - mysqlc_sdbc_driver::allocateSqlVar(&m_aData[i].buffer, m_aData[i].buffer_type, - m_aFields[i].length); - } - mysql_stmt_bind_result(m_pStmt, m_aData.get()); - if (bFirstRun) - mysql_stmt_store_result(m_pStmt); - int failure = mysql_stmt_fetch(m_pStmt); - - for (sal_Int32 i = 0; i < m_nFieldCount; ++i) - { - if (*m_aData[i].error) - { - // expected if we have a BLOB, as buffer_length is set to 0. We want to - // fetch it piece by piece - // see https://bugs.mysql.com/file.php?id=12361&bug_id=33086 - if (m_aData[i].buffer == nullptr) - { - m_aData[i].buffer_length = *m_aData[i].length; - m_aData[i].buffer = malloc(*m_aData[i].length); - mysql_stmt_fetch_column(m_pStmt, &m_aData[i], i, 0); - } - } - } - - if (failure == 1) - { - MYSQL* pMysql = m_rConnection.getMysqlConnection(); - mysqlc_sdbc_driver::throwSQLExceptionWithMsg(mysql_error(pMysql), mysql_errno(pMysql), - *this, m_encoding); - } - else if (failure == MYSQL_NO_DATA) - return false; - - // current field cannot be asked as a number. We have to keep track it - // manually. - m_nCurrentField += 1; - - return true; -} - -sal_Bool SAL_CALL OPreparedResultSet::wasNull() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - - return m_bWasNull; -} - -void SAL_CALL OPreparedResultSet::cancel() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); -} - -void SAL_CALL OPreparedResultSet::clearWarnings() {} - -Any SAL_CALL OPreparedResultSet::getWarnings() -{ - Any aRet = Any(); - return aRet; -} - -void SAL_CALL OPreparedResultSet::insertRow() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - // you only have to implement this if you want to insert new rows - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OPreparedResultSet::insertRow", *this); -} - -void SAL_CALL OPreparedResultSet::updateRow() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - - // only when you allow updates - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OPreparedResultSet::updateRow", *this); -} - -void SAL_CALL OPreparedResultSet::deleteRow() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OPreparedResultSet::deleteRow", *this); -} - -void SAL_CALL OPreparedResultSet::cancelRowUpdates() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OPreparedResultSet::cancelRowUpdates", - *this); -} - -void SAL_CALL OPreparedResultSet::moveToInsertRow() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - - // only when you allow insert's - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OPreparedResultSet::moveToInsertRow", - *this); -} - -void SAL_CALL OPreparedResultSet::moveToCurrentRow() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); -} - -void SAL_CALL OPreparedResultSet::updateNull(sal_Int32 column) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OPreparedResultSet::updateNull", - *this); -} - -void SAL_CALL OPreparedResultSet::updateBoolean(sal_Int32 column, sal_Bool /* x */) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OPreparedResultSet::updateBoolean", - *this); -} - -void SAL_CALL OPreparedResultSet::updateByte(sal_Int32 column, sal_Int8 /* x */) -{ - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - MutexGuard aGuard(m_aMutex); - checkColumnIndex(column); - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OPreparedResultSet::updateByte", - *this); -} - -void SAL_CALL OPreparedResultSet::updateShort(sal_Int32 column, sal_Int16 /* x */) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OPreparedResultSet::updateShort", - *this); -} - -void SAL_CALL OPreparedResultSet::updateInt(sal_Int32 column, sal_Int32 /* x */) -{ - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - MutexGuard aGuard(m_aMutex); - checkColumnIndex(column); - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OPreparedResultSet::updateInt", *this); -} - -void SAL_CALL OPreparedResultSet::updateLong(sal_Int32 column, sal_Int64 /* x */) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OPreparedResultSet::updateLong", - *this); -} - -void SAL_CALL OPreparedResultSet::updateFloat(sal_Int32 column, float /* x */) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OPreparedResultSet::updateFloat", - *this); -} - -void SAL_CALL OPreparedResultSet::updateDouble(sal_Int32 column, double /* x */) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OPreparedResultSet::updateDouble", - *this); -} - -void SAL_CALL OPreparedResultSet::updateString(sal_Int32 column, const rtl::OUString& /* x */) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OPreparedResultSet::updateString", - *this); -} - -void SAL_CALL OPreparedResultSet::updateBytes(sal_Int32 column, - const uno::Sequence<sal_Int8>& /* x */) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OPreparedResultSet::updateBytes", - *this); -} - -void SAL_CALL OPreparedResultSet::updateDate(sal_Int32 column, const Date& /* x */) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OPreparedResultSet::updateDate", - *this); -} - -void SAL_CALL OPreparedResultSet::updateTime(sal_Int32 column, const Time& /* x */) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OPreparedResultSet::updateTime", - *this); -} - -void SAL_CALL OPreparedResultSet::updateTimestamp(sal_Int32 column, const DateTime& /* x */) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OPreparedResultSet::updateTimestamp", - *this); -} - -void SAL_CALL OPreparedResultSet::updateBinaryStream(sal_Int32 column, - const uno::Reference<XInputStream>& /* x */, - sal_Int32 /* length */) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - mysqlc_sdbc_driver::throwFeatureNotImplementedException( - "OPreparedResultSet::updateBinaryStream", *this); -} - -void SAL_CALL OPreparedResultSet::updateCharacterStream(sal_Int32 column, - const uno::Reference<XInputStream>& /* x */, - sal_Int32 /* length */) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - mysqlc_sdbc_driver::throwFeatureNotImplementedException( - "OPreparedResultSet::updateCharacterStream", *this); -} - -void SAL_CALL OPreparedResultSet::refreshRow() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OPreparedResultSet::refreshRow", - *this); -} - -void SAL_CALL OPreparedResultSet::updateObject(sal_Int32 column, const Any& /* x */) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OPreparedResultSet::updateObject", - *this); -} - -void SAL_CALL OPreparedResultSet::updateNumericObject(sal_Int32 column, const Any& /* x */, - sal_Int32 /* scale */) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - mysqlc_sdbc_driver::throwFeatureNotImplementedException( - "OPreparedResultSet::updateNumericObject", *this); -} - -// XRowLocate -Any SAL_CALL OPreparedResultSet::getBookmark() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - Any aRet = Any(); - - // if you don't want to support bookmark you must remove the XRowLocate interface - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OPreparedResultSet::getBookmark", - *this); - - return aRet; -} - -sal_Bool SAL_CALL OPreparedResultSet::moveToBookmark(const Any& /* bookmark */) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - - return false; -} - -sal_Bool SAL_CALL OPreparedResultSet::moveRelativeToBookmark(const Any& /* bookmark */, - sal_Int32 /* rows */) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - - mysqlc_sdbc_driver::throwFeatureNotImplementedException( - "OPreparedResultSet::moveRelativeToBookmark", *this); - return false; -} - -sal_Int32 SAL_CALL OPreparedResultSet::compareBookmarks(const Any& /* n1 */, const Any& /* n2 */) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OPreparedResultSet::compareBookmarks", - *this); - - return CompareBookmark::NOT_EQUAL; -} - -sal_Bool SAL_CALL OPreparedResultSet::hasOrderedBookmarks() { return false; } - -sal_Int32 SAL_CALL OPreparedResultSet::hashBookmark(const Any& /* bookmark */) -{ - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OPreparedResultSet::hashBookmark", - *this); - return 0; -} - -// XDeleteRows -uno::Sequence<sal_Int32> - SAL_CALL OPreparedResultSet::deleteRows(const uno::Sequence<Any>& /* rows */) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed); - uno::Sequence<sal_Int32> aRet = uno::Sequence<sal_Int32>(); - - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OPreparedResultSet::deleteRows", - *this); - return aRet; -} - -IPropertyArrayHelper* OPreparedResultSet::createArrayHelper() const -{ - uno::Sequence<Property> aProps(5); - Property* pProperties = aProps.getArray(); - sal_Int32 nPos = 0; - pProperties[nPos++] = Property("FetchDirection", PROPERTY_ID_FETCHDIRECTION, - cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] - = Property("FetchSize", PROPERTY_ID_FETCHSIZE, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = Property("IsBookmarkable", PROPERTY_ID_ISBOOKMARKABLE, - cppu::UnoType<bool>::get(), PropertyAttribute::READONLY); - pProperties[nPos++] = Property("ResultSetConcurrency", PROPERTY_ID_RESULTSETCONCURRENCY, - cppu::UnoType<sal_Int32>::get(), PropertyAttribute::READONLY); - pProperties[nPos++] = Property("ResultSetType", PROPERTY_ID_RESULTSETTYPE, - cppu::UnoType<sal_Int32>::get(), PropertyAttribute::READONLY); - - return new OPropertyArrayHelper(aProps); -} - -IPropertyArrayHelper& OPreparedResultSet::getInfoHelper() { return *getArrayHelper(); } - -sal_Bool OPreparedResultSet::convertFastPropertyValue(Any& /* rConvertedValue */, - Any& /* rOldValue */, sal_Int32 nHandle, - const Any& /* rValue */) -{ - switch (nHandle) - { - case PROPERTY_ID_ISBOOKMARKABLE: - case PROPERTY_ID_CURSORNAME: - case PROPERTY_ID_RESULTSETCONCURRENCY: - case PROPERTY_ID_RESULTSETTYPE: - throw css::lang::IllegalArgumentException(); - case PROPERTY_ID_FETCHDIRECTION: - case PROPERTY_ID_FETCHSIZE: - default:; - } - return false; -} - -void OPreparedResultSet::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle, - const Any& /* rValue */) -{ - switch (nHandle) - { - case PROPERTY_ID_ISBOOKMARKABLE: - case PROPERTY_ID_CURSORNAME: - case PROPERTY_ID_RESULTSETCONCURRENCY: - case PROPERTY_ID_RESULTSETTYPE: - throw uno::Exception("cannot set prop " + rtl::OUString::number(nHandle), nullptr); - case PROPERTY_ID_FETCHDIRECTION: - break; - case PROPERTY_ID_FETCHSIZE: - break; - default:; - } -} - -void OPreparedResultSet::getFastPropertyValue(Any& _rValue, sal_Int32 nHandle) const -{ - switch (nHandle) - { - case PROPERTY_ID_ISBOOKMARKABLE: - _rValue <<= false; - break; - case PROPERTY_ID_CURSORNAME: - break; - case PROPERTY_ID_RESULTSETCONCURRENCY: - _rValue <<= ResultSetConcurrency::READ_ONLY; - break; - case PROPERTY_ID_RESULTSETTYPE: - _rValue <<= ResultSetType::SCROLL_INSENSITIVE; - break; - case PROPERTY_ID_FETCHDIRECTION: - _rValue <<= FetchDirection::FORWARD; - break; - case PROPERTY_ID_FETCHSIZE: - _rValue <<= sal_Int32(50); - break; - ; - default:; - } -} - -void SAL_CALL OPreparedResultSet::acquire() throw() { OPreparedResultSet_BASE::acquire(); } - -void SAL_CALL OPreparedResultSet::release() throw() { OPreparedResultSet_BASE::release(); } - -css::uno::Reference<css::beans::XPropertySetInfo> SAL_CALL OPreparedResultSet::getPropertySetInfo() -{ - return ::cppu::OPropertySetHelper::createPropertySetInfo(getInfoHelper()); -} - -void OPreparedResultSet::checkColumnIndex(sal_Int32 index) -{ - if (index < 1 || index > static_cast<int>(m_nFieldCount)) - { - /* static object for efficiency or thread safety is a problem ? */ - throw SQLException("index out of range", *this, rtl::OUString(), 1, Any()); - } -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/mysqlc/source/mysqlc_prepared_resultset.hxx b/mysqlc/source/mysqlc_prepared_resultset.hxx deleted file mode 100644 index 53a1b0af10a9..000000000000 --- a/mysqlc/source/mysqlc_prepared_resultset.hxx +++ /dev/null @@ -1,248 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef INCLUDED_MYSQLC_SOURCE_MYSQLC_RESULTSET_HXX -#define INCLUDED_MYSQLC_SOURCE_MYSQLC_RESULTSET_HXX - -#include "mysqlc_preparedstatement.hxx" -#include "mysqlc_statement.hxx" -#include "mysqlc_subcomponent.hxx" -#include "mysqlc_connection.hxx" - -#include <com/sun/star/sdbc/XCloseable.hpp> -#include <com/sun/star/sdbc/XColumnLocate.hpp> -#include <com/sun/star/sdbc/XResultSet.hpp> -#include <com/sun/star/sdbc/XResultSetMetaDataSupplier.hpp> -#include <com/sun/star/sdbc/XResultSetUpdate.hpp> -#include <com/sun/star/sdbc/XRow.hpp> -#include <com/sun/star/sdbc/XRowUpdate.hpp> -#include <com/sun/star/sdbc/XWarningsSupplier.hpp> -#include <com/sun/star/sdbcx/XDeleteRows.hpp> -#include <com/sun/star/sdbcx/XRowLocate.hpp> -#include <com/sun/star/util/XCancellable.hpp> - -#include <cppuhelper/compbase12.hxx> - -namespace connectivity -{ -namespace mysqlc -{ -using ::com::sun::star::sdbc::SQLException; -using ::com::sun::star::uno::Any; -using ::com::sun::star::uno::RuntimeException; - -typedef ::cppu::WeakComponentImplHelper12< - css::sdbc::XResultSet, css::sdbc::XRow, css::sdbc::XResultSetMetaDataSupplier, - css::util::XCancellable, css::sdbc::XWarningsSupplier, css::sdbc::XResultSetUpdate, - css::sdbc::XRowUpdate, css::sdbcx::XRowLocate, css::sdbcx::XDeleteRows, css::sdbc::XCloseable, - css::sdbc::XColumnLocate, css::lang::XServiceInfo> - OPreparedResultSet_BASE; - -class OPreparedResultSet final : public OBase_Mutex, - public OPreparedResultSet_BASE, - public ::cppu::OPropertySetHelper, - public OPropertyArrayUsageHelper<OPreparedResultSet> -{ - OConnection& m_rConnection; - css::uno::WeakReferenceHelper m_aStatement; - css::uno::Reference<css::sdbc::XResultSetMetaData> m_xMetaData; - MYSQL_RES* m_pResult; - MYSQL_STMT* m_pStmt; - rtl_TextEncoding m_encoding; - sal_Int32 m_nCurrentField = 0; - sal_Int32 m_nFieldCount; - - // Use c style arrays, because we have to work with pointers - // on these. - std::unique_ptr<MYSQL_BIND[]> m_aData; - std::unique_ptr<MYSQL_FIELD[]> m_aFields; - std::unique_ptr<BindMetaData[]> m_aMetaData; - - bool m_bWasNull = false; - - // OPropertyArrayUsageHelper - ::cppu::IPropertyArrayHelper* createArrayHelper() const SAL_OVERRIDE; - // OPropertySetHelper - ::cppu::IPropertyArrayHelper& SAL_CALL getInfoHelper() SAL_OVERRIDE; - - sal_Bool SAL_CALL convertFastPropertyValue(Any& rConvertedValue, Any& rOldValue, - sal_Int32 nHandle, const Any& rValue) SAL_OVERRIDE; - - void SAL_CALL setFastPropertyValue_NoBroadcast(sal_Int32 nHandle, - const Any& rValue) SAL_OVERRIDE; - - void SAL_CALL getFastPropertyValue(Any& rValue, sal_Int32 nHandle) const SAL_OVERRIDE; - - // you can't delete objects of this type - virtual ~OPreparedResultSet(); - -public: - virtual rtl::OUString SAL_CALL getImplementationName() SAL_OVERRIDE; - - virtual sal_Bool SAL_CALL supportsService(rtl::OUString const& ServiceName) SAL_OVERRIDE; - - virtual css::uno::Sequence<rtl::OUString> SAL_CALL getSupportedServiceNames() SAL_OVERRIDE; - - OPreparedResultSet(OConnection& rConn, OPreparedStatement* pStmt, MYSQL_STMT* pMyStmt); - - // ::cppu::OComponentHelper - void SAL_CALL disposing() SAL_OVERRIDE; - - // XInterface - Any SAL_CALL queryInterface(const css::uno::Type& rType) SAL_OVERRIDE; - - void SAL_CALL acquire() throw() SAL_OVERRIDE; - void SAL_CALL release() throw() SAL_OVERRIDE; - - //XTypeProvider - css::uno::Sequence<css::uno::Type> SAL_CALL getTypes() SAL_OVERRIDE; - - // XPropertySet - css::uno::Reference<css::beans::XPropertySetInfo> SAL_CALL getPropertySetInfo() SAL_OVERRIDE; - - // XResultSet - sal_Bool SAL_CALL next() SAL_OVERRIDE; - sal_Bool SAL_CALL isBeforeFirst() SAL_OVERRIDE; - sal_Bool SAL_CALL isAfterLast() SAL_OVERRIDE; - sal_Bool SAL_CALL isFirst() SAL_OVERRIDE; - sal_Bool SAL_CALL isLast() SAL_OVERRIDE; - - void SAL_CALL beforeFirst() SAL_OVERRIDE; - void SAL_CALL afterLast() SAL_OVERRIDE; - - sal_Bool SAL_CALL first() SAL_OVERRIDE; - sal_Bool SAL_CALL last() SAL_OVERRIDE; - - sal_Int32 SAL_CALL getRow() SAL_OVERRIDE; - - sal_Bool SAL_CALL absolute(sal_Int32 row) SAL_OVERRIDE; - sal_Bool SAL_CALL relative(sal_Int32 rows) SAL_OVERRIDE; - sal_Bool SAL_CALL previous() SAL_OVERRIDE; - - void SAL_CALL refreshRow() SAL_OVERRIDE; - - sal_Bool SAL_CALL rowUpdated() SAL_OVERRIDE; - sal_Bool SAL_CALL rowInserted() SAL_OVERRIDE; - sal_Bool SAL_CALL rowDeleted() SAL_OVERRIDE; - - css::uno::Reference<css::uno::XInterface> SAL_CALL getStatement() SAL_OVERRIDE; - // XRow - sal_Bool SAL_CALL wasNull() SAL_OVERRIDE; - - rtl::OUString SAL_CALL getString(sal_Int32 column) SAL_OVERRIDE; - - sal_Bool SAL_CALL getBoolean(sal_Int32 column) SAL_OVERRIDE; - sal_Int8 SAL_CALL getByte(sal_Int32 column) SAL_OVERRIDE; - sal_Int16 SAL_CALL getShort(sal_Int32 column) SAL_OVERRIDE; - sal_Int32 SAL_CALL getInt(sal_Int32 column) SAL_OVERRIDE; - sal_Int64 SAL_CALL getLong(sal_Int32 column) SAL_OVERRIDE; - - float SAL_CALL getFloat(sal_Int32 column) SAL_OVERRIDE; - double SAL_CALL getDouble(sal_Int32 column) SAL_OVERRIDE; - - css::uno::Sequence<sal_Int8> SAL_CALL getBytes(sal_Int32 column) SAL_OVERRIDE; - css::util::Date SAL_CALL getDate(sal_Int32 column) SAL_OVERRIDE; - css::util::Time SAL_CALL getTime(sal_Int32 column) SAL_OVERRIDE; - css::util::DateTime SAL_CALL getTimestamp(sal_Int32 column) SAL_OVERRIDE; - - css::uno::Reference<css::io::XInputStream> - SAL_CALL getBinaryStream(sal_Int32 column) SAL_OVERRIDE; - css::uno::Reference<css::io::XInputStream> - SAL_CALL getCharacterStream(sal_Int32 column) SAL_OVERRIDE; - - Any SAL_CALL getObject(sal_Int32 column, const my_XNameAccessRef& typeMap) SAL_OVERRIDE; - - css::uno::Reference<css::sdbc::XRef> SAL_CALL getRef(sal_Int32 column) SAL_OVERRIDE; - css::uno::Reference<css::sdbc::XBlob> SAL_CALL getBlob(sal_Int32 column) SAL_OVERRIDE; - css::uno::Reference<css::sdbc::XClob> SAL_CALL getClob(sal_Int32 column) SAL_OVERRIDE; - css::uno::Reference<css::sdbc::XArray> SAL_CALL getArray(sal_Int32 column) SAL_OVERRIDE; - - // XResultSetMetaDataSupplier - css::uno::Reference<css::sdbc::XResultSetMetaData> SAL_CALL getMetaData() SAL_OVERRIDE; - - // XCancellable - void SAL_CALL cancel() SAL_OVERRIDE; - - // XCloseable - void SAL_CALL close() SAL_OVERRIDE; - - // XWarningsSupplier - Any SAL_CALL getWarnings() SAL_OVERRIDE; - - void SAL_CALL clearWarnings() SAL_OVERRIDE; - - // XResultSetUpdate - void SAL_CALL insertRow() SAL_OVERRIDE; - void SAL_CALL updateRow() SAL_OVERRIDE; - void SAL_CALL deleteRow() SAL_OVERRIDE; - void SAL_CALL cancelRowUpdates() SAL_OVERRIDE; - void SAL_CALL moveToInsertRow() SAL_OVERRIDE; - void SAL_CALL moveToCurrentRow() SAL_OVERRIDE; - - // XRowUpdate - void SAL_CALL updateNull(sal_Int32 column) SAL_OVERRIDE; - void SAL_CALL updateBoolean(sal_Int32 column, sal_Bool x) SAL_OVERRIDE; - void SAL_CALL updateByte(sal_Int32 column, sal_Int8 x) SAL_OVERRIDE; - void SAL_CALL updateShort(sal_Int32 column, sal_Int16 x) SAL_OVERRIDE; - void SAL_CALL updateInt(sal_Int32 column, sal_Int32 x) SAL_OVERRIDE; - void SAL_CALL updateLong(sal_Int32 column, sal_Int64 x) SAL_OVERRIDE; - void SAL_CALL updateFloat(sal_Int32 column, float x) SAL_OVERRIDE; - void SAL_CALL updateDouble(sal_Int32 column, double x) SAL_OVERRIDE; - void SAL_CALL updateString(sal_Int32 column, const rtl::OUString& x) SAL_OVERRIDE; - void SAL_CALL updateBytes(sal_Int32 column, const css::uno::Sequence<sal_Int8>& x) SAL_OVERRIDE; - void SAL_CALL updateDate(sal_Int32 column, const css::util::Date& x) SAL_OVERRIDE; - void SAL_CALL updateTime(sal_Int32 column, const css::util::Time& x) SAL_OVERRIDE; - void SAL_CALL updateTimestamp(sal_Int32 column, const css::util::DateTime& x) SAL_OVERRIDE; - void SAL_CALL updateBinaryStream(sal_Int32 column, - const css::uno::Reference<css::io::XInputStream>& x, - sal_Int32 length) SAL_OVERRIDE; - void SAL_CALL updateCharacterStream(sal_Int32 column, - const css::uno::Reference<css::io::XInputStream>& x, - sal_Int32 length) SAL_OVERRIDE; - void SAL_CALL updateObject(sal_Int32 column, const Any& x) SAL_OVERRIDE; - void SAL_CALL updateNumericObject(sal_Int32 column, const Any& x, sal_Int32 scale) SAL_OVERRIDE; - - // XColumnLocate - sal_Int32 SAL_CALL findColumn(const rtl::OUString& columnName) SAL_OVERRIDE; - - // XRowLocate - Any SAL_CALL getBookmark() SAL_OVERRIDE; - - sal_Bool SAL_CALL moveToBookmark(const Any& bookmark) SAL_OVERRIDE; - sal_Bool SAL_CALL moveRelativeToBookmark(const Any& bookmark, sal_Int32 rows) SAL_OVERRIDE; - sal_Int32 SAL_CALL compareBookmarks(const Any& first, const Any& second) SAL_OVERRIDE; - sal_Bool SAL_CALL hasOrderedBookmarks() SAL_OVERRIDE; - sal_Int32 SAL_CALL hashBookmark(const Any& bookmark) SAL_OVERRIDE; - - // XDeleteRows - css::uno::Sequence<sal_Int32> - SAL_CALL deleteRows(const css::uno::Sequence<Any>& rows) SAL_OVERRIDE; - - /// @throws SQLException - /// @throws RuntimeException - void checkColumnIndex(sal_Int32 index); - -private: - using ::cppu::OPropertySetHelper::getFastPropertyValue; -}; -} /* mysqlc */ -} /* connectivity */ -#endif // CONNECTIVITY_SRESULTSET_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/mysqlc/source/mysqlc_preparedstatement.cxx b/mysqlc/source/mysqlc_preparedstatement.cxx deleted file mode 100644 index 35d1930f097b..000000000000 --- a/mysqlc/source/mysqlc_preparedstatement.cxx +++ /dev/null @@ -1,595 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#include "mysqlc_general.hxx" -#include "mysqlc_prepared_resultset.hxx" -#include "mysqlc_preparedstatement.hxx" -#include "mysqlc_propertyids.hxx" -#include "mysqlc_resultsetmetadata.hxx" - -#include <sal/log.hxx> - -#include <boost/config.hpp> -#include <com/sun/star/lang/DisposedException.hpp> -#include <com/sun/star/sdbc/DataType.hpp> -#include <cppconn/connection.h> -#include <cppconn/exception.h> -#include <cppconn/parameter_metadata.h> -#include <cppconn/prepared_statement.h> -#include <cppconn/statement.h> -#include <cppuhelper/typeprovider.hxx> - -#include <stdio.h> - -#ifdef _MSC_VER -#define snprintf _snprintf -#endif - -using namespace connectivity::mysqlc; -using namespace com::sun::star::uno; -using namespace com::sun::star::lang; -using namespace com::sun::star::beans; -using namespace com::sun::star::sdbc; -using namespace com::sun::star::container; -using namespace com::sun::star::io; -using namespace com::sun::star::util; -using ::osl::MutexGuard; - -rtl::OUString OPreparedStatement::getImplementationName() -{ - return rtl::OUString("com.sun.star.sdbcx.mysqlc.PreparedStatement"); -} - -css::uno::Sequence<rtl::OUString> OPreparedStatement::getSupportedServiceNames() -{ - css::uno::Sequence<rtl::OUString> s(1); - s[0] = "com.sun.star.sdbc.PreparedStatement"; - return s; -} - -sal_Bool OPreparedStatement::supportsService(rtl::OUString const & ServiceName) -{ - return cppu::supportsService(this, ServiceName); -} - -OPreparedStatement::OPreparedStatement(OConnection* _pConnection, MYSQL_STMT* pStmt) - :OCommonStatement(_pConnection) - ,m_pStmt(pStmt) -{ - m_paramCount = mysql_stmt_param_count(m_pStmt); - m_binds.reserve(m_paramCount); - m_bindMetas.reserve(m_paramCount); - for(unsigned i=0; i<m_paramCount; ++i) - { - MYSQL_BIND bind; - memset(&bind, 0, sizeof(MYSQL_BIND)); - m_binds.push_back(bind); - m_bindMetas.push_back(BindMetaData{}); - m_binds.back().is_null = &m_bindMetas.back().is_null; - m_binds.back().length = &m_bindMetas.back().length; - m_binds.back().buffer = nullptr; - } -} - -OPreparedStatement::~OPreparedStatement() -{ -} - -void SAL_CALL OPreparedStatement::acquire() - throw() -{ - OCommonStatement::acquire(); -} - -void SAL_CALL OPreparedStatement::release() - throw() -{ - OCommonStatement::release(); -} - -Any SAL_CALL OPreparedStatement::queryInterface(const Type & rType) -{ - Any aRet = OCommonStatement::queryInterface(rType); - if (!aRet.hasValue()) { - aRet = OPreparedStatement_BASE::queryInterface(rType); - } - return aRet; -} - -Sequence< Type > SAL_CALL OPreparedStatement::getTypes() -{ - return concatSequences(OPreparedStatement_BASE::getTypes(), OCommonStatement::getTypes()); -} - -Reference< XResultSetMetaData > SAL_CALL OPreparedStatement::getMetaData() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); - - if (!m_xMetaData.is()) - { - MYSQL_RES* pRes = mysql_stmt_result_metadata(m_pStmt); - // TODO warning or error if no meta data. - m_xMetaData = new OResultSetMetaData( *m_xConnection.get(), pRes, - getOwnConnection()->getConnectionEncoding()); - } - return m_xMetaData; -} - -void SAL_CALL OPreparedStatement::close() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); - - if(mysql_stmt_close(m_pStmt)) - { - SAL_WARN("mysqlc", "failed to close mysql prepared statement"); - } - m_pStmt = nullptr; // it's deallocated already - clearWarnings(); - clearParameters(); - OCommonStatement::close(); -} - -sal_Bool SAL_CALL OPreparedStatement::execute() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); - - if(!m_binds.empty() && mysql_stmt_bind_param(m_pStmt, m_binds.data())) - { - MYSQL* pMysql = m_xConnection.get()->getMysqlConnection(); - mysqlc_sdbc_driver::throwSQLExceptionWithMsg(mysql_stmt_error(m_pStmt), - mysql_errno(pMysql), *this, m_xConnection.get()->getConnectionEncoding()); - } - - int nFail = mysql_stmt_execute(m_pStmt); - if(nFail != 0) - { - MYSQL* pMysql = m_xConnection.get()->getMysqlConnection(); - mysqlc_sdbc_driver::throwSQLExceptionWithMsg(mysql_stmt_error(m_pStmt), - mysql_errno(pMysql), *this, m_xConnection.get()->getConnectionEncoding()); - } - - return !nFail; -} - -sal_Int32 SAL_CALL OPreparedStatement::executeUpdate() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); - - if(!m_binds.empty() && mysql_stmt_bind_param(m_pStmt, m_binds.data())) - { - MYSQL* pMysql = m_xConnection.get()->getMysqlConnection(); - mysqlc_sdbc_driver::throwSQLExceptionWithMsg(mysql_stmt_error(m_pStmt), - mysql_errno(pMysql), *this, m_xConnection.get()->getConnectionEncoding()); - } - - int nFail = mysql_stmt_execute(m_pStmt); - - if(nFail != 0) - { - MYSQL* pMysql = m_xConnection.get()->getMysqlConnection(); - mysqlc_sdbc_driver::throwSQLExceptionWithMsg(mysql_stmt_error(m_pStmt), - mysql_errno(pMysql), *this, m_xConnection.get()->getConnectionEncoding()); - } - - sal_Int32 affectedRows = mysql_stmt_affected_rows(m_pStmt); - return affectedRows; -} - -void SAL_CALL OPreparedStatement::setString(sal_Int32 parameter, const rtl::OUString& x) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); - checkParameterIndex(parameter); - - rtl::OString stringie(rtl::OUStringToOString(x, - m_xConnection->getConnectionEncoding())); - const sal_Int32 nIndex = parameter-1; - m_binds[nIndex].buffer_type = MYSQL_TYPE_STRING; - mysqlc_sdbc_driver::resetSqlVar(&m_binds[nIndex].buffer, stringie.getStr(), MYSQL_TYPE_STRING, stringie.getLength()); - m_bindMetas[nIndex].is_null = 0; - m_bindMetas[nIndex].length = stringie.getLength(); -} - -Reference< XConnection > SAL_CALL OPreparedStatement::getConnection() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); - - return m_xConnection.get(); -} - -Reference< XResultSet > SAL_CALL OPreparedStatement::executeQuery() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); - - if(!m_binds.empty() && mysql_stmt_bind_param(m_pStmt, m_binds.data())) - { - MYSQL* pMysql = m_xConnection.get()->getMysqlConnection(); - mysqlc_sdbc_driver::throwSQLExceptionWithMsg(mysql_stmt_error(m_pStmt), - mysql_errno(pMysql), *this, m_xConnection.get()->getConnectionEncoding()); - } - - int nFail = mysql_stmt_execute(m_pStmt); - - if(nFail != 0) - { - MYSQL* pMysql = m_xConnection.get()->getMysqlConnection(); - mysqlc_sdbc_driver::throwSQLExceptionWithMsg(mysql_stmt_error(m_pStmt), - mysql_errno(pMysql), *this, m_xConnection.get()->getConnectionEncoding()); - } - - Reference< XResultSet > xResultSet; - xResultSet = new OPreparedResultSet(*m_xConnection.get(), this, m_pStmt); - return xResultSet; -} - -void SAL_CALL OPreparedStatement::setBoolean(sal_Int32 parameter, sal_Bool x) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); - checkParameterIndex(parameter); - - const sal_Int32 nIndex = parameter-1; - m_binds[nIndex].buffer_type = MYSQL_TYPE_TINY; - mysqlc_sdbc_driver::resetSqlVar(&m_binds[nIndex].buffer, &x, MYSQL_TYPE_TINY); - m_bindMetas[nIndex].is_null = 0; -} - -void SAL_CALL OPreparedStatement::setByte(sal_Int32 parameter, sal_Int8 x) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); - checkParameterIndex(parameter); - - const sal_Int32 nIndex = parameter-1; - m_binds[nIndex].buffer_type = MYSQL_TYPE_TINY; - mysqlc_sdbc_driver::resetSqlVar(&m_binds[nIndex].buffer, &x, MYSQL_TYPE_TINY); - m_bindMetas[nIndex].is_null = 0; -} - -void SAL_CALL OPreparedStatement::setDate(sal_Int32 parameter, const Date& aData) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); - checkParameterIndex(parameter); - - MYSQL_TIME my_time; - - my_time.year = aData.Year; - my_time.month = aData.Month; - my_time.day = aData.Day; - - const sal_Int32 nIndex = parameter-1; - m_binds[nIndex].buffer_type = MYSQL_TYPE_DATE; - mysqlc_sdbc_driver::resetSqlVar(&m_binds[nIndex].buffer, &my_time, MYSQL_TYPE_DATE); - m_bindMetas[nIndex].is_null = 0; -} - -void SAL_CALL OPreparedStatement::setTime(sal_Int32 parameter, const Time& aVal) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); - checkParameterIndex(parameter); - - MYSQL_TIME my_time; - - my_time.hour = aVal.Hours; - my_time.minute = aVal.Minutes; - my_time.second = aVal.Seconds; - - const sal_Int32 nIndex = parameter-1; - m_binds[nIndex].buffer_type = MYSQL_TYPE_TIME; - mysqlc_sdbc_driver::resetSqlVar(&m_binds[nIndex].buffer, &my_time, MYSQL_TYPE_TIME); - m_bindMetas[nIndex].is_null = 0; -} - -void SAL_CALL OPreparedStatement::setTimestamp(sal_Int32 parameter, const DateTime& aVal) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); - checkParameterIndex(parameter); - - MYSQL_TIME my_time; - - my_time.hour = aVal.Hours; - my_time.minute = aVal.Minutes; - my_time.second = aVal.Seconds; - my_time.year = aVal.Year; - my_time.month = aVal.Month; - my_time.day = aVal.Day; - - const sal_Int32 nIndex = parameter-1; - m_binds[nIndex].buffer_type = MYSQL_TYPE_TIME; - mysqlc_sdbc_driver::resetSqlVar(&m_binds[nIndex].buffer, &my_time, MYSQL_TYPE_DATETIME); - m_bindMetas[nIndex].is_null = 0; -} - -void SAL_CALL OPreparedStatement::setDouble(sal_Int32 parameter, double x) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); - checkParameterIndex(parameter); - - const sal_Int32 nIndex = parameter-1; - m_binds[nIndex].buffer_type = MYSQL_TYPE_DOUBLE; - mysqlc_sdbc_driver::resetSqlVar(&m_binds[nIndex].buffer, &x, MYSQL_TYPE_DOUBLE); - m_bindMetas[nIndex].is_null = 0; -} - -void SAL_CALL OPreparedStatement::setFloat(sal_Int32 parameter, float x) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); - checkParameterIndex(parameter); - - const sal_Int32 nIndex = parameter-1; - m_binds[nIndex].buffer_type = MYSQL_TYPE_FLOAT; - mysqlc_sdbc_driver::resetSqlVar(&m_binds[nIndex].buffer, &x, MYSQL_TYPE_FLOAT); - m_bindMetas[nIndex].is_null = 0; -} - -void SAL_CALL OPreparedStatement::setInt(sal_Int32 parameter, sal_Int32 x) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); - checkParameterIndex(parameter); - - const sal_Int32 nIndex = parameter-1; - m_binds[nIndex].buffer_type = MYSQL_TYPE_LONG; - mysqlc_sdbc_driver::resetSqlVar(&m_binds[nIndex].buffer, &x, MYSQL_TYPE_LONG); - m_bindMetas[nIndex].is_null = 0; -} - -void SAL_CALL OPreparedStatement::setLong(sal_Int32 parameter, sal_Int64 aVal) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); - checkParameterIndex(parameter); - - const sal_Int32 nIndex = parameter-1; - m_binds[nIndex].buffer_type = MYSQL_TYPE_LONGLONG; - mysqlc_sdbc_driver::resetSqlVar(&m_binds[nIndex].buffer, &aVal, MYSQL_TYPE_LONGLONG); - m_bindMetas[nIndex].is_null = 0; -} - -void SAL_CALL OPreparedStatement::setNull(sal_Int32 parameter, sal_Int32 /*sqlType*/) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); - checkParameterIndex(parameter); - - const sal_Int32 nIndex = parameter-1; - m_bindMetas[nIndex].is_null = 1; - free(m_binds[nIndex].buffer); - m_binds[nIndex].buffer = nullptr; -} - -void SAL_CALL OPreparedStatement::setClob(sal_Int32 parameter, const Reference< XClob >& /* x */) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); - checkParameterIndex(parameter); - - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OPreparedStatement::setClob", *this); -} - -void SAL_CALL OPreparedStatement::setBlob(sal_Int32 parameter, const Reference< XBlob >& /* x */) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); - checkParameterIndex(parameter); - - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OPreparedStatement::setBlob", *this); -} - -void SAL_CALL OPreparedStatement::setArray(sal_Int32 parameter, const Reference< XArray >& /* x */) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); - checkParameterIndex(parameter); - - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OPreparedStatement::setArray", *this); -} - -void SAL_CALL OPreparedStatement::setRef(sal_Int32 parameter, const Reference< XRef >& /* x */) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); - checkParameterIndex(parameter); - - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OPreparedStatement::setRef", *this); -} - -void SAL_CALL OPreparedStatement::setObjectWithInfo(sal_Int32 parameterIndex, const Any& value, sal_Int32 targetSqlType, sal_Int32 /* scale */) -{ - checkDisposed(OPreparedStatement::rBHelper.bDisposed); - MutexGuard aGuard(m_aMutex); - checkParameterIndex( parameterIndex ); - - const sal_Int32 nIndex = parameterIndex - 1; - if ( !value.hasValue() ) - { - free(m_binds[nIndex].buffer); - m_binds[nIndex].buffer = nullptr; - m_bindMetas[parameterIndex-1].is_null = 1; - return; - } - - switch ( targetSqlType ) - { - case DataType::DECIMAL: - case DataType::NUMERIC: - { - double nValue(0.0); - rtl::OUString sValue; - if ( value >>= nValue ) - { - setDouble( parameterIndex, nValue ); - break; - } - else if ( value >>= sValue ) - { - rtl::OString sAscii = rtl::OUStringToOString(sValue, getOwnConnection()->getConnectionEncoding()); - std::stringstream sStream{sAscii.getStr()}; - sStream >> nValue; - m_binds[nIndex].buffer_type = MYSQL_TYPE_DOUBLE; - mysqlc_sdbc_driver::resetSqlVar(&m_binds[nIndex].buffer, &nValue, MYSQL_TYPE_DOUBLE, sValue.getLength()); - m_bindMetas[nIndex].is_null = 0; - break; - } - -#if defined __GNUC__ && __GNUC__ >= 7 - [[fallthrough]]; -#else - BOOST_FALLTHROUGH; -#endif - } - - // TODO other types - - default: - mysqlc_sdbc_driver::throwInvalidArgumentException( "OPreparedStatement::setObjectWithInfo", *this ); - break; - } -} - -void SAL_CALL OPreparedStatement::setObjectNull(sal_Int32 parameter, sal_Int32 /* sqlType */, const rtl::OUString& /* typeName */) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); - checkParameterIndex(parameter); - - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OPreparedStatement::setObjectNull", *this); -} - -void SAL_CALL OPreparedStatement::setObject(sal_Int32 parameter, const Any& /* x */) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); - checkParameterIndex(parameter); - - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OPreparedStatement::setObject", *this); -} - -void SAL_CALL OPreparedStatement::setShort(sal_Int32 parameter, sal_Int16 x) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); - checkParameterIndex(parameter); - - const sal_Int32 nIndex = parameter-1; - m_binds[nIndex].buffer_type = MYSQL_TYPE_SHORT; - mysqlc_sdbc_driver::resetSqlVar(&m_binds[nIndex].buffer, &x, MYSQL_TYPE_SHORT); - m_bindMetas[nIndex].is_null = 0; -} - -void SAL_CALL OPreparedStatement::setBytes(sal_Int32 parameter, const Sequence< sal_Int8 >& x) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); - checkParameterIndex(parameter); - - const sal_Int32 nIndex = parameter-1; - m_binds[nIndex].buffer_type = MYSQL_TYPE_BLOB; // FIXME - mysqlc_sdbc_driver::resetSqlVar(&m_binds[nIndex].buffer, &x, MYSQL_TYPE_BLOB); - m_bindMetas[nIndex].is_null = 0; -} - -void SAL_CALL OPreparedStatement::setCharacterStream(sal_Int32 parameter, - const Reference< XInputStream >& /* x */, - sal_Int32 /* length */) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); - checkParameterIndex(parameter); - - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OPreparedStatement::setCharacterStream", *this); -} - -void SAL_CALL OPreparedStatement::setBinaryStream(sal_Int32 parameter, - const Reference< XInputStream >& /* x */, - sal_Int32 /* length */) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); - checkParameterIndex(parameter); - - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OPreparedStatement::setBinaryStream", *this); -} - -void SAL_CALL OPreparedStatement::clearParameters() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); - - for(size_t i=0; i<m_binds.size(); ++i) - { - m_bindMetas[i].is_null = 1; - free(m_binds[i].buffer); - m_binds[i].buffer = nullptr; - } -} - -void SAL_CALL OPreparedStatement::clearBatch() -{ - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OPreparedStatement::clearBatch", *this); -} - -void SAL_CALL OPreparedStatement::addBatch() -{ - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OPreparedStatement::addBatch", *this); -} - -Sequence< sal_Int32 > SAL_CALL OPreparedStatement::executeBatch() -{ - Sequence< sal_Int32 > aRet= Sequence< sal_Int32 > (); - return aRet; -} - -void OPreparedStatement::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle,const Any& rValue) -{ - switch(nHandle) - { - case PROPERTY_ID_RESULTSETCONCURRENCY: - break; - case PROPERTY_ID_RESULTSETTYPE: - break; - case PROPERTY_ID_FETCHDIRECTION: - break; - case PROPERTY_ID_USEBOOKMARKS: - break; - default: - /* XXX: Recursion ?? */ - OPreparedStatement::setFastPropertyValue_NoBroadcast(nHandle,rValue); - } -} - -void OPreparedStatement::checkParameterIndex(sal_Int32 column) -{ - if (column < 1 || column > static_cast<sal_Int32>(m_paramCount)) { - throw SQLException("Parameter index out of range", *this, rtl::OUString(), 1, Any ()); - } -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/mysqlc/source/mysqlc_preparedstatement.hxx b/mysqlc/source/mysqlc_preparedstatement.hxx deleted file mode 100644 index 7305c0dd005b..000000000000 --- a/mysqlc/source/mysqlc_preparedstatement.hxx +++ /dev/null @@ -1,163 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef INCLUDED_MYSQLC_SOURCE_MYSQLC_PREPAREDSTATEMENT_HXX -#define INCLUDED_MYSQLC_SOURCE_MYSQLC_PREPAREDSTATEMENT_HXX -#include "mysqlc_statement.hxx" -#include "mysqlc_resultset.hxx" - -#include <com/sun/star/sdbc/XPreparedStatement.hpp> -#include <com/sun/star/sdbc/XParameters.hpp> -#include <com/sun/star/sdbc/XResultSetMetaDataSupplier.hpp> -#include <com/sun/star/sdbc/XPreparedBatchExecution.hpp> -#include <com/sun/star/io/XInputStream.hpp> - -#include <cppconn/prepared_statement.h> - -namespace connectivity -{ - namespace mysqlc - { - using ::com::sun::star::uno::Reference; - using ::com::sun::star::uno::Any; - using ::com::sun::star::uno::Type; - using ::com::sun::star::sdbc::SQLException; - using ::com::sun::star::uno::RuntimeException; - using ::com::sun::star::sdbc::XResultSetMetaData; - - struct BindMetaData - { - char is_null = 0; - unsigned long length = 0; - char error = 0; - }; - - typedef ::cppu::ImplHelper5< css::sdbc::XPreparedStatement, - css::sdbc::XParameters, - css::sdbc::XPreparedBatchExecution, - css::sdbc::XResultSetMetaDataSupplier, - css::lang::XServiceInfo> OPreparedStatement_BASE; - - class OPreparedStatement final : public OCommonStatement, - public OPreparedStatement_BASE - { - unsigned int m_paramCount = 0; // number of placeholders - Reference< XResultSetMetaData > m_xMetaData; - MYSQL_STMT* m_pStmt; - std::vector<MYSQL_BIND> m_binds; - std::vector<BindMetaData> m_bindMetas; - - void checkParameterIndex(sal_Int32 parameter); - - void SAL_CALL setFastPropertyValue_NoBroadcast(sal_Int32 nHandle, const Any& rValue) SAL_OVERRIDE; - virtual ~OPreparedStatement(); - public: - virtual rtl::OUString SAL_CALL getImplementationName() SAL_OVERRIDE; - - virtual sal_Bool SAL_CALL supportsService( - rtl::OUString const & ServiceName) - SAL_OVERRIDE; - - virtual css::uno::Sequence<rtl::OUString> SAL_CALL - getSupportedServiceNames() - SAL_OVERRIDE; - - OPreparedStatement(OConnection* _pConnection, MYSQL_STMT* pStmt); - - //XInterface - Any SAL_CALL queryInterface(const Type & rType) SAL_OVERRIDE; - void SAL_CALL acquire() throw() SAL_OVERRIDE; - void SAL_CALL release() throw() SAL_OVERRIDE; - - //XTypeProvider - css::uno::Sequence< Type > SAL_CALL getTypes() SAL_OVERRIDE; - - // XPreparedStatement - Reference< css::sdbc::XResultSet > SAL_CALL executeQuery() SAL_OVERRIDE; - sal_Int32 SAL_CALL executeUpdate() SAL_OVERRIDE; - sal_Bool SAL_CALL execute() SAL_OVERRIDE; - Reference< css::sdbc::XConnection > SAL_CALL getConnection() SAL_OVERRIDE; - - // XStatement - using OCommonStatement::executeQuery; - using OCommonStatement::executeUpdate; - using OCommonStatement::execute; - - // XParameters - void SAL_CALL setNull(sal_Int32 parameter, sal_Int32 sqlType) SAL_OVERRIDE; - - void SAL_CALL setObjectNull(sal_Int32 parameter, sal_Int32 sqlType, const rtl::OUString& typeName) SAL_OVERRIDE; - - void SAL_CALL setBoolean(sal_Int32 parameter, sal_Bool x) SAL_OVERRIDE; - - void SAL_CALL setByte(sal_Int32 parameter, sal_Int8 x) SAL_OVERRIDE; - - void SAL_CALL setShort(sal_Int32 parameter, sal_Int16 x) SAL_OVERRIDE; - - void SAL_CALL setInt(sal_Int32 parameter, sal_Int32 x) SAL_OVERRIDE; - - void SAL_CALL setLong(sal_Int32 parameter, sal_Int64 x) SAL_OVERRIDE; - - void SAL_CALL setFloat(sal_Int32 parameter, float x) SAL_OVERRIDE; - - void SAL_CALL setDouble(sal_Int32 parameter, double x) SAL_OVERRIDE; - - void SAL_CALL setString(sal_Int32 parameter, const rtl::OUString& x) SAL_OVERRIDE; - - void SAL_CALL setBytes(sal_Int32 parameter, const css::uno::Sequence< sal_Int8 >& x) SAL_OVERRIDE; - - void SAL_CALL setDate(sal_Int32 parameter, const css::util::Date& x) SAL_OVERRIDE; - - void SAL_CALL setTime(sal_Int32 parameter, const css::util::Time& x) SAL_OVERRIDE; - void SAL_CALL setTimestamp(sal_Int32 parameter, const css::util::DateTime& x) SAL_OVERRIDE; - - void SAL_CALL setBinaryStream(sal_Int32 parameter, const Reference< css::io::XInputStream >& x, sal_Int32 length) SAL_OVERRIDE; - - void SAL_CALL setCharacterStream(sal_Int32 parameter, const Reference< css::io::XInputStream >& x, sal_Int32 length) SAL_OVERRIDE; - - void SAL_CALL setObject(sal_Int32 parameter, const Any& x) SAL_OVERRIDE; - - void SAL_CALL setObjectWithInfo(sal_Int32 parameter, const Any& x, sal_Int32 targetSqlType, sal_Int32 scale) SAL_OVERRIDE; - - void SAL_CALL setRef(sal_Int32 parameter, const Reference< css::sdbc::XRef >& x) SAL_OVERRIDE; - - void SAL_CALL setBlob(sal_Int32 parameter, const Reference< css::sdbc::XBlob >& x) SAL_OVERRIDE; - - void SAL_CALL setClob(sal_Int32 parameter, const Reference< css::sdbc::XClob >& x) SAL_OVERRIDE; - - void SAL_CALL setArray(sal_Int32 parameter, const Reference< css::sdbc::XArray >& x) SAL_OVERRIDE; - - void SAL_CALL clearParameters() SAL_OVERRIDE; - - // XPreparedBatchExecution - void SAL_CALL addBatch() SAL_OVERRIDE; - void SAL_CALL clearBatch() SAL_OVERRIDE; - css::uno::Sequence< sal_Int32 > SAL_CALL executeBatch() SAL_OVERRIDE; - - // XCloseable - void SAL_CALL close() SAL_OVERRIDE; - - // XResultSetMetaDataSupplier - Reference< css::sdbc::XResultSetMetaData > SAL_CALL getMetaData() SAL_OVERRIDE; - }; - } /* mysqlc */ -} /* connectivity */ -#endif // INCLUDED_MYSQLC_SOURCE_MYSQLC_PREPAREDSTATEMENT_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/mysqlc/source/mysqlc_propertyids.hxx b/mysqlc/source/mysqlc_propertyids.hxx deleted file mode 100644 index 6d99d835ef7f..000000000000 --- a/mysqlc/source/mysqlc_propertyids.hxx +++ /dev/null @@ -1,52 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef INCLUDED_MYSQLC_SOURCE_MYSQLC_PROPERTYIDS_HXX -#define INCLUDED_MYSQLC_SOURCE_MYSQLC_PROPERTYIDS_HXX - -// this define has to be set to split the names into different dll's or so's -// every dll has his own set of property names -#include <rtl/ustring.hxx> -#include <map> - -namespace connectivity -{ -namespace mysqlc -{ -enum -{ - PROPERTY_ID_QUERYTIMEOUT = 1, - PROPERTY_ID_MAXFIELDSIZE, - PROPERTY_ID_MAXROWS, - PROPERTY_ID_CURSORNAME, - PROPERTY_ID_RESULTSETCONCURRENCY, - PROPERTY_ID_RESULTSETTYPE, - PROPERTY_ID_FETCHDIRECTION, - PROPERTY_ID_FETCHSIZE, - PROPERTY_ID_ESCAPEPROCESSING, - PROPERTY_ID_USEBOOKMARKS, - PROPERTY_ID_ISBOOKMARKABLE -}; -}/* mysqlc */ -}/* connectivity */ - -#endif // INCLUDED_MYSQLC_SOURCE_MYSQLC_PROPERTYIDS_HXX - - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/mysqlc/source/mysqlc_resultset.cxx b/mysqlc/source/mysqlc_resultset.cxx deleted file mode 100644 index 252f6633089d..000000000000 --- a/mysqlc/source/mysqlc_resultset.cxx +++ /dev/null @@ -1,1078 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#include "mysqlc_propertyids.hxx" -#include "mysqlc_general.hxx" -#include "mysqlc_resultset.hxx" -#include "mysqlc_resultsetmetadata.hxx" - -#include <com/sun/star/beans/PropertyAttribute.hpp> -#include <com/sun/star/lang/DisposedException.hpp> -#include <com/sun/star/sdbc/DataType.hpp> -#include <com/sun/star/sdbc/ResultSetConcurrency.hpp> -#include <com/sun/star/sdbc/ResultSetType.hpp> -#include <com/sun/star/sdbc/FetchDirection.hpp> -#include <com/sun/star/sdbcx/CompareBookmark.hpp> -#include <cppuhelper/supportsservice.hxx> -#include <cppuhelper/typeprovider.hxx> - -using namespace rtl; -#include <comphelper/string.hxx> - -#include <cstdlib> - -using namespace connectivity::mysqlc; -using namespace cppu; -using namespace com::sun::star; -using namespace com::sun::star::lang; -using namespace com::sun::star::beans; -using namespace com::sun::star::sdbc; -using namespace com::sun::star::sdbcx; -using namespace com::sun::star::container; -using namespace com::sun::star::io; -using namespace com::sun::star::util; -using namespace ::comphelper; -using ::osl::MutexGuard; - -#include <cppconn/resultset.h> -#include <cppconn/resultset_metadata.h> - -#include <stdio.h> - -namespace -{ - // copied from string misc, it should be replaced when library is not an - // extension anymore - std::vector<OUString> lcl_split(const OUString& rStr, sal_Unicode cSeparator) - { - std::vector< OUString > vec; - sal_Int32 idx = 0; - do - { - OUString kw = - rStr.getToken(0, cSeparator, idx); - kw = kw.trim(); - if (!kw.isEmpty()) - { - vec.push_back(kw); - } - } while (idx >= 0); - return vec; - } -} - -rtl::OUString SAL_CALL OResultSet::getImplementationName() -{ - return rtl::OUString( "com.sun.star.sdbcx.mysqlc.ResultSet" ); -} - -uno::Sequence< rtl::OUString > SAL_CALL OResultSet::getSupportedServiceNames() -{ - uno::Sequence< rtl::OUString > aSupported(2); - aSupported[0] = "com.sun.star.sdbc.ResultSet"; - aSupported[1] = "com.sun.star.sdbcx.ResultSet"; - return aSupported; -} - -sal_Bool SAL_CALL OResultSet::supportsService(const rtl::OUString& _rServiceName) -{ - return cppu::supportsService(this, _rServiceName); -} - -OResultSet::OResultSet(OConnection& rConn, OCommonStatement * pStmt, MYSQL_RES * pResult, rtl_TextEncoding _encoding ) - : OResultSet_BASE(m_aMutex) - ,OPropertySetHelper(OResultSet_BASE::rBHelper) - ,m_rConnection(rConn) - ,m_pMysql(rConn.getMysqlConnection()) - ,m_aStatement(static_cast<OWeakObject*>(pStmt)) - ,m_xMetaData(nullptr) - ,m_pResult(pResult) - ,fieldCount( 0 ) - ,m_encoding( _encoding ) -{ - fieldCount = mysql_num_fields(pResult); -} - -OResultSet::~OResultSet() -{ -} - -void OResultSet::disposing() -{ - OPropertySetHelper::disposing(); - - MutexGuard aGuard(m_aMutex); - - m_aStatement = nullptr; - m_xMetaData = nullptr; -} - -Any SAL_CALL OResultSet::queryInterface(const Type & rType) -{ - Any aRet = OPropertySetHelper::queryInterface(rType); - if (!aRet.hasValue()) { - aRet = OResultSet_BASE::queryInterface(rType); - } - return aRet; -} - -uno::Sequence< Type > SAL_CALL OResultSet::getTypes() -{ - OTypeCollection aTypes( cppu::UnoType<XMultiPropertySet>::get(), - cppu::UnoType<XFastPropertySet>::get(), - cppu::UnoType<XPropertySet>::get()); - - return concatSequences(aTypes.getTypes(), OResultSet_BASE::getTypes()); -} - -sal_Int32 SAL_CALL OResultSet::findColumn(const rtl::OUString& columnName) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - - MYSQL_FIELD* pFields = mysql_fetch_field(m_pResult); - for(unsigned int i = 0; i< fieldCount; ++i) - { - if(columnName.equalsIgnoreAsciiCaseAscii(pFields[i].name)) - return i + 1; // sdbc indexes from 1 - } - - throw SQLException( - "The column name '" + columnName + "' is not valid.", - *this, - rtl::OUString("42S22"), - 0, - Any() - ); -} - -uno::Reference< XInputStream > SAL_CALL OResultSet::getBinaryStream(sal_Int32 column) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSet::getBinaryStream", *this); - return nullptr; -} - -uno::Reference< XInputStream > SAL_CALL OResultSet::getCharacterStream(sal_Int32 column) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSet::getCharacterStream", *this); - return nullptr; -} - -sal_Bool SAL_CALL OResultSet::getBoolean(sal_Int32 column) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - - char* pValue = m_aRow[column-1]; - if(!pValue) - { - m_bWasNull = true; - return false; - } - - m_bWasNull = false; - return static_cast<bool>(std::atoi(pValue)); -} - -sal_Int8 SAL_CALL OResultSet::getByte(sal_Int32 column) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - - char* pValue = m_aRow[column-1]; - if(!pValue) - { - m_bWasNull = true; - return 0; - } - - m_bWasNull = false; - return static_cast<sal_Int8>(std::atoi(pValue)); -} - -uno::Sequence< sal_Int8 > SAL_CALL OResultSet::getBytes(sal_Int32 column) -{ - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - MutexGuard aGuard(m_aMutex); - - char* pValue = m_aRow[column-1]; - if(!pValue) - { - m_bWasNull = true; - return uno::Sequence< sal_Int8>(); - } - m_bWasNull = false; - return uno::Sequence< sal_Int8 > (reinterpret_cast<sal_Int8 const *>( - pValue), m_aLengths[column-1]); -} - -Date SAL_CALL OResultSet::getDate(sal_Int32 column) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - - Date d; // TODO initialize - char* dateStr = m_aRow[column-1]; - if(!dateStr) - { - m_bWasNull = true; - return d; - } - - rtl::OString dateString(dateStr); - rtl::OString token; - sal_Int32 nIndex = 0, i=0; - do { - token = dateString.getToken (0, '-', nIndex); - switch (i) { - case 0: - d.Year = static_cast<sal_uInt16>(token.toUInt32()); - break; - case 1: - d.Month = static_cast<sal_uInt16>(token.toUInt32()); - break; - case 2: - d.Day = static_cast<sal_uInt16>(token.toUInt32()); - break; - default:; - } - i++; - } while (nIndex >= 0); - m_bWasNull = false; - return d; -} - -double SAL_CALL OResultSet::getDouble(sal_Int32 column) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - - char* pValue = m_aRow[column-1]; - if(!pValue) - { - m_bWasNull = true; - return 0.0; - } - - m_bWasNull = false; - return std::strtod(pValue, nullptr); -} - -float SAL_CALL OResultSet::getFloat(sal_Int32 column) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - - char* pValue = m_aRow[column-1]; - if(!pValue) - { - m_bWasNull = true; - return 0.0f; - } - - m_bWasNull = false; - return std::strtod(pValue, nullptr); -} - -sal_Int32 SAL_CALL OResultSet::getInt(sal_Int32 column) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - char* pValue = m_aRow[column-1]; - if(!pValue) - { - m_bWasNull = true; - return 0; - } - - m_bWasNull = false; - return std::atoi(pValue); -} - -sal_Int32 SAL_CALL OResultSet::getRow() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - - return static_cast<sal_Int32>(mysql_field_tell(m_pResult)); -} - -sal_Int64 SAL_CALL OResultSet::getLong(sal_Int32 column) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - - char* pValue = m_aRow[column-1]; - if(!pValue) - { - m_bWasNull = true; - return 0LL; - } - - m_bWasNull = false; - return std::atol(pValue); -} - -uno::Reference< XResultSetMetaData > SAL_CALL OResultSet::getMetaData() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - if (!m_xMetaData.is()) { - m_xMetaData = new OResultSetMetaData(m_rConnection, m_pResult, m_encoding); - } - return m_xMetaData; -} - -uno::Reference< XArray > SAL_CALL OResultSet::getArray(sal_Int32 column) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSet::getArray", *this); - return nullptr; -} - -uno::Reference< XClob > SAL_CALL OResultSet::getClob(sal_Int32 column) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSet::getClob", *this); - return nullptr; -} - -uno::Reference< XBlob > SAL_CALL OResultSet::getBlob(sal_Int32 column) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSet::getBlob", *this); - return nullptr; -} - -uno::Reference< XRef > SAL_CALL OResultSet::getRef(sal_Int32 column) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSet::getRef", *this); - return nullptr; -} - -Any SAL_CALL OResultSet::getObject(sal_Int32 column, const uno::Reference< XNameAccess >& /* typeMap */) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - - Any aRet= Any(); - - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSet::getObject", *this); - return aRet; -} - -sal_Int16 SAL_CALL OResultSet::getShort(sal_Int32 column) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - - char* pValue = m_aRow[column-1]; - if(!pValue) - { - m_bWasNull = true; - return 0; - } - m_bWasNull = false; - return std::atoi(pValue); -} - -rtl::OUString SAL_CALL OResultSet::getString(sal_Int32 column) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - - char* pValue = m_aRow[column-1]; - if(!pValue) - { - m_bWasNull = true; - return rtl::OUString{}; - } - m_bWasNull = false; - return rtl::OUString(pValue, static_cast<sal_Int32>(m_aLengths[column-1]), m_encoding); -} - -Time SAL_CALL OResultSet::getTime(sal_Int32 column) -{ - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - MutexGuard aGuard(m_aMutex); - - checkColumnIndex(column); - Time t; // initialize - char* pValue = m_aRow[column-1]; - if(!pValue) - { - m_bWasNull = true; - return t; - } - rtl::OUString timeString{pValue, static_cast<sal_Int32>(m_aLengths[column-1]), m_encoding}; - rtl::OUString token; - sal_Int32 nIndex, i=0; - - nIndex = timeString.indexOf(' ') + 1; - do { - token = timeString.getToken (0, ':', nIndex); - switch (i) { - case 0: - t.Hours = static_cast<sal_uInt16>(token.toUInt32()); - break; - case 1: - t.Minutes = static_cast<sal_uInt16>(token.toUInt32()); - break; - case 2: - t.Seconds = static_cast<sal_uInt16>(token.toUInt32()); - break; - } - i++; - } while (nIndex >= 0); - - m_bWasNull = false; - return t; -} - -DateTime SAL_CALL OResultSet::getTimestamp(sal_Int32 column) -{ - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - MutexGuard aGuard(m_aMutex); - checkColumnIndex(column); - - char* pValue = m_aRow[column-1]; - if(!pValue) - { - m_bWasNull = true; - return DateTime{}; // init - } - - // YY-MM-DD HH:MM:SS - std::vector<rtl::OUString> dateAndTime = lcl_split(rtl::OUString{pValue, - static_cast<sal_Int32>(m_aLengths[column-1]), m_encoding}, - u' '); - - auto dateParts = lcl_split(dateAndTime.at(0), u'-'); - auto timeParts = lcl_split(dateAndTime.at(1), u':'); - - DateTime dt; - - dt.Year = dateParts.at(0).toUInt32(); - dt.Month = dateParts.at(1).toUInt32(); - dt.Day = dateParts.at(2).toUInt32(); - dt.Hours = timeParts.at(0).toUInt32(); - dt.Minutes = timeParts.at(1).toUInt32(); - dt.Seconds = timeParts.at(2).toUInt32(); - m_bWasNull = false; - return dt; -} - -sal_Bool SAL_CALL OResultSet::isBeforeFirst() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - - return m_nCurrentField == 0; -} - -sal_Bool SAL_CALL OResultSet::isAfterLast() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - - return m_nCurrentField >= static_cast<sal_Int32>(fieldCount); -} - -sal_Bool SAL_CALL OResultSet::isFirst() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - - return m_nCurrentField == 1 && !isAfterLast(); -} - -sal_Bool SAL_CALL OResultSet::isLast() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - - return mysql_field_tell(m_pResult) == fieldCount; -} - -void SAL_CALL OResultSet::beforeFirst() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSet::beforeFirst", *this); -} - -void SAL_CALL OResultSet::afterLast() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSet::afterLast", *this); -} - -void SAL_CALL OResultSet::close() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - - mysql_free_result(m_pResult); - dispose(); -} - -sal_Bool SAL_CALL OResultSet::first() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - - mysql_data_seek(m_pResult, 0); - next(); - - return true; -} - -sal_Bool SAL_CALL OResultSet::last() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - - mysql_data_seek(m_pResult, fieldCount-1); - next(); - - return true; -} - -sal_Bool SAL_CALL OResultSet::absolute(sal_Int32 row) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - - sal_Int32 nFields = static_cast<sal_Int32>(fieldCount); - sal_Int32 nToGo = row < 0 ? nFields - row : row-1; - - if(nToGo >= nFields) - nToGo = nFields - 1; - if(nToGo < 0) - nToGo = 0; - - mysql_data_seek(m_pResult, nToGo); - next(); - - return true; -} - -sal_Bool SAL_CALL OResultSet::relative(sal_Int32 row) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - - sal_Int32 nFields = static_cast<sal_Int32>(fieldCount); - if(row == 0) - return true; - - sal_Int32 nToGo = m_nCurrentField + row; - if(nToGo >= nFields) - nToGo = nFields - 1; - if(nToGo < 0) - nToGo = 0; - - mysql_data_seek(m_pResult, nToGo); - next(); - - return true; -} - -sal_Bool SAL_CALL OResultSet::previous() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - - if(m_nCurrentField <= 1) - return false; - - mysql_data_seek(m_pResult, m_nCurrentField-2); - next(); - return true; -} - -uno::Reference< uno::XInterface > SAL_CALL OResultSet::getStatement() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - - return m_aStatement.get(); -} - -sal_Bool SAL_CALL OResultSet::rowDeleted() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - - return false; -} - -sal_Bool SAL_CALL OResultSet::rowInserted() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - - return false; -} - -sal_Bool SAL_CALL OResultSet::rowUpdated() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - - return false; -} - -sal_Bool SAL_CALL OResultSet::next() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - - m_aRow = mysql_fetch_row(m_pResult); - m_aLengths = mysql_fetch_lengths(m_pResult); - m_nCurrentField = mysql_field_tell(m_pResult); - - unsigned errorNum = mysql_errno(m_pMysql); - if(errorNum) - mysqlc_sdbc_driver::throwSQLExceptionWithMsg(mysql_error(m_pMysql), - errorNum, *this, m_encoding); - - return m_aRow != nullptr; -} - -sal_Bool SAL_CALL OResultSet::wasNull() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - - return m_bWasNull; -} - -void SAL_CALL OResultSet::cancel() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); -} - -void SAL_CALL OResultSet::clearWarnings() -{ -} - -Any SAL_CALL OResultSet::getWarnings() -{ - Any aRet= Any(); - return aRet; -} - -void SAL_CALL OResultSet::insertRow() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - // you only have to implement this if you want to insert new rows - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSet::insertRow", *this); -} - -void SAL_CALL OResultSet::updateRow() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - - // only when you allow updates - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSet::updateRow", *this); -} - -void SAL_CALL OResultSet::deleteRow() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSet::deleteRow", *this); -} - -void SAL_CALL OResultSet::cancelRowUpdates() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSet::cancelRowUpdates", *this); -} - -void SAL_CALL OResultSet::moveToInsertRow() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - - // only when you allow insert's - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSet::moveToInsertRow", *this); -} - -void SAL_CALL OResultSet::moveToCurrentRow() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); -} - -void SAL_CALL OResultSet::updateNull(sal_Int32 column) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSet::updateNull", *this); -} - -void SAL_CALL OResultSet::updateBoolean(sal_Int32 column, sal_Bool /* x */) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSet::updateBoolean", *this); -} - -void SAL_CALL OResultSet::updateByte(sal_Int32 column, sal_Int8 /* x */) -{ - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - MutexGuard aGuard(m_aMutex); - checkColumnIndex(column); - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSet::updateByte", *this); -} - -void SAL_CALL OResultSet::updateShort(sal_Int32 column, sal_Int16 /* x */) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSet::updateShort", *this); -} - -void SAL_CALL OResultSet::updateInt(sal_Int32 column, sal_Int32 /* x */) -{ - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - MutexGuard aGuard(m_aMutex); - checkColumnIndex(column); - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSet::updateInt", *this); -} - -void SAL_CALL OResultSet::updateLong(sal_Int32 column, sal_Int64 /* x */) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSet::updateLong", *this); -} - -void SAL_CALL OResultSet::updateFloat(sal_Int32 column, float /* x */) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSet::updateFloat", *this); -} - -void SAL_CALL OResultSet::updateDouble(sal_Int32 column, double /* x */) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSet::updateDouble", *this); -} - -void SAL_CALL OResultSet::updateString(sal_Int32 column, const rtl::OUString& /* x */) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSet::updateString", *this); -} - -void SAL_CALL OResultSet::updateBytes(sal_Int32 column, const uno::Sequence< sal_Int8 >& /* x */) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSet::updateBytes", *this); -} - -void SAL_CALL OResultSet::updateDate(sal_Int32 column, const Date& /* x */) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSet::updateDate", *this); -} - -void SAL_CALL OResultSet::updateTime(sal_Int32 column, const Time& /* x */) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSet::updateTime", *this); -} - -void SAL_CALL OResultSet::updateTimestamp(sal_Int32 column, const DateTime& /* x */) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSet::updateTimestamp", *this); -} - -void SAL_CALL OResultSet::updateBinaryStream(sal_Int32 column, const uno::Reference< XInputStream >& /* x */, - sal_Int32 /* length */) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSet::updateBinaryStream", *this); -} - -void SAL_CALL OResultSet::updateCharacterStream(sal_Int32 column, const uno::Reference< XInputStream >& /* x */, - sal_Int32 /* length */) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSet::updateCharacterStream", *this); -} - -void SAL_CALL OResultSet::refreshRow() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSet::refreshRow", *this); -} - -void SAL_CALL OResultSet::updateObject(sal_Int32 column, const Any& /* x */) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSet::updateObject", *this); -} - -void SAL_CALL OResultSet::updateNumericObject(sal_Int32 column, const Any& /* x */, sal_Int32 /* scale */) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - checkColumnIndex(column); - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSet::updateNumericObject", *this); -} - -// XRowLocate -Any SAL_CALL OResultSet::getBookmark() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - Any aRet = Any(); - - // if you don't want to support bookmark you must remove the XRowLocate interface - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSet::getBookmark", *this); - - return aRet; -} - -sal_Bool SAL_CALL OResultSet::moveToBookmark(const Any& /* bookmark */) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - - return false; -} - -sal_Bool SAL_CALL OResultSet::moveRelativeToBookmark(const Any& /* bookmark */, sal_Int32 /* rows */) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSet::moveRelativeToBookmark", *this); - return false; -} - -sal_Int32 SAL_CALL OResultSet::compareBookmarks(const Any& /* n1 */, const Any& /* n2 */) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSet::compareBookmarks", *this); - - return CompareBookmark::NOT_EQUAL; -} - -sal_Bool SAL_CALL OResultSet::hasOrderedBookmarks() -{ - return false; -} - -sal_Int32 SAL_CALL OResultSet::hashBookmark(const Any& /* bookmark */) -{ - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSet::hashBookmark", *this); - return 0; -} - -// XDeleteRows -uno::Sequence< sal_Int32 > SAL_CALL OResultSet::deleteRows(const uno::Sequence< Any >& /* rows */) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - uno::Sequence< sal_Int32 > aRet = uno::Sequence< sal_Int32 >(); - - mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSet::deleteRows", *this); - return aRet; -} - -IPropertyArrayHelper * OResultSet::createArrayHelper() const -{ - uno::Sequence< Property > aProps(5); - Property* pProperties = aProps.getArray(); - sal_Int32 nPos = 0; - pProperties[nPos++] = Property("FetchDirection", PROPERTY_ID_FETCHDIRECTION, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = Property("FetchSize", PROPERTY_ID_FETCHSIZE, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = Property("IsBookmarkable", - PROPERTY_ID_ISBOOKMARKABLE, cppu::UnoType<bool>::get(), PropertyAttribute::READONLY); - pProperties[nPos++] = Property("ResultSetConcurrency", - PROPERTY_ID_RESULTSETCONCURRENCY, cppu::UnoType<sal_Int32>::get(), PropertyAttribute::READONLY); - pProperties[nPos++] = Property("ResultSetType", - PROPERTY_ID_RESULTSETTYPE, cppu::UnoType<sal_Int32>::get(), PropertyAttribute::READONLY); - - return new OPropertyArrayHelper(aProps); -} - -IPropertyArrayHelper & OResultSet::getInfoHelper() -{ - return *getArrayHelper(); -} - -sal_Bool OResultSet::convertFastPropertyValue(Any & /* rConvertedValue */, - Any & /* rOldValue */, - sal_Int32 nHandle, - const Any& /* rValue */) -{ - switch (nHandle) { - case PROPERTY_ID_ISBOOKMARKABLE: - case PROPERTY_ID_CURSORNAME: - case PROPERTY_ID_RESULTSETCONCURRENCY: - case PROPERTY_ID_RESULTSETTYPE: - throw css::lang::IllegalArgumentException(); - case PROPERTY_ID_FETCHDIRECTION: - case PROPERTY_ID_FETCHSIZE: - default: - ; - } - return false; -} - -void OResultSet::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle, const Any& /* rValue */) -{ - switch (nHandle) { - case PROPERTY_ID_ISBOOKMARKABLE: - case PROPERTY_ID_CURSORNAME: - case PROPERTY_ID_RESULTSETCONCURRENCY: - case PROPERTY_ID_RESULTSETTYPE: - throw uno::Exception("cannot set prop " + rtl::OUString::number(nHandle), nullptr); - case PROPERTY_ID_FETCHDIRECTION: - break; - case PROPERTY_ID_FETCHSIZE: - break; - default: - ; - } -} - -void OResultSet::getFastPropertyValue(Any& _rValue, sal_Int32 nHandle) const -{ - switch (nHandle) { - case PROPERTY_ID_ISBOOKMARKABLE: - _rValue <<= false; - break; - case PROPERTY_ID_CURSORNAME: - break; - case PROPERTY_ID_RESULTSETCONCURRENCY: - _rValue <<= ResultSetConcurrency::READ_ONLY; - break; - case PROPERTY_ID_RESULTSETTYPE: - _rValue <<= ResultSetType::SCROLL_INSENSITIVE; - break; - case PROPERTY_ID_FETCHDIRECTION: - _rValue <<= FetchDirection::FORWARD; - break; - case PROPERTY_ID_FETCHSIZE: - _rValue <<= sal_Int32(50); - break; - ; - default: - ; - } -} - -void SAL_CALL OResultSet::acquire() - throw() -{ - OResultSet_BASE::acquire(); -} - -void SAL_CALL OResultSet::release() - throw() -{ - OResultSet_BASE::release(); -} - -css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL OResultSet::getPropertySetInfo() -{ - return ::cppu::OPropertySetHelper::createPropertySetInfo(getInfoHelper()); -} - -void OResultSet::checkColumnIndex(sal_Int32 index) -{ - if (index < 1 || index > static_cast<int>(fieldCount)) { - /* static object for efficiency or thread safety is a problem ? */ - throw SQLException("index out of range", *this, rtl::OUString(), 1, Any()); - } -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/mysqlc/source/mysqlc_resultset.hxx b/mysqlc/source/mysqlc_resultset.hxx deleted file mode 100644 index 407798c9cc96..000000000000 --- a/mysqlc/source/mysqlc_resultset.hxx +++ /dev/null @@ -1,247 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef INCLUDED_MYSQLC_SOURCE_MYSQLC_RESULTSET_HXX -#define INCLUDED_MYSQLC_SOURCE_MYSQLC_RESULTSET_HXX - -#include "mysqlc_preparedstatement.hxx" -#include "mysqlc_statement.hxx" -#include "mysqlc_subcomponent.hxx" -#include "mysqlc_connection.hxx" - -#include <com/sun/star/sdbc/XCloseable.hpp> -#include <com/sun/star/sdbc/XColumnLocate.hpp> -#include <com/sun/star/sdbc/XResultSet.hpp> -#include <com/sun/star/sdbc/XResultSetMetaDataSupplier.hpp> -#include <com/sun/star/sdbc/XResultSetUpdate.hpp> -#include <com/sun/star/sdbc/XRow.hpp> -#include <com/sun/star/sdbc/XRowUpdate.hpp> -#include <com/sun/star/sdbc/XWarningsSupplier.hpp> -#include <com/sun/star/sdbcx/XDeleteRows.hpp> -#include <com/sun/star/sdbcx/XRowLocate.hpp> -#include <com/sun/star/util/XCancellable.hpp> - -#include <cppuhelper/compbase12.hxx> - - -namespace connectivity -{ - namespace mysqlc - { - using ::com::sun::star::sdbc::SQLException; - using ::com::sun::star::uno::RuntimeException; - using ::com::sun::star::uno::Any; - - /* - ** OResultSet - */ - typedef ::cppu::WeakComponentImplHelper12< css::sdbc::XResultSet, - css::sdbc::XRow, - css::sdbc::XResultSetMetaDataSupplier, - css::util::XCancellable, - css::sdbc::XWarningsSupplier, - css::sdbc::XResultSetUpdate, - css::sdbc::XRowUpdate, - css::sdbcx::XRowLocate, - css::sdbcx::XDeleteRows, - css::sdbc::XCloseable, - css::sdbc::XColumnLocate, - css::lang::XServiceInfo> OResultSet_BASE; - - class OResultSet final : public OBase_Mutex, - public OResultSet_BASE, - public ::cppu::OPropertySetHelper, - public OPropertyArrayUsageHelper<OResultSet> - { - OConnection &m_rConnection; - MYSQL_ROW m_aRow; - unsigned long *m_aLengths = nullptr; - MYSQL *m_pMysql = nullptr; - css::uno::WeakReferenceHelper m_aStatement; - css::uno::Reference< css::sdbc::XResultSetMetaData> m_xMetaData; - MYSQL_RES *m_pResult; - unsigned int fieldCount; - rtl_TextEncoding m_encoding; - sal_Int32 m_nCurrentField = 0; - bool m_bWasNull = false; // did the last getXXX result null? - // OPropertyArrayUsageHelper - ::cppu::IPropertyArrayHelper* createArrayHelper() const SAL_OVERRIDE; - // OPropertySetHelper - ::cppu::IPropertyArrayHelper & SAL_CALL getInfoHelper() SAL_OVERRIDE; - - sal_Bool SAL_CALL convertFastPropertyValue(Any & rConvertedValue, Any & rOldValue, sal_Int32 nHandle, const Any& rValue) SAL_OVERRIDE; - - void SAL_CALL setFastPropertyValue_NoBroadcast(sal_Int32 nHandle, const Any& rValue) SAL_OVERRIDE; - - void SAL_CALL getFastPropertyValue(Any& rValue, sal_Int32 nHandle) const SAL_OVERRIDE; - - // you can't delete objects of this type - virtual ~OResultSet(); - - public: - virtual rtl::OUString SAL_CALL getImplementationName() SAL_OVERRIDE; - - virtual sal_Bool SAL_CALL supportsService( - rtl::OUString const & ServiceName) - SAL_OVERRIDE; - - virtual css::uno::Sequence<rtl::OUString> SAL_CALL - getSupportedServiceNames() - SAL_OVERRIDE; - - OResultSet(OConnection& rConn, OCommonStatement* pStmt, MYSQL_RES *pResult, rtl_TextEncoding _encoding ); - - // ::cppu::OComponentHelper - void SAL_CALL disposing() SAL_OVERRIDE; - - // XInterface - Any SAL_CALL queryInterface(const css::uno::Type & rType) SAL_OVERRIDE; - - void SAL_CALL acquire() throw() SAL_OVERRIDE; - void SAL_CALL release() throw() SAL_OVERRIDE; - - //XTypeProvider - css::uno::Sequence< css::uno::Type > SAL_CALL getTypes() SAL_OVERRIDE; - - // XPropertySet - css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo() SAL_OVERRIDE; - - // XResultSet - sal_Bool SAL_CALL next() SAL_OVERRIDE; - sal_Bool SAL_CALL isBeforeFirst() SAL_OVERRIDE; - sal_Bool SAL_CALL isAfterLast() SAL_OVERRIDE; - sal_Bool SAL_CALL isFirst() SAL_OVERRIDE; - sal_Bool SAL_CALL isLast() SAL_OVERRIDE; - - void SAL_CALL beforeFirst() SAL_OVERRIDE; - void SAL_CALL afterLast() SAL_OVERRIDE; - - sal_Bool SAL_CALL first() SAL_OVERRIDE; - sal_Bool SAL_CALL last() SAL_OVERRIDE; - - sal_Int32 SAL_CALL getRow() SAL_OVERRIDE; - - sal_Bool SAL_CALL absolute(sal_Int32 row) SAL_OVERRIDE; - sal_Bool SAL_CALL relative(sal_Int32 rows) SAL_OVERRIDE; - sal_Bool SAL_CALL previous() SAL_OVERRIDE; - - void SAL_CALL refreshRow() SAL_OVERRIDE; - - sal_Bool SAL_CALL rowUpdated() SAL_OVERRIDE; - sal_Bool SAL_CALL rowInserted() SAL_OVERRIDE; - sal_Bool SAL_CALL rowDeleted() SAL_OVERRIDE; - - css::uno::Reference< css::uno::XInterface > SAL_CALL getStatement() SAL_OVERRIDE; - // XRow - sal_Bool SAL_CALL wasNull() SAL_OVERRIDE; - - rtl::OUString SAL_CALL getString(sal_Int32 column) SAL_OVERRIDE; - - sal_Bool SAL_CALL getBoolean(sal_Int32 column) SAL_OVERRIDE; - sal_Int8 SAL_CALL getByte(sal_Int32 column) SAL_OVERRIDE; - sal_Int16 SAL_CALL getShort(sal_Int32 column) SAL_OVERRIDE; - sal_Int32 SAL_CALL getInt(sal_Int32 column) SAL_OVERRIDE; - sal_Int64 SAL_CALL getLong(sal_Int32 column) SAL_OVERRIDE; - - float SAL_CALL getFloat(sal_Int32 column) SAL_OVERRIDE; - double SAL_CALL getDouble(sal_Int32 column) SAL_OVERRIDE; - - css::uno::Sequence< sal_Int8 > SAL_CALL getBytes(sal_Int32 column) SAL_OVERRIDE; - css::util::Date SAL_CALL getDate(sal_Int32 column) SAL_OVERRIDE; - css::util::Time SAL_CALL getTime(sal_Int32 column) SAL_OVERRIDE; - css::util::DateTime SAL_CALL getTimestamp(sal_Int32 column) SAL_OVERRIDE; - - css::uno::Reference< css::io::XInputStream > SAL_CALL getBinaryStream(sal_Int32 column) SAL_OVERRIDE; - css::uno::Reference< css::io::XInputStream > SAL_CALL getCharacterStream(sal_Int32 column) SAL_OVERRIDE; - - Any SAL_CALL getObject(sal_Int32 column, const my_XNameAccessRef& typeMap) SAL_OVERRIDE; - - css::uno::Reference< css::sdbc::XRef > SAL_CALL getRef(sal_Int32 column) SAL_OVERRIDE; - css::uno::Reference< css::sdbc::XBlob > SAL_CALL getBlob(sal_Int32 column) SAL_OVERRIDE; - css::uno::Reference< css::sdbc::XClob > SAL_CALL getClob(sal_Int32 column) SAL_OVERRIDE; - css::uno::Reference< css::sdbc::XArray > SAL_CALL getArray(sal_Int32 column) SAL_OVERRIDE; - - // XResultSetMetaDataSupplier - css::uno::Reference< css::sdbc::XResultSetMetaData > SAL_CALL getMetaData() SAL_OVERRIDE; - - // XCancellable - void SAL_CALL cancel() SAL_OVERRIDE; - - // XCloseable - void SAL_CALL close() SAL_OVERRIDE; - - // XWarningsSupplier - Any SAL_CALL getWarnings() SAL_OVERRIDE; - - void SAL_CALL clearWarnings() SAL_OVERRIDE; - - // XResultSetUpdate - void SAL_CALL insertRow() SAL_OVERRIDE; - void SAL_CALL updateRow() SAL_OVERRIDE; - void SAL_CALL deleteRow() SAL_OVERRIDE; - void SAL_CALL cancelRowUpdates() SAL_OVERRIDE; - void SAL_CALL moveToInsertRow() SAL_OVERRIDE; - void SAL_CALL moveToCurrentRow() SAL_OVERRIDE; - - // XRowUpdate - void SAL_CALL updateNull(sal_Int32 column) SAL_OVERRIDE; - void SAL_CALL updateBoolean(sal_Int32 column, sal_Bool x) SAL_OVERRIDE; - void SAL_CALL updateByte(sal_Int32 column, sal_Int8 x) SAL_OVERRIDE; - void SAL_CALL updateShort(sal_Int32 column, sal_Int16 x) SAL_OVERRIDE; - void SAL_CALL updateInt(sal_Int32 column, sal_Int32 x) SAL_OVERRIDE; - void SAL_CALL updateLong(sal_Int32 column, sal_Int64 x) SAL_OVERRIDE; - void SAL_CALL updateFloat(sal_Int32 column, float x) SAL_OVERRIDE; - void SAL_CALL updateDouble(sal_Int32 column, double x) SAL_OVERRIDE; - void SAL_CALL updateString(sal_Int32 column, const rtl::OUString& x) SAL_OVERRIDE; - void SAL_CALL updateBytes(sal_Int32 column, const css::uno::Sequence< sal_Int8 >& x) SAL_OVERRIDE; - void SAL_CALL updateDate(sal_Int32 column, const css::util::Date& x) SAL_OVERRIDE; - void SAL_CALL updateTime(sal_Int32 column, const css::util::Time& x) SAL_OVERRIDE; - void SAL_CALL updateTimestamp(sal_Int32 column, const css::util::DateTime& x) SAL_OVERRIDE; - void SAL_CALL updateBinaryStream(sal_Int32 column, const css::uno::Reference< css::io::XInputStream >& x, sal_Int32 length) SAL_OVERRIDE; - void SAL_CALL updateCharacterStream(sal_Int32 column, const css::uno::Reference< css::io::XInputStream >& x, sal_Int32 length) SAL_OVERRIDE; - void SAL_CALL updateObject(sal_Int32 column, const Any& x) SAL_OVERRIDE; - void SAL_CALL updateNumericObject(sal_Int32 column, const Any& x, sal_Int32 scale) SAL_OVERRIDE; - - // XColumnLocate - sal_Int32 SAL_CALL findColumn(const rtl::OUString& columnName) SAL_OVERRIDE; - - // XRowLocate - Any SAL_CALL getBookmark() SAL_OVERRIDE; - - sal_Bool SAL_CALL moveToBookmark(const Any& bookmark) SAL_OVERRIDE; - sal_Bool SAL_CALL moveRelativeToBookmark(const Any& bookmark, sal_Int32 rows) SAL_OVERRIDE; - sal_Int32 SAL_CALL compareBookmarks(const Any& first, const Any& second) SAL_OVERRIDE; - sal_Bool SAL_CALL hasOrderedBookmarks() SAL_OVERRIDE; - sal_Int32 SAL_CALL hashBookmark(const Any& bookmark) SAL_OVERRIDE; - - // XDeleteRows - css::uno::Sequence< sal_Int32 > SAL_CALL deleteRows(const css::uno::Sequence< Any >& rows) SAL_OVERRIDE; - - /// @throws SQLException - /// @throws RuntimeException - void checkColumnIndex(sal_Int32 index); - - private: - using ::cppu::OPropertySetHelper::getFastPropertyValue; - }; - } /* mysqlc */ -} /* connectivity */ -#endif // CONNECTIVITY_SRESULTSET_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/mysqlc/source/mysqlc_resultsetmetadata.cxx b/mysqlc/source/mysqlc_resultsetmetadata.cxx deleted file mode 100644 index f3375df2201e..000000000000 --- a/mysqlc/source/mysqlc_resultsetmetadata.cxx +++ /dev/null @@ -1,210 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#include "mysqlc_resultsetmetadata.hxx" -#include "mysqlc_resultset.hxx" -#include "mysqlc_general.hxx" -#include <cppconn/exception.h> - -#include <com/sun/star/sdbc/XRow.hpp> -#include <rtl/ustrbuf.hxx> - -using namespace connectivity::mysqlc; -using namespace com::sun::star::uno; -using namespace com::sun::star::lang; -using namespace com::sun::star::sdbc; - -MYSQL_FIELD* OResultSetMetaData::getField(sal_Int32 column) const -{ - return mysql_fetch_field_direct(m_pRes, column - 1); -} - -sal_Int32 SAL_CALL OResultSetMetaData::getColumnDisplaySize(sal_Int32 column) -{ - MYSQL_FIELD* pField = getField(column); - return pField->length; -} - -sal_Int32 SAL_CALL OResultSetMetaData::getColumnType(sal_Int32 column) -{ - checkColumnIndex(column); - MYSQL_FIELD* pField = getField(column); - - return mysqlc_sdbc_driver::mysqlToOOOType(pField->type, pField->charsetnr); -} - -sal_Int32 SAL_CALL OResultSetMetaData::getColumnCount() -{ - return mysql_num_fields(m_pRes); -} - -sal_Bool SAL_CALL OResultSetMetaData::isCaseSensitive(sal_Int32 column) -{ - checkColumnIndex(column); - // MYSQL_FIELD::charsetnr is the collation identifier - // _ci postfix means it's insensitive - MYSQL_FIELD* pField = getField(column); - rtl::OUStringBuffer sql{"SHOW COLLATION WHERE Id ="}; - sql.append(rtl::OUString::number(pField->charsetnr)); - - Reference< XStatement > stmt = m_rConnection.createStatement(); - Reference< XResultSet > rs = stmt->executeQuery(sql.makeStringAndClear()); - Reference< XRow > xRow( rs, UNO_QUERY_THROW ); - - rs->next(); // fetch first and only row - rtl::OUString sColName = xRow->getString(1); // first column is Collation name - - return !sColName.isEmpty() && !sColName.endsWith("_ci"); -} - -rtl::OUString SAL_CALL OResultSetMetaData::getSchemaName(sal_Int32 column) -{ - checkColumnIndex(column); - MYSQL_FIELD* pField = getField(column); - - return rtl::OStringToOUString(pField->db, m_rConnection.getConnectionEncoding()); -} - -rtl::OUString SAL_CALL OResultSetMetaData::getColumnName(sal_Int32 column) -{ - checkColumnIndex(column); - - MYSQL_FIELD* pField = getField(column); - return rtl::OStringToOUString(pField->name, m_rConnection.getConnectionEncoding()); -} - -rtl::OUString SAL_CALL OResultSetMetaData::getTableName(sal_Int32 column) -{ - checkColumnIndex(column); - MYSQL_FIELD* pField = getField(column); - return rtl::OStringToOUString(pField->table, m_rConnection.getConnectionEncoding()); -} - -rtl::OUString SAL_CALL OResultSetMetaData::getCatalogName(sal_Int32 column) -{ - checkColumnIndex(column); - MYSQL_FIELD* pField = getField(column); - return rtl::OStringToOUString(pField->catalog, m_rConnection.getConnectionEncoding()); -} - -rtl::OUString SAL_CALL OResultSetMetaData::getColumnTypeName(sal_Int32 column) -{ - checkColumnIndex(column); - MYSQL_FIELD* pField = getField(column); - - return mysqlc_sdbc_driver::mysqlTypeToStr(pField); -} - -rtl::OUString SAL_CALL OResultSetMetaData::getColumnLabel(sal_Int32 column) -{ - checkColumnIndex(column); - MYSQL_FIELD* pField = getField(column); - return rtl::OStringToOUString(pField->name, m_rConnection.getConnectionEncoding()); -} - -rtl::OUString SAL_CALL OResultSetMetaData::getColumnServiceName(sal_Int32 column) -{ - checkColumnIndex(column); - - rtl::OUString aRet = rtl::OUString(); - return aRet; -} - -sal_Bool SAL_CALL OResultSetMetaData::isCurrency(sal_Int32 /*column*/) -{ - return false; // TODO -} - -sal_Bool SAL_CALL OResultSetMetaData::isAutoIncrement(sal_Int32 column) -{ - checkColumnIndex(column); - - MYSQL_FIELD* pField = getField(column); - return (pField->flags & AUTO_INCREMENT_FLAG) != 0; -} - -sal_Bool SAL_CALL OResultSetMetaData::isSigned(sal_Int32 column) -{ - checkColumnIndex(column); - - MYSQL_FIELD* pField = getField(column); - return !(pField->flags & UNSIGNED_FLAG); -} - -sal_Int32 SAL_CALL OResultSetMetaData::getPrecision(sal_Int32 column) -{ - checkColumnIndex(column); - MYSQL_FIELD* pField = getField(column); - return pField->max_length - pField->decimals; -} - -sal_Int32 SAL_CALL OResultSetMetaData::getScale(sal_Int32 column) -{ - checkColumnIndex(column); - MYSQL_FIELD* pField = getField(column); - return pField->decimals; -} - -sal_Int32 SAL_CALL OResultSetMetaData::isNullable(sal_Int32 column) -{ - checkColumnIndex(column); - MYSQL_FIELD* pField = getField(column); - return (pField->flags & NOT_NULL_FLAG) ? 0 : 1; -} - -sal_Bool SAL_CALL OResultSetMetaData::isSearchable(sal_Int32 /*column*/) -{ - return true; -} - -sal_Bool SAL_CALL OResultSetMetaData::isReadOnly(sal_Int32 column) -{ - checkColumnIndex(column); - MYSQL_FIELD* pField = getField(column); - return !(pField->db && strlen(pField->db)); -} - -sal_Bool SAL_CALL OResultSetMetaData::isDefinitelyWritable(sal_Int32 column) -{ - checkColumnIndex(column); - return !isReadOnly(column); -} - -sal_Bool SAL_CALL OResultSetMetaData::isWritable(sal_Int32 column) -{ - checkColumnIndex(column); - return !isReadOnly(column); -} - -void OResultSetMetaData::checkColumnIndex(sal_Int32 columnIndex) -{ - unsigned nColCount = mysql_num_fields(m_pRes); - if (columnIndex < 1 || columnIndex > static_cast<sal_Int32>(nColCount)) { - - rtl::OUStringBuffer buf; - buf.appendAscii( "Column index out of range (expected 1 to " ); - buf.append( sal_Int32( nColCount ) ); - buf.appendAscii( ", got " ); - buf.append( columnIndex ); - buf.append( '.' ); - throw SQLException( buf.makeStringAndClear(), *this, rtl::OUString(), 1, Any() ); - } -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/mysqlc/source/mysqlc_resultsetmetadata.hxx b/mysqlc/source/mysqlc_resultsetmetadata.hxx deleted file mode 100644 index ff6ed092bfe1..000000000000 --- a/mysqlc/source/mysqlc_resultsetmetadata.hxx +++ /dev/null @@ -1,110 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef INCLUDED_MYSQLC_SOURCE_MYSQLC_RESULTSETMETADATA_HXX -#define INCLUDED_MYSQLC_SOURCE_MYSQLC_RESULTSETMETADATA_HXX - -#include "mysqlc_connection.hxx" - -#include <com/sun/star/sdbc/XResultSetMetaData.hpp> -#include <com/sun/star/sdbc/XConnection.hpp> -#include <com/sun/star/sdbc/SQLException.hpp> - -#include <cppuhelper/implbase1.hxx> -#include <cppconn/resultset_metadata.h> -#include <mysql.h> - -namespace connectivity -{ - namespace mysqlc - { - using ::com::sun::star::sdbc::SQLException; - using ::com::sun::star::uno::RuntimeException; - using ::com::sun::star::uno::RuntimeException; - - //************ Class: ResultSetMetaData - - typedef ::cppu::WeakImplHelper1< css::sdbc::XResultSetMetaData> OResultSetMetaData_BASE; - - class OResultSetMetaData final : public OResultSetMetaData_BASE - { - private: - OConnection& m_rConnection; - MYSQL_RES * m_pRes; - rtl_TextEncoding m_encoding; - - virtual ~OResultSetMetaData() = default; - MYSQL_FIELD* getField(sal_Int32 column) const; - public: - OResultSetMetaData(OConnection& rConn, - MYSQL_RES * pResult, rtl_TextEncoding _encoding ) - :m_rConnection(rConn) - ,m_pRes(pResult) - ,m_encoding( _encoding ) - { - } - - rtl::OUString convert( const ::std::string& _string ) const - { - return rtl::OUString( _string.c_str(), _string.size(), m_encoding ); - } - - sal_Int32 SAL_CALL getColumnCount() SAL_OVERRIDE; - - sal_Bool SAL_CALL isAutoIncrement(sal_Int32 column) SAL_OVERRIDE; - sal_Bool SAL_CALL isCaseSensitive(sal_Int32 column) SAL_OVERRIDE; - sal_Bool SAL_CALL isSearchable(sal_Int32 column) SAL_OVERRIDE; - sal_Bool SAL_CALL isCurrency(sal_Int32 column) SAL_OVERRIDE; - - sal_Int32 SAL_CALL isNullable(sal_Int32 column) SAL_OVERRIDE; - - sal_Bool SAL_CALL isSigned(sal_Int32 column) SAL_OVERRIDE; - - sal_Int32 SAL_CALL getColumnDisplaySize(sal_Int32 column) SAL_OVERRIDE; - - rtl::OUString SAL_CALL getColumnLabel(sal_Int32 column) SAL_OVERRIDE; - rtl::OUString SAL_CALL getColumnName(sal_Int32 column) SAL_OVERRIDE; - rtl::OUString SAL_CALL getSchemaName(sal_Int32 column) SAL_OVERRIDE; - - sal_Int32 SAL_CALL getPrecision(sal_Int32 column) SAL_OVERRIDE; - sal_Int32 SAL_CALL getScale(sal_Int32 column) SAL_OVERRIDE; - - rtl::OUString SAL_CALL getTableName(sal_Int32 column) SAL_OVERRIDE; - rtl::OUString SAL_CALL getCatalogName(sal_Int32 column) SAL_OVERRIDE; - - sal_Int32 SAL_CALL getColumnType(sal_Int32 column) SAL_OVERRIDE; - - rtl::OUString SAL_CALL getColumnTypeName(sal_Int32 column) SAL_OVERRIDE; - - sal_Bool SAL_CALL isReadOnly(sal_Int32 column) SAL_OVERRIDE; - sal_Bool SAL_CALL isWritable(sal_Int32 column) SAL_OVERRIDE; - sal_Bool SAL_CALL isDefinitelyWritable(sal_Int32 column) SAL_OVERRIDE; - - rtl::OUString SAL_CALL getColumnServiceName(sal_Int32 column) SAL_OVERRIDE; - - /// @throws SQLException - /// @throws RuntimeException - void checkColumnIndex(sal_Int32 columnIndex); - }; - } -} - -#endif // INCLUDED_MYSQLC_SOURCE_MYSQLC_RESULTSETMETADATA_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/mysqlc/source/mysqlc_services.cxx b/mysqlc/source/mysqlc_services.cxx deleted file mode 100644 index 262859aec953..000000000000 --- a/mysqlc/source/mysqlc_services.cxx +++ /dev/null @@ -1,115 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#include "mysqlc_driver.hxx" - -#include <cppuhelper/factory.hxx> -#include <rtl/ustrbuf.hxx> -#include <uno/lbnames.h> - -using namespace connectivity::mysqlc; -using ::com::sun::star::uno::Reference; -using ::com::sun::star::uno::Sequence; -using ::com::sun::star::lang::XSingleServiceFactory; -using ::com::sun::star::lang::XMultiServiceFactory; - -typedef Reference< XSingleServiceFactory > (*createFactoryFunc) - ( - const Reference< XMultiServiceFactory > & rServiceManager, - const rtl::OUString & rComponentName, - ::cppu::ComponentInstantiation pCreateFunction, - const Sequence< rtl::OUString > & rServiceNames, - rtl_ModuleCount* - ); - -struct ProviderRequest -{ - Reference< XSingleServiceFactory > xRet; - Reference< XMultiServiceFactory > const xServiceManager; - rtl::OUString const sImplementationName; - - ProviderRequest( - void* pServiceManager, - sal_Char const* pImplementationName - ) : xServiceManager(static_cast<XMultiServiceFactory*>(pServiceManager)) - , sImplementationName(rtl::OUString::createFromAscii(pImplementationName)) - { - } - - bool CREATE_PROVIDER( - const rtl::OUString& Implname, - const Sequence< rtl::OUString > & Services, - ::cppu::ComponentInstantiation Factory, - createFactoryFunc creator - ) - { - if (!xRet.is() && (Implname == sImplementationName)) { - try { - xRet = creator( xServiceManager, sImplementationName,Factory, Services,nullptr); - } catch (...) { - } - } - return xRet.is(); - } - - void* getProvider() const { return xRet.get(); } -}; - -extern "C" SAL_DLLPUBLIC_EXPORT void* component_getFactory( - const sal_Char * pImplementationName, - void * pServiceManager, - void * /* pRegistryKey */) -{ - void* pRet = nullptr; - if (pServiceManager) { - ProviderRequest aReq(pServiceManager,pImplementationName); - - aReq.CREATE_PROVIDER( - MysqlCDriver::getImplementationName_Static(), - MysqlCDriver::getSupportedServiceNames_Static(), - MysqlCDriver_CreateInstance, ::cppu::createSingleFactory) - ; - - if(aReq.xRet.is()) { - aReq.xRet->acquire(); - } - - pRet = aReq.getProvider(); - } - - return pRet; -}; - -extern "C" SAL_DLLPUBLIC_EXPORT void -component_getImplementationEnvironment( - char const ** ppEnvTypeName, uno_Environment **) -{ - *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME; -} - -/* - * 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: */ diff --git a/mysqlc/source/mysqlc_statement.cxx b/mysqlc/source/mysqlc_statement.cxx deleted file mode 100644 index ce91ed894376..000000000000 --- a/mysqlc/source/mysqlc_statement.cxx +++ /dev/null @@ -1,375 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#include <sal/config.h> - -#include <memory> -#include <stdio.h> - -#include "mysqlc_connection.hxx" -#include "mysqlc_propertyids.hxx" -#include "mysqlc_resultset.hxx" -#include "mysqlc_statement.hxx" -#include "mysqlc_general.hxx" - -#include <com/sun/star/lang/DisposedException.hpp> -#include <com/sun/star/sdbc/FetchDirection.hpp> -#include <com/sun/star/sdbc/ResultSetConcurrency.hpp> -#include <com/sun/star/sdbc/ResultSetType.hpp> - -#include <cppconn/connection.h> -#include <cppconn/exception.h> -#include <cppconn/statement.h> -#include <cppuhelper/typeprovider.hxx> -#include <cppuhelper/queryinterface.hxx> -#include <osl/thread.h> - -using namespace connectivity::mysqlc; - -using namespace com::sun::star::uno; -using namespace com::sun::star::lang; -using namespace com::sun::star::beans; -using namespace com::sun::star::sdbc; -using namespace com::sun::star::sdbcx; -using namespace com::sun::star::container; -using namespace com::sun::star::io; -using namespace com::sun::star::util; -using ::osl::MutexGuard; - -OCommonStatement::OCommonStatement(OConnection* _pConnection) - :OCommonStatement_IBase(m_aMutex) - ,OPropertySetHelper(OCommonStatement_IBase::rBHelper) - ,m_xConnection(_pConnection) -{ -} - -OCommonStatement::~OCommonStatement() -{ -} - -void OCommonStatement::disposeResultSet() -{ - // free the cursor if alive - if(m_pMysqlResult != nullptr) - { - mysql_free_result(m_pMysqlResult); - m_pMysqlResult = nullptr; - } -} - -void OCommonStatement::disposing() -{ - MutexGuard aGuard(m_aMutex); - - m_xConnection.clear(); - OCommonStatement_IBase::disposing(); -} - -Any SAL_CALL OCommonStatement::queryInterface(const Type & rType) -{ - Any aRet = OCommonStatement_IBase::queryInterface(rType); - if (!aRet.hasValue()) { - aRet = OPropertySetHelper::queryInterface(rType); - } - return aRet; -} - -Sequence< Type > SAL_CALL OCommonStatement::getTypes() -{ - ::cppu::OTypeCollection aTypes( cppu::UnoType<XMultiPropertySet>::get(), - cppu::UnoType<XFastPropertySet>::get(), - cppu::UnoType<XPropertySet>::get()); - - return concatSequences(aTypes.getTypes(), OCommonStatement_IBase::getTypes()); -} - -void SAL_CALL OCommonStatement::cancel() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(rBHelper.bDisposed); - // cancel the current sql statement -} - -void SAL_CALL OCommonStatement::close() -{ - /* - We need a block for the checkDisposed call. - After the check we can call dispose() as we are not under lock ?? - */ - { - MutexGuard aGuard(m_aMutex); - checkDisposed(rBHelper.bDisposed); - } - dispose(); - disposeResultSet(); -} - -void SAL_CALL OStatement::clearBatch() -{ - // if you support batches clear it here -} - -sal_Bool SAL_CALL OCommonStatement::execute(const rtl::OUString& sql) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(rBHelper.bDisposed); - const rtl::OUString sSqlStatement = m_xConnection->transFormPreparedStatement( sql ); - - rtl::OString toExec = rtl::OUStringToOString(sSqlStatement, - m_xConnection->getConnectionSettings().encoding); - - MYSQL* pMySql = m_xConnection->getMysqlConnection(); - - // NOTE: differs from MySQL C API, where mysql_real_escape_string_quote() - // should be used. - // toExec = mysqlc_sdbc_driver::escapeSql(toExec); - int failure = mysql_real_query(pMySql, toExec.getStr(), toExec.getLength()); - - if(failure) - mysqlc_sdbc_driver::throwSQLExceptionWithMsg(mysql_error(pMySql), - mysql_errno(pMySql), *this, m_xConnection->getConnectionEncoding()); - m_nAffectedRows = mysql_affected_rows(pMySql); - - return !failure; -} - -Reference< XResultSet > SAL_CALL OCommonStatement::executeQuery(const rtl::OUString& sql) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(rBHelper.bDisposed); - const rtl::OUString sSqlStatement = sql; // TODO m_xConnection->transFormPreparedStatement( sql ); - rtl::OString toExec = rtl::OUStringToOString(sSqlStatement, - m_xConnection->getConnectionSettings().encoding); - - MYSQL* pMySql = m_xConnection->getMysqlConnection(); - // toExec = mysqlc_sdbc_driver::escapeSql(toExec); - int failure = mysql_real_query(pMySql, toExec.getStr(), toExec.getLength()); - if(failure) - mysqlc_sdbc_driver::throwSQLExceptionWithMsg(mysql_error(pMySql), - mysql_errno(pMySql), *this, m_xConnection->getConnectionEncoding()); - - m_pMysqlResult = mysql_store_result(pMySql); - if(m_pMysqlResult == nullptr) - { - mysqlc_sdbc_driver::throwSQLExceptionWithMsg(mysql_error(pMySql), - mysql_errno(pMySql), *this, m_xConnection->getConnectionEncoding()); - } - - m_xResultSet = new OResultSet(*getOwnConnection(),this, m_pMysqlResult, - m_xConnection->getConnectionEncoding()); - return m_xResultSet; -} - -Reference< XConnection > SAL_CALL OCommonStatement::getConnection() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(rBHelper.bDisposed); - - // just return our connection here - return m_xConnection.get(); -} - -sal_Int32 SAL_CALL OCommonStatement::getUpdateCount() -{ - return m_nAffectedRows; -} - -Any SAL_CALL OStatement::queryInterface(const Type & rType) -{ - Any aRet = ::cppu::queryInterface(rType,static_cast< XBatchExecution*> (this)); - if (!aRet.hasValue()) { - aRet = OCommonStatement::queryInterface(rType); - } - return aRet; -} - -void SAL_CALL OStatement::addBatch(const rtl::OUString&) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(rBHelper.bDisposed); -} - -Sequence< sal_Int32 > SAL_CALL OStatement::executeBatch() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(rBHelper.bDisposed); - - Sequence< sal_Int32 > aRet = Sequence< sal_Int32 >(); - return aRet; -} - -sal_Int32 SAL_CALL OCommonStatement::executeUpdate(const rtl::OUString& sql) -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(rBHelper.bDisposed); - - execute(sql); - return m_nAffectedRows; -} - -Reference< XResultSet > SAL_CALL OCommonStatement::getResultSet() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(rBHelper.bDisposed); - - return m_xResultSet; -} - -sal_Bool SAL_CALL OCommonStatement::getMoreResults() -{ - return false; // TODO IMPL -} - -Any SAL_CALL OCommonStatement::getWarnings() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(rBHelper.bDisposed); - - return makeAny(m_aLastWarning); -} - -void SAL_CALL OCommonStatement::clearWarnings() -{ - MutexGuard aGuard(m_aMutex); - checkDisposed(rBHelper.bDisposed); - - m_aLastWarning = SQLWarning(); -} - -::cppu::IPropertyArrayHelper* OCommonStatement::createArrayHelper( ) const -{ - // this properties are define by the service statement - // they must in alphabetic order - Sequence< Property > aProps(10); - Property* pProperties = aProps.getArray(); - sal_Int32 nPos = 0; - pProperties[nPos++] = Property("CursorName", PROPERTY_ID_CURSORNAME, cppu::UnoType<rtl::OUString>::get(), 0); - pProperties[nPos++] = Property("EscapeProcessing", PROPERTY_ID_ESCAPEPROCESSING, cppu::UnoType<bool>::get(), 0); - pProperties[nPos++] = Property("FetchDirection", PROPERTY_ID_FETCHDIRECTION, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = Property("FetchSize", PROPERTY_ID_FETCHSIZE, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = Property("MaxFieldSize", PROPERTY_ID_MAXFIELDSIZE, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = Property("MaxRows", PROPERTY_ID_MAXROWS, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = Property("QueryTimeOut", PROPERTY_ID_QUERYTIMEOUT, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = Property("ResultSetConcurrency", PROPERTY_ID_RESULTSETCONCURRENCY, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = Property("ResultSetType", PROPERTY_ID_RESULTSETTYPE, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = Property("UseBookmarks", PROPERTY_ID_USEBOOKMARKS, cppu::UnoType<bool>::get(), 0); - - return new ::cppu::OPropertyArrayHelper(aProps); -} - -::cppu::IPropertyArrayHelper & OCommonStatement::getInfoHelper() -{ - return *getArrayHelper(); -} - -sal_Bool OCommonStatement::convertFastPropertyValue( - Any & /* rConvertedValue */, Any & /* rOldValue */, - sal_Int32 /* nHandle */, const Any& /* rValue */) -{ - // here we have to try to convert - return false; -} - -void OCommonStatement::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle, const Any& /* rValue */) -{ - // set the value to what ever is necessary - switch (nHandle) { - case PROPERTY_ID_QUERYTIMEOUT: - case PROPERTY_ID_MAXFIELDSIZE: - case PROPERTY_ID_MAXROWS: - case PROPERTY_ID_CURSORNAME: - case PROPERTY_ID_RESULTSETCONCURRENCY: - case PROPERTY_ID_RESULTSETTYPE: - case PROPERTY_ID_FETCHDIRECTION: - case PROPERTY_ID_FETCHSIZE: - case PROPERTY_ID_ESCAPEPROCESSING: - case PROPERTY_ID_USEBOOKMARKS: - default: - ; - } -} - -void OCommonStatement::getFastPropertyValue(Any& _rValue, sal_Int32 nHandle) const -{ - switch (nHandle) { - case PROPERTY_ID_QUERYTIMEOUT: - case PROPERTY_ID_MAXFIELDSIZE: - case PROPERTY_ID_MAXROWS: - case PROPERTY_ID_CURSORNAME: - case PROPERTY_ID_RESULTSETCONCURRENCY: - case PROPERTY_ID_RESULTSETTYPE: - case PROPERTY_ID_FETCHDIRECTION: - case PROPERTY_ID_FETCHSIZE: - case PROPERTY_ID_ESCAPEPROCESSING: - break; - case PROPERTY_ID_USEBOOKMARKS: - _rValue <<= false; - break; - default: - ; - } -} - -rtl::OUString OStatement::getImplementationName() -{ - return rtl::OUString("com.sun.star.sdbcx.OStatement"); -} - -css::uno::Sequence<rtl::OUString> OStatement::getSupportedServiceNames() -{ - css::uno::Sequence<rtl::OUString> s(1); - s[0] = "com.sun.star.sdbc.Statement"; - return s; -} - -sal_Bool OStatement::supportsService(rtl::OUString const & ServiceName) -{ - return cppu::supportsService(this, ServiceName); -} - -void SAL_CALL OCommonStatement::acquire() - throw() -{ - OCommonStatement_IBase::acquire(); -} - -void SAL_CALL OCommonStatement::release() - throw() -{ - OCommonStatement_IBase::release(); -} - -void SAL_CALL OStatement::acquire() - throw() -{ - OCommonStatement::acquire(); -} - -void SAL_CALL OStatement::release() - throw() -{ - OCommonStatement::release(); -} - -Reference< css::beans::XPropertySetInfo > SAL_CALL OCommonStatement::getPropertySetInfo() -{ - return ::cppu::OPropertySetHelper::createPropertySetInfo(getInfoHelper()); -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/mysqlc/source/mysqlc_statement.hxx b/mysqlc/source/mysqlc_statement.hxx deleted file mode 100644 index a26988a5a9ac..000000000000 --- a/mysqlc/source/mysqlc_statement.hxx +++ /dev/null @@ -1,189 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef INCLUDED_MYSQLC_SOURCE_MYSQLC_STATEMENT_HXX -#define INCLUDED_MYSQLC_SOURCE_MYSQLC_STATEMENT_HXX - -#include "mysqlc_connection.hxx" -#include "mysqlc_subcomponent.hxx" - -#include <com/sun/star/lang/XServiceInfo.hpp> -#include <com/sun/star/sdbc/SQLWarning.hpp> -#include <com/sun/star/sdbc/XBatchExecution.hpp> -#include <com/sun/star/sdbc/XCloseable.hpp> -#include <com/sun/star/sdbc/XMultipleResults.hpp> -#include <com/sun/star/sdbc/XStatement.hpp> -#include <com/sun/star/sdbc/XWarningsSupplier.hpp> -#include <com/sun/star/util/XCancellable.hpp> - -#include <cppconn/statement.h> -#include <cppuhelper/compbase5.hxx> -#include <rtl/ref.hxx> - -namespace connectivity -{ - namespace mysqlc - { - using ::com::sun::star::sdbc::SQLWarning; - using ::com::sun::star::sdbc::SQLException; - using ::com::sun::star::uno::Any; - using ::com::sun::star::uno::RuntimeException; - - typedef ::cppu::WeakComponentImplHelper5< css::sdbc::XStatement, - css::sdbc::XWarningsSupplier, - css::util::XCancellable, - css::sdbc::XCloseable, - css::sdbc::XMultipleResults> OCommonStatement_IBase; - - //************ Class: OCommonStatement - // is a base class for the normal statement and for the prepared statement - - class OCommonStatement :public OBase_Mutex - ,public OCommonStatement_IBase - ,public ::cppu::OPropertySetHelper - ,public OPropertyArrayUsageHelper<OCommonStatement> - - { - private: - SQLWarning m_aLastWarning; - - protected: - rtl::Reference<OConnection> m_xConnection; // The owning Connection object - - css::uno::Reference<css::sdbc::XResultSet> m_xResultSet; - MYSQL_RES* m_pMysqlResult = nullptr; - - // number of rows affected by an UPDATE, DELETE or INSERT statement. - sal_Int32 m_nAffectedRows = 0; - - protected: - void disposeResultSet(); - - // OPropertyArrayUsageHelper - ::cppu::IPropertyArrayHelper* createArrayHelper( ) const SAL_OVERRIDE; - - // OPropertySetHelper - ::cppu::IPropertyArrayHelper & SAL_CALL getInfoHelper() SAL_OVERRIDE; - sal_Bool SAL_CALL convertFastPropertyValue(Any & rConvertedValue, Any & rOldValue, - sal_Int32 nHandle, const Any& rValue) SAL_OVERRIDE; - - void SAL_CALL setFastPropertyValue_NoBroadcast(sal_Int32 nHandle, const Any& rValue) SAL_OVERRIDE; - - void SAL_CALL getFastPropertyValue(Any& rValue, sal_Int32 nHandle) const SAL_OVERRIDE; - virtual ~OCommonStatement(); - - protected: - OCommonStatement(OConnection* _pConnection); - - public: - using OCommonStatement_IBase::rBHelper; - using OCommonStatement_IBase::operator css::uno::Reference< css::uno::XInterface >; - - // OComponentHelper - void SAL_CALL disposing() SAL_OVERRIDE; - - // XInterface - void SAL_CALL release() throw() SAL_OVERRIDE; - - void SAL_CALL acquire() throw() SAL_OVERRIDE; - - // XInterface - Any SAL_CALL queryInterface(const css::uno::Type & rType) SAL_OVERRIDE; - - //XTypeProvider - css::uno::Sequence< css::uno::Type > SAL_CALL getTypes() SAL_OVERRIDE; - - // XPropertySet - css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo() SAL_OVERRIDE; - - // XStatement - css::uno::Reference< css::sdbc::XResultSet > SAL_CALL executeQuery(const rtl::OUString& sql) SAL_OVERRIDE; - - sal_Int32 SAL_CALL executeUpdate(const rtl::OUString& sql) SAL_OVERRIDE; - - sal_Bool SAL_CALL execute( const rtl::OUString& sql ) SAL_OVERRIDE; - - css::uno::Reference< css::sdbc::XConnection > SAL_CALL getConnection() SAL_OVERRIDE; - - // XWarningsSupplier - Any SAL_CALL getWarnings() SAL_OVERRIDE; - - void SAL_CALL clearWarnings() SAL_OVERRIDE; - - // XCancellable - void SAL_CALL cancel() SAL_OVERRIDE; - - // XCloseable - void SAL_CALL close() SAL_OVERRIDE; - - // XMultipleResults - css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getResultSet() SAL_OVERRIDE; - - sal_Int32 SAL_CALL getUpdateCount() SAL_OVERRIDE; - - sal_Bool SAL_CALL getMoreResults() SAL_OVERRIDE; - - // other methods - OConnection* getOwnConnection() const { return m_xConnection.get();} - - private: - using ::cppu::OPropertySetHelper::getFastPropertyValue; - }; - - - class OStatement final : public OCommonStatement, - public css::sdbc::XBatchExecution, - public css::lang::XServiceInfo - - { - virtual ~OStatement(){} - - public: - // A constructor which is required for the return of the objects - OStatement(OConnection* _pConnection) : - OCommonStatement(_pConnection) {} - - virtual rtl::OUString SAL_CALL getImplementationName() SAL_OVERRIDE; - - virtual sal_Bool SAL_CALL supportsService( - rtl::OUString const & ServiceName) - SAL_OVERRIDE; - - virtual css::uno::Sequence<rtl::OUString> SAL_CALL - getSupportedServiceNames() - SAL_OVERRIDE; - - Any SAL_CALL queryInterface( const css::uno::Type & rType ) SAL_OVERRIDE; - - void SAL_CALL acquire() throw() SAL_OVERRIDE; - void SAL_CALL release() throw() SAL_OVERRIDE; - - // XBatchExecution - void SAL_CALL addBatch(const rtl::OUString& sql) SAL_OVERRIDE; - - void SAL_CALL clearBatch() SAL_OVERRIDE; - - css::uno::Sequence< sal_Int32 > SAL_CALL executeBatch() SAL_OVERRIDE; - - }; - } -} -#endif // INCLUDED_MYSQLC_SOURCE_MYSQLC_STATEMENT_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/mysqlc/source/mysqlc_subcomponent.hxx b/mysqlc/source/mysqlc_subcomponent.hxx deleted file mode 100644 index bb7d4d9386c9..000000000000 --- a/mysqlc/source/mysqlc_subcomponent.hxx +++ /dev/null @@ -1,163 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef INCLUDED_MYSQLC_SOURCE_MYSQLC_SUBCOMPONENT_HXX -#define INCLUDED_MYSQLC_SOURCE_MYSQLC_SUBCOMPONENT_HXX - -#include <com/sun/star/lang/DisposedException.hpp> -#include <cppuhelper/interfacecontainer.h> -#include <cppuhelper/propshlp.hxx> -#include <cppuhelper/supportsservice.hxx> -#include <cppuhelper/weak.hxx> -#include <osl/diagnose.h> -#include <osl/mutex.hxx> - -namespace cppu { - class IPropertyArrayHelper; -} - -namespace com -{ - namespace sun - { - namespace star - { - namespace lang - { - class XComponent; - } - } - } -} - -namespace connectivity -{ - namespace mysqlc - { - /// @throws css::lang::DisposedException - void checkDisposed(bool _bThrow); - - template <class TYPE> - class OPropertyArrayUsageHelper - { - protected: - static sal_Int32 s_nRefCount; - static ::cppu::IPropertyArrayHelper* s_pProps; - static ::osl::Mutex s_aMutex; - - public: - OPropertyArrayUsageHelper(); - virtual ~OPropertyArrayUsageHelper(); - - /** call this in the getInfoHelper method of your derived class. The method returns the array helper of the - class, which is created if necessary. - */ - ::cppu::IPropertyArrayHelper* getArrayHelper(); - - protected: - /** used to implement the creation of the array helper which is shared amongst all instances of the class. - This method needs to be implemented in derived classes. - <BR> - The method gets called with s_aMutex acquired. - @return an pointer to the newly created array helper. Must not be NULL. - */ - virtual ::cppu::IPropertyArrayHelper* createArrayHelper() const = 0; - }; - - template<class TYPE> - sal_Int32 OPropertyArrayUsageHelper< TYPE >::s_nRefCount = 0; - - template<class TYPE> - ::cppu::IPropertyArrayHelper* OPropertyArrayUsageHelper< TYPE >::s_pProps = nullptr; - - template<class TYPE> - ::osl::Mutex OPropertyArrayUsageHelper< TYPE >::s_aMutex; - - template <class TYPE> - OPropertyArrayUsageHelper<TYPE>::OPropertyArrayUsageHelper() - { - ::osl::MutexGuard aGuard(s_aMutex); - ++s_nRefCount; - } - - template <class TYPE> - OPropertyArrayUsageHelper<TYPE>::~OPropertyArrayUsageHelper() - { - ::osl::MutexGuard aGuard(s_aMutex); - OSL_ENSURE(s_nRefCount > 0, "OPropertyArrayUsageHelper::~OPropertyArrayUsageHelper : suspicious call : have a refcount of 0 !"); - if (!--s_nRefCount) - { - delete s_pProps; - s_pProps = nullptr; - } - } - - template <class TYPE> - ::cppu::IPropertyArrayHelper* OPropertyArrayUsageHelper<TYPE>::getArrayHelper() - { - OSL_ENSURE(s_nRefCount, "OPropertyArrayUsageHelper::getArrayHelper : suspicious call : have a refcount of 0 !"); - if (!s_pProps) { - ::osl::MutexGuard aGuard(s_aMutex); - if (!s_pProps) { - s_pProps = createArrayHelper(); - OSL_ENSURE(s_pProps, "OPropertyArrayUsageHelper::getArrayHelper : createArrayHelper returned nonsense !"); - } - } - return s_pProps; - } - - class OBase_Mutex - { - public: - ::osl::Mutex m_aMutex; - }; - - namespace internal - { - template <class T> - void implCopySequence(const T* _pSource, T*& _pDest, sal_Int32 _nSourceLen) - { - for (sal_Int32 i=0; i<_nSourceLen; ++i, ++_pSource, ++_pDest) - *_pDest = *_pSource; - } - } - - /// concat two sequences - template <class T> - css::uno::Sequence<T> concatSequences(const css::uno::Sequence<T>& _rLeft, const css::uno::Sequence<T>& _rRight) - { - sal_Int32 nLeft(_rLeft.getLength()), nRight(_rRight.getLength()); - const T* pLeft = _rLeft.getConstArray(); - const T* pRight = _rRight.getConstArray(); - - sal_Int32 nReturnLen(nLeft + nRight); - css::uno::Sequence<T> aReturn(nReturnLen); - T* pReturn = aReturn.getArray(); - - internal::implCopySequence(pLeft, pReturn, nLeft); - internal::implCopySequence(pRight, pReturn, nRight); - - return aReturn; - } - } -} - -#endif // INCLUDED_MYSQLC_SOURCE_MYSQLC_SUBCOMPONENT_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/mysqlc/source/mysqlc_types.cxx b/mysqlc/source/mysqlc_types.cxx deleted file mode 100644 index 8d39b90398a0..000000000000 --- a/mysqlc/source/mysqlc_types.cxx +++ /dev/null @@ -1,682 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#include <stdio.h> -#include <com/sun/star/sdbc/DataType.hpp> -#include <com/sun/star/sdbc/ColumnValue.hpp> -#include <com/sun/star/sdbc/ColumnSearch.hpp> -#include "mysqlc_types.hxx" - -using namespace com::sun::star::sdbc; - -TypeInfoDef mysqlc_types[] = { - - // ------------- MySQL-Type: BIT. SDBC-Type: Bit ------------- - { - "BIT", // Typename - com::sun::star::sdbc::DataType::BIT, // sdbc-type - 1, // Precision - "", // Literal prefix - "", // Literal suffix - "", // Create params - com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable - true, // case sensitive - com::sun::star::sdbc::ColumnSearch::FULL, // searchable - false, // unsignable - false, // fixed_prec_scale - false, // auto_increment - "BIT", // local type name - 0, // minimum scale - 0 // maximum scale - }, - - // ------------ MySQL-Type: BOOL. SDBC-Type: Bit ------------- - { - "BOOL", // Typename - com::sun::star::sdbc::DataType::BIT, // sdbc-type - 1, // Precision - "", // Literal prefix - "", // Literal suffix - "", // Create params - com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable - true, // case sensitive - com::sun::star::sdbc::ColumnSearch::FULL, // searchable - false, // unsignable - false, // fixed_prec_scale - false, // auto_increment - "BOOL", // local type name - 0, // minimum scale - 0 // maximum scale - }, - - // --------- MySQL-Type: TINYINT SDBC-Type: TINYINT ---------- - { - "TINYINT", // Typename - com::sun::star::sdbc::DataType::TINYINT, // sdbc-type - 3, // Precision - "", // Literal prefix - "", // Literal suffix - "[(M)] [UNSIGNED] [ZEROFILL]", // Create params - com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable - false, // case sensitive - com::sun::star::sdbc::ColumnSearch::FULL, // searchable - true, // unsignable - false, // fixed_prec_scale - true, // auto_increment - "TINYINT", // local type name - 0, // minimum scale - 0 // maximum scale - }, - - // ----------- MySQL-Type: BIGINT SDBC-Type: BIGINT ---------- - { - "BIGINT", // Typename - com::sun::star::sdbc::DataType::BIGINT, // sdbc-type - 19, // Precision - "", // Literal prefix - "", // Literal suffix - "[(M)] [UNSIGNED] [ZEROFILL]", // Create params - com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable - false, // case sensitive - com::sun::star::sdbc::ColumnSearch::FULL, // searchable - true, // unsignable - false, // fixed_prec_scale - true, // auto_increment - "BIGINT", // local type name - 0, // minimum scale - 0 // maximum scale - }, - - // ----------- MySQL-Type: LONG VARBINARY SDBC-Type: LONGVARBINARY ---------- - { - "LONG VARBINARY", // Typename - com::sun::star::sdbc::DataType::LONGVARBINARY, // sdbc-type - 16777215, // Precision - "'", // Literal prefix - "'", // Literal suffix - "", // Create params - com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable - true, // case sensitive - com::sun::star::sdbc::ColumnSearch::FULL, // searchable - false, // unsignable - false, // fixed_prec_scale - false, // auto_increment - "LONG VARBINARY", // local type name - 0, // minimum scale - 0 // maximum scale - }, - - // ----------- MySQL-Type: MEDIUMBLOB SDBC-Type: LONGVARBINARY ---------- - { - "MEDIUMBLOB", // Typename - com::sun::star::sdbc::DataType::LONGVARBINARY, // sdbc-type - 16777215, // Precision - "'", // Literal prefix - "'", // Literal suffix - "", // Create params - com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable - true, // case sensitive - com::sun::star::sdbc::ColumnSearch::FULL, // searchable - false, // unsignable - false, // fixed_prec_scale - false, // auto_increment - "MEDIUMBLOB", // local type name - 0, // minimum scale - 0 // maximum scale - }, - - // ----------- MySQL-Type: LONGBLOB SDBC-Type: LONGVARBINARY ---------- - { - "LONGBLOB", // Typename - com::sun::star::sdbc::DataType::LONGVARBINARY, // sdbc-type - -1, // Precision - "'", // Literal prefix - "'", // Literal suffix - "", // Create params - com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable - true, // case sensitive - com::sun::star::sdbc::ColumnSearch::FULL, // searchable - false, // unsignable - false, // fixed_prec_scale - false, // auto_increment - "LONGBLOB", // local type name - 0, // minimum scale - 0 // maximum scale - }, - - // ----------- MySQL-Type: BLOB SDBC-Type: LONGVARBINARY ---------- - { - "BLOB", // Typename - com::sun::star::sdbc::DataType::LONGVARBINARY, // sdbc-type - 0xFFFF, // Precision - "'", // Literal prefix - "'", // Literal suffix - "", // Create params - com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable - true, // case sensitive - com::sun::star::sdbc::ColumnSearch::FULL, // searchable - false, // unsignable - false, // fixed_prec_scale - false, // auto_increment - "BLOB", // local type name - 0, // minimum scale - 0 // maximum scale - }, - - // ----------- MySQL-Type: TINYBLOB SDBC-Type: LONGVARBINARY ---------- - { - "TINYBLOB", // Typename - com::sun::star::sdbc::DataType::LONGVARBINARY, // sdbc-type - 0xFF, // Precision - "'", // Literal prefix - "'", // Literal suffix - "", // Create params - com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable - true, // case sensitive - com::sun::star::sdbc::ColumnSearch::FULL, // searchable - false, // unsignable - false, // fixed_prec_scale - false, // auto_increment - "TINYBLOB", // local type name - 0, // minimum scale - 0 // maximum scale - }, - - // ----------- MySQL-Type: VARBINARY SDBC-Type: VARBINARY ---------- - { - "VARBINARY", // Typename - com::sun::star::sdbc::DataType::VARBINARY, // sdbc-type - 0xFF, // Precision - "'", // Literal prefix - "'", // Literal suffix - "(M)", // Create params - com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable - true, // case sensitive - com::sun::star::sdbc::ColumnSearch::FULL, // searchable - false, // unsignable - false, // fixed_prec_scale - false, // auto_increment - "VARBINARY", // local type name - 0, // minimum scale - 0 // maximum scale - }, - - // ----------- MySQL-Type: BINARY SDBC-Type: BINARY ---------- - { - "BINARY", // Typename - com::sun::star::sdbc::DataType::BINARY, // sdbc-type - 0xFF, // Precision - "'", // Literal prefix - "'", // Literal suffix - "(M)", // Create params - com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable - true, // case sensitive - com::sun::star::sdbc::ColumnSearch::FULL, // searchable - false, // unsignable - false, // fixed_prec_scale - false, // auto_increment - "VARBINARY", // local type name - 0, // minimum scale - 0 // maximum scale - }, - - // ----------- MySQL-Type: LONG VARCHAR SDBC-Type: LONG VARCHAR ---------- - { - "LONG VARCHAR", // Typename - com::sun::star::sdbc::DataType::LONGVARCHAR, // sdbc-type - 0xFFFFFF, // Precision - "'", // Literal prefix - "'", // Literal suffix - "", // Create params - com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable - false, // case sensitive - com::sun::star::sdbc::ColumnSearch::FULL, // searchable - false, // unsignable - false, // fixed_prec_scale - false, // auto_increment - "LONG VARCHAR", // local type name - 0, // minimum scale - 0 // maximum scale - }, - - // ----------- MySQL-Type: MEDIUMTEXT SDBC-Type: LONG VARCHAR ---------- - { - "MEDIUMTEXT", // Typename - com::sun::star::sdbc::DataType::LONGVARCHAR, // sdbc-type - 0xFFFFFF, // Precision - "'", // Literal prefix - "'", // Literal suffix - "", // Create params - com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable - false, // case sensitive - com::sun::star::sdbc::ColumnSearch::FULL, // searchable - false, // unsignable - false, // fixed_prec_scale - false, // auto_increment - "MEDIUMTEXT", // local type name - 0, // minimum scale - 0 // maximum scale - }, - - // ----------- MySQL-Type: LONGTEXT SDBC-Type: LONG VARCHAR ---------- - { - "LONGTEXT", // Typename - com::sun::star::sdbc::DataType::LONGVARCHAR, // sdbc-type - 0xFFFFFF, // Precision - "'", // Literal prefix - "'", // Literal suffix - "", // Create params - com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable - false, // case sensitive - com::sun::star::sdbc::ColumnSearch::FULL, // searchable - false, // unsignable - false, // fixed_prec_scale - false, // auto_increment - "LONGTEXT", // local type name - 0, // minimum scale - 0 // maximum scale - }, - - // ----------- MySQL-Type: TEXT SDBC-Type: LONG VARCHAR ---------- - { - "TEXT", // Typename - com::sun::star::sdbc::DataType::LONGVARCHAR, // sdbc-type - 0xFFFF, // Precision - "'", // Literal prefix - "'", // Literal suffix - "", // Create params - com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable - false, // case sensitive - com::sun::star::sdbc::ColumnSearch::FULL, // searchable - false, // unsignable - false, // fixed_prec_scale - false, // auto_increment - "TEXT", // local type name - 0, // minimum scale - 0 // maximum scale - }, - - // ----------- MySQL-Type: TINYTEXT SDBC-Type: LONG VARCHAR ---------- - { - "TINYTEXT", // Typename - com::sun::star::sdbc::DataType::LONGVARCHAR, // sdbc-type - 0xFF, // Precision - "'", // Literal prefix - "'", // Literal suffix - "", // Create params - com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable - false, // case sensitive - com::sun::star::sdbc::ColumnSearch::FULL, // searchable - false, // unsignable - false, // fixed_prec_scale - false, // auto_increment - "TINYTEXT", // local type name - 0, // minimum scale - 0 // maximum scale - }, - - // ----------- MySQL-Type: CHAR SDBC-Type: CHAR ---------- - { - "CHAR", // Typename - com::sun::star::sdbc::DataType::CHAR, // sdbc-type - 0xFF, // Precision - "'", // Literal prefix - "'", // Literal suffix - "(M)", // Create params - com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable - false, // case sensitive - com::sun::star::sdbc::ColumnSearch::FULL, // searchable - false, // unsignable - false, // fixed_prec_scale - false, // auto_increment - "NUMERIC", // local type name - 0, // minimum scale - 0 // maximum scale - }, - - // ----------- MySQL-Type: DECIMAL SDBC-Type: DECIMAL ---------- - { - "DECIMAL", // Typename - com::sun::star::sdbc::DataType::DECIMAL, // sdbc-type - 17, // Precision - "", // Literal prefix - "", // Literal suffix - "[(M[,D])] [ZEROFILL]", // Create params - com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable - false, // case sensitive - com::sun::star::sdbc::ColumnSearch::FULL, // searchable - false, // unsignable - false, // fixed_prec_scale - true, // auto_increment - "DECIMAL", // local type name - -308, // minimum scale - 308 // maximum scale - }, - - // ----------- MySQL-Type: NUMERIC SDBC-Type: NUMERIC ---------- - { - "NUMERIC", // Typename - com::sun::star::sdbc::DataType::NUMERIC, // sdbc-type - 17, // Precision - "", // Literal prefix - "", // Literal suffix - "[(M[,D])] [ZEROFILL]", // Create params - com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable - false, // case sensitive - com::sun::star::sdbc::ColumnSearch::FULL, // searchable - false, // unsignable - false, // fixed_prec_scale - true, // auto_increment - "NUMERIC", // local type name - -308, // minimum scale - 308 // maximum scale - }, - - // ----------- MySQL-Type: INTEGER SDBC-Type: INTEGER ---------- - { - "INTEGER", // Typename - com::sun::star::sdbc::DataType::INTEGER, // sdbc-type - 10, // Precision - "", // Literal prefix - "", // Literal suffix - "[(M)] [UNSIGNED] [ZEROFILL]", // Create params - com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable - false, // case sensitive - com::sun::star::sdbc::ColumnSearch::FULL, // searchable - true, // unsignable - false, // fixed_prec_scale - true, // auto_increment - "INTEGER", // local type name - 0, // minimum scale - 0 // maximum scale - }, - - // ----------- MySQL-Type: INT SDBC-Type: INTEGER ---------- - { - "INT", // Typename - com::sun::star::sdbc::DataType::INTEGER, // sdbc-type - 10, // Precision - "", // Literal prefix - "", // Literal suffix - "[(M)] [UNSIGNED] [ZEROFILL]", // Create params - com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable - false, // case sensitive - com::sun::star::sdbc::ColumnSearch::FULL, // searchable - true, // unsignable - false, // fixed_prec_scale - true, // auto_increment - "INT", // local type name - 0, // minimum scale - 0 // maximum scale - }, - - // ----------- MySQL-Type: MEDIUMINT SDBC-Type: INTEGER ---------- - { - "MEDIUMINT", // Typename - com::sun::star::sdbc::DataType::INTEGER, // sdbc-type - 7, // Precision - "", // Literal prefix - "", // Literal suffix - "[(M)] [UNSIGNED] [ZEROFILL]", // Create params - com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable - false, // case sensitive - com::sun::star::sdbc::ColumnSearch::FULL, // searchable - true, // unsignable - false, // fixed_prec_scale - true, // auto_increment - "MEDIUMINT", // local type name - 0, // minimum scale - 0 // maximum scale - }, - - // ----------- MySQL-Type: SMALLINT SDBC-Type: INTEGER ---------- - { - "SMALLINT", // Typename - com::sun::star::sdbc::DataType::SMALLINT, // sdbc-type - 5, // Precision - "", // Literal prefix - "", // Literal suffix - "[(M)] [UNSIGNED] [ZEROFILL]", // Create params - com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable - false, // case sensitive - com::sun::star::sdbc::ColumnSearch::FULL, // searchable - true, // unsignable - false, // fixed_prec_scale - true, // auto_increment - "SMALLINT", // local type name - 0, // minimum scale - 0 // maximum scale - }, - - // ----------- MySQL-Type: FLOAT SDBC-Type: REAL ---------- - { - "FLOAT", // Typename - com::sun::star::sdbc::DataType::REAL, // sdbc-type - 10, // Precision - "", // Literal prefix - "", // Literal suffix - "[(M,D)] [ZEROFILL]", // Create params - com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable - false, // case sensitive - com::sun::star::sdbc::ColumnSearch::FULL, // searchable - false, // unsignable - false, // fixed_prec_scale - true, // auto_increment - "FLOAT", // local type name - -38, // minimum scale - 38 // maximum scale - }, - - // ----------- MySQL-Type: DOUBLE SDBC-Type: DOUBLE ---------- - { - "DOUBLE", // Typename - com::sun::star::sdbc::DataType::DOUBLE, // sdbc-type - 17, // Precision - "", // Literal prefix - "", // Literal suffix - "[(M,D)] [ZEROFILL]", // Create params - com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable - false, // case sensitive - com::sun::star::sdbc::ColumnSearch::FULL, // searchable - false, // unsignable - false, // fixed_prec_scale - true, // auto_increment - "DOUBLE", // local type name - -308, // minimum scale - 308 // maximum scale - }, - - // ----------- MySQL-Type: DOUBLE PRECISION SDBC-Type: DOUBLE ---------- - { - "DOUBLE PRECISION", // Typename - com::sun::star::sdbc::DataType::DOUBLE, // sdbc-type - 17, // Precision - "", // Literal prefix - "", // Literal suffix - "[(M,D)] [ZEROFILL]", // Create params - com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable - false, // case sensitive - com::sun::star::sdbc::ColumnSearch::FULL, // searchable - false, // unsignable - false, // fixed_prec_scale - true, // auto_increment - "DOUBLE PRECISION", // local type name - -308, // minimum scale - 308 // maximum scale - }, - - // ----------- MySQL-Type: REAL SDBC-Type: DOUBLE ---------- - { - "REAL", // Typename - com::sun::star::sdbc::DataType::DOUBLE, // sdbc-type - 17, // Precision - "", // Literal prefix - "", // Literal suffix - "[(M,D)] [ZEROFILL]", // Create params - com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable - false, // case sensitive - com::sun::star::sdbc::ColumnSearch::FULL, // searchable - false, // unsignable - false, // fixed_prec_scale - true, // auto_increment - "REAL", // local type name - -308, // minimum scale - 308 // maximum scale - }, - - // ----------- MySQL-Type: VARCHAR SDBC-Type: VARCHAR ---------- - { - "VARCHAR", // Typename - com::sun::star::sdbc::DataType::VARCHAR, // sdbc-type - 255, // Precision - "'", // Literal prefix - "'", // Literal suffix - "(M)", // Create params - com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable - false, // case sensitive - com::sun::star::sdbc::ColumnSearch::FULL, // searchable - false, // unsignable - false, // fixed_prec_scale - false, // auto_increment - "VARCHAR", // local type name - 0, // minimum scale - 0 // maximum scale - }, - - // ----------- MySQL-Type: ENUM SDBC-Type: VARCHAR ---------- - { - "ENUM", // Typename - com::sun::star::sdbc::DataType::VARCHAR, // sdbc-type - 0xFFFF, // Precision - "'", // Literal prefix - "'", // Literal suffix - "", // Create params - com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable - false, // case sensitive - com::sun::star::sdbc::ColumnSearch::FULL, // searchable - false, // unsignable - false, // fixed_prec_scale - false, // auto_increment - "ENUM", // local type name - 0, // minimum scale - 0 // maximum scale - }, - - // ----------- MySQL-Type: SET SDBC-Type: VARCHAR ---------- - { - "SET", // Typename - com::sun::star::sdbc::DataType::VARCHAR, // sdbc-type - 64, // Precision - "'", // Literal prefix - "'", // Literal suffix - "", // Create params - com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable - false, // case sensitive - com::sun::star::sdbc::ColumnSearch::FULL, // searchable - false, // unsignable - false, // fixed_prec_scale - false, // auto_increment - "SET", // local type name - 0, // minimum scale - 0 // maximum scale - }, - - // ----------- MySQL-Type: DATE SDBC-Type: DATE ---------- - { - "DATE", // Typename - com::sun::star::sdbc::DataType::DATE, // sdbc-type - 0, // Precision - "'", // Literal prefix - "'", // Literal suffix - "", // Create params - com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable - false, // case sensitive - com::sun::star::sdbc::ColumnSearch::FULL, // searchable - false, // unsignable - false, // fixed_prec_scale - false, // auto_increment - "DATE", // local type name - 0, // minimum scale - 0 // maximum scale - }, - - // ----------- MySQL-Type: TIME SDBC-Type: TIME ---------- - { - "TIME", // Typename - com::sun::star::sdbc::DataType::TIME, // sdbc-type - 0, // Precision - "'", // Literal prefix - "'", // Literal suffix - "", // Create params - com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable - false, // case sensitive - com::sun::star::sdbc::ColumnSearch::FULL, // searchable - false, // unsignable - false, // fixed_prec_scale - false, // auto_increment - "TIME", // local type name - 0, // minimum scale - 0 // maximum scale - }, - - // ----------- MySQL-Type: DATETIME SDBC-Type: TIMESTAMP ---------- - { - "DATETIME", // Typename - com::sun::star::sdbc::DataType::TIMESTAMP, // sdbc-type - 0, // Precision - "'", // Literal prefix - "'", // Literal suffix - "", // Create params - com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable - false, // case sensitive - com::sun::star::sdbc::ColumnSearch::FULL, // searchable - false, // unsignable - false, // fixed_prec_scale - false, // auto_increment - "DATETIME", // local type name - 0, // minimum scale - 0 // maximum scale - }, - - // ----------- MySQL-Type: TIMESTAMP SDBC-Type: TIMESTAMP ---------- - { - "TIMESTAMP", // Typename - com::sun::star::sdbc::DataType::TIMESTAMP, // sdbc-type - 0, // Precision - "'", // Literal prefix - "'", // Literal suffix - "[(M)]", // Create params - com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable - false, // case sensitive - com::sun::star::sdbc::ColumnSearch::FULL, // searchable - false, // unsignable - false, // fixed_prec_scale - false, // auto_increment - "TIMESTAMP", // local type name - 0, // minimum scale - 0 // maximum scale - }, - - // ----------- MySQL-Type: TIMESTAMP SDBC-Type: TIMESTAMP ---------- - { - nullptr, 0, 0, nullptr, nullptr, nullptr, 0, false, 0, false, false, false, nullptr, 0, 0 - } -}; - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/mysqlc/source/mysqlc_types.hxx b/mysqlc/source/mysqlc_types.hxx deleted file mode 100644 index ccdfc57a7993..000000000000 --- a/mysqlc/source/mysqlc_types.hxx +++ /dev/null @@ -1,45 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef INCLUDED_MYSQLC_SOURCE_MYSQLC_TYPES_HXX -#define INCLUDED_MYSQLC_SOURCE_MYSQLC_TYPES_HXX - -struct TypeInfoDef { - const char *typeName; - sal_Int32 dataType; - sal_Int32 precision; - const char *literalPrefix; - const char *literalSuffix; - const char *createParams; - sal_Int16 nullable; - bool caseSensitive; - sal_Int16 searchable; - bool isUnsigned; - bool fixedPrecScale; - bool autoIncrement; - const char *localTypeName; - sal_Int32 minScale; - sal_Int32 maxScale; -}; - -extern TypeInfoDef mysqlc_types[]; - -#endif // INCLUDED_MYSQLC_SOURCE_MYSQLC_TYPES_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/mysqlc/source/registry/data/org/openoffice/Office/DataAccess/Drivers.xcu b/mysqlc/source/registry/data/org/openoffice/Office/DataAccess/Drivers.xcu deleted file mode 100644 index 7ade9eebbc60..000000000000 --- a/mysqlc/source/registry/data/org/openoffice/Office/DataAccess/Drivers.xcu +++ /dev/null @@ -1,91 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - --> -<oor:component-data oor:name="Drivers" oor:package="org.openoffice.Office.DataAccess" xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema"> - <node oor:name="Installed"> - <node oor:name="sdbc:mysqlc:*" oor:op="replace"> - <prop oor:name="Driver"> - <value>com.sun.star.comp.sdbc.mysqlc.MysqlCDriver</value> - </prop> - <prop oor:name="DriverTypeDisplayName" oor:type="xs:string"> - <value xml:lang="en-US">MySQL Connector</value> - </prop> - <node oor:name="Properties"> - <node oor:name="CharSet" oor:op="replace"> - <prop oor:name="Value" oor:type="xs:string"> - <value></value> - </prop> - </node> - <node oor:name="LocalSocket" oor:op="replace"> - <prop oor:name="Value" oor:type="xs:string"> - <value></value> - </prop> - </node> - <node oor:name="NamedPipe" oor:op="replace"> - <prop oor:name="Value" oor:type="xs:string"> - <value></value> - </prop> - </node> - </node> - <node oor:name="Features"> - <node oor:name="UseKeywordAsBeforeAlias" oor:op="replace"> - <prop oor:name="Value" oor:type="xs:boolean"> - <value>true</value> - </prop> - </node> - <node oor:name="IgnoreDriverPrivileges" oor:op="replace"> - <prop oor:name="Value" oor:type="xs:boolean"> - <value>true</value> - </prop> - </node> - <node oor:name="DisplayVersionColumns" oor:op="replace"> - <prop oor:name="Value" oor:type="xs:boolean"> - <value>true</value> - </prop> - </node> - <node oor:name="UseDOSLineEnds" oor:op="replace"> - <prop oor:name="Value" oor:type="xs:boolean"> - <value>true</value> - </prop> - </node> - <node oor:name="BooleanComparisonMode" oor:op="replace"> - <prop oor:name="Value" oor:type="xs:boolean"> - <value>true</value> - </prop> - </node> - <node oor:name="FormsCheckRequiredFields" oor:op="replace"> - <prop oor:name="Value" oor:type="xs:boolean"> - <value>true</value> - </prop> - </node> - </node> - <node oor:name="MetaData"> - <node oor:name="SupportsTableCreation" oor:op="replace"> - <prop oor:name="Value" oor:type="xs:boolean"> - <value>true</value> - </prop> - </node> - <node oor:name="Authentication" oor:op="replace"> - <prop oor:name="Value" oor:type="xs:string"> - <value>UserPassword</value> - </prop> - </node> - </node> - </node> - </node> -</oor:component-data> |