[Libreoffice-commits] core.git: Branch 'distro/collabora/cp-6.0' - connectivity/Configuration_mysqlc.mk connectivity/Configuration_mysql.mk connectivity/Library_mysql.mk connectivity/Module_connectivity.mk connectivity/registry connectivity/source dbaccess/source mysqlc/Extension_mysql-connector-ooo.mk mysqlc/source postprocess/CustomTarget_registry.mk postprocess/Rdb_services.mk

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Thu Oct 25 12:53:10 UTC 2018


 connectivity/Configuration_mysql.mk                                      |    8 
 connectivity/Configuration_mysqlc.mk                                     |   20 
 connectivity/Library_mysql.mk                                            |   32 
 connectivity/Module_connectivity.mk                                      |    5 
 connectivity/registry/mysql/org/openoffice/Office/DataAccess/Drivers.xcu |  249 ++
 connectivity/source/drivers/mysql/YUser.cxx                              |  320 ++
 connectivity/source/drivers/mysql/mysql.component                        |   26 
 dbaccess/source/ui/dlg/generalpage.cxx                                   |    4 
 dbaccess/source/ui/dlg/generalpage.hxx                                   |    5 
 mysqlc/Extension_mysql-connector-ooo.mk                                  |   35 
 mysqlc/source/mysqlc_connection.hxx                                      |  195 -
 mysqlc/source/mysqlc_databasemetadata.cxx                                | 1234 ----------
 mysqlc/source/mysqlc_driver.cxx                                          |  317 --
 mysqlc/source/mysqlc_driver.hxx                                          |  124 -
 mysqlc/source/mysqlc_general.cxx                                         |  352 --
 mysqlc/source/mysqlc_statement.hxx                                       |  196 -
 mysqlc/source/mysqlc_subcomponent.hxx                                    |  201 -
 postprocess/CustomTarget_registry.mk                                     |    5 
 postprocess/Rdb_services.mk                                              |    1 
 19 files changed, 665 insertions(+), 2664 deletions(-)

New commits:
commit 36defede63afe94e9bc6872eac955757c49452c1
Author:     Tamas Bunth <tamas.bunth at collabora.co.uk>
AuthorDate: Mon Oct 8 11:04:48 2018 +0200
Commit:     Andras Timar <andras.timar at collabora.com>
CommitDate: Thu Oct 25 14:52:44 2018 +0200

    Revert removal of mysql jdbc connector
    
    And also make some minor fixes so it cooperates with the new mysqlc
    library.
    
    Change-Id: I866add99a699150c6550ee7f7ff2ee947e07117c
    Reviewed-on: https://gerrit.libreoffice.org/61648
    Tested-by: Jenkins
    Reviewed-by: Tamás Bunth <btomi96 at gmail.com>
    Reviewed-on: https://gerrit.libreoffice.org/62318
    Reviewed-by: Andras Timar <andras.timar at collabora.com>
    Tested-by: Andras Timar <andras.timar at collabora.com>

diff --git a/connectivity/Configuration_mysql.mk b/connectivity/Configuration_mysql.mk
index 5ef54c70a80c..1cb07ca71441 100644
--- a/connectivity/Configuration_mysql.mk
+++ b/connectivity/Configuration_mysql.mk
@@ -7,13 +7,13 @@
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 #
 
-$(eval $(call gb_Configuration_Configuration,driver_mysqlc))
+$(eval $(call gb_Configuration_Configuration,driver_mysql))
 
-$(eval $(call gb_Configuration_add_spool_modules,driver_mysqlc,connectivity/registry/mysqlc,\
-	org/openoffice/Office/DataAccess/Drivers-mysqlc.xcu \
+$(eval $(call gb_Configuration_add_spool_modules,driver_mysql,connectivity/registry/mysql,\
+	org/openoffice/Office/DataAccess/Drivers-mysql.xcu \
 ))
 
-$(eval $(call gb_Configuration_add_localized_datas,driver_mysqlc,connectivity/registry/mysqlc,\
+$(eval $(call gb_Configuration_add_localized_datas,driver_mysql,connectivity/registry/mysql,\
 	org/openoffice/Office/DataAccess/Drivers.xcu \
 ))
 
diff --git a/connectivity/Configuration_mysqlc.mk b/connectivity/Configuration_mysqlc.mk
new file mode 100644
index 000000000000..5ef54c70a80c
--- /dev/null
+++ b/connectivity/Configuration_mysqlc.mk
@@ -0,0 +1,20 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+# 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/.
+#
+
+$(eval $(call gb_Configuration_Configuration,driver_mysqlc))
+
+$(eval $(call gb_Configuration_add_spool_modules,driver_mysqlc,connectivity/registry/mysqlc,\
+	org/openoffice/Office/DataAccess/Drivers-mysqlc.xcu \
+))
+
+$(eval $(call gb_Configuration_add_localized_datas,driver_mysqlc,connectivity/registry/mysqlc,\
+	org/openoffice/Office/DataAccess/Drivers.xcu \
+))
+
+# vim: set noet sw=4 ts=4:
diff --git a/connectivity/Library_mysql.mk b/connectivity/Library_mysql.mk
index f82593c23d2e..ac3c0c2619e8 100644
--- a/connectivity/Library_mysql.mk
+++ b/connectivity/Library_mysql.mk
@@ -1,20 +1,48 @@
 # -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
 #
+#
 # 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/.
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
 #
 
 $(eval $(call gb_Library_Library,mysql))
 
+$(eval $(call gb_Library_set_componentfile,mysql,connectivity/source/drivers/mysql/mysql))
+
+$(eval $(call gb_Library_use_external,mysql,boost_headers))
+
+$(eval $(call gb_Library_use_sdk_api,mysql))
+
+$(eval $(call gb_Library_set_include,mysql,\
+	$$(INCLUDE) \
+	-I$(SRCDIR)/connectivity/inc \
+	-I$(SRCDIR)/connectivity/source/inc \
+))
+
+$(eval $(call gb_Library_set_precompiled_header,mysql,$(SRCDIR)/connectivity/inc/pch/precompiled_mysql))
+
 $(eval $(call gb_Library_use_libraries,mysql,\
+	cppu \
+	cppuhelper \
 	sal \
+	salhelper \
+	dbtools \
+	comphelper \
 ))
 
 $(eval $(call gb_Library_add_exception_objects,mysql,\
-	connectivity/source/drivers/mysqlc/mysql_dummy \
+	connectivity/source/drivers/mysql/YDriver \
+	connectivity/source/drivers/mysql/YTables \
+	connectivity/source/drivers/mysql/YTable \
+	connectivity/source/drivers/mysql/YViews \
+	connectivity/source/drivers/mysql/YCatalog \
+	connectivity/source/drivers/mysql/YColumns \
+	connectivity/source/drivers/mysql/YUser \
+	connectivity/source/drivers/mysql/YUsers \
+	connectivity/source/drivers/mysql/Yservices \
 ))
 
 # vim: set noet sw=4 ts=4:
diff --git a/connectivity/Module_connectivity.mk b/connectivity/Module_connectivity.mk
index 250172e936a1..4a579ddcb43b 100644
--- a/connectivity/Module_connectivity.mk
+++ b/connectivity/Module_connectivity.mk
@@ -40,6 +40,8 @@ ifneq ($(ENABLE_JAVA),)
 $(eval $(call gb_Module_add_targets,connectivity,\
 	Configuration_hsqldb \
 	Configuration_jdbc \
+	Configuration_mysql \
+	Library_mysql \
 	Jar_sdbc_hsqldb \
 	Library_hsqldb \
 	Library_jdbc \
@@ -81,9 +83,8 @@ endif
 
 ifeq ($(ENABLE_MARIADBC),TRUE)
 $(eval $(call gb_Module_add_targets,connectivity,\
-	Configuration_mysql \
+	Configuration_mysqlc \
 	Library_mysqlc \
-	Library_mysql \
 ))
 endif
 
diff --git a/connectivity/registry/mysql/org/openoffice/Office/DataAccess/Drivers.xcu b/connectivity/registry/mysql/org/openoffice/Office/DataAccess/Drivers.xcu
new file mode 100644
index 000000000000..faf9ddb9fa55
--- /dev/null
+++ b/connectivity/registry/mysql/org/openoffice/Office/DataAccess/Drivers.xcu
@@ -0,0 +1,249 @@
+<?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:install="http://openoffice.org/2004/installation" xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <node oor:name="Installed" install:module="mysql">
+    <node oor:name="sdbc:mysql:jdbc:*" oor:op="replace">
+      <prop oor:name="Driver">
+        <value>org.openoffice.comp.drivers.MySQL.Driver</value>
+      </prop>
+      <prop oor:name="DriverTypeDisplayName" oor:type="xs:string">
+        <value xml:lang="en-US">MySQL (JDBC)</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="JavaDriverClass" oor:op="replace">
+          <prop oor:name="Value" oor:type="xs:string">
+            <value>com.mysql.jdbc.Driver</value>
+          </prop>
+        </node>
+        <node oor:name="AddIndexAppendix" oor:op="replace">
+          <prop oor:name="Value" oor:type="xs:boolean">
+            <value>true</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="UseJava" 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 oor:name="SupportsColumnDescription" oor:op="replace">
+          <prop oor:name="Value" oor:type="xs:boolean">
+            <value>true</value>
+          </prop>
+        </node>
+      </node>
+    </node>
+    <node oor:name="sdbc:mysql:odbc:*" oor:op="replace">
+      <prop oor:name="Driver">
+        <value>org.openoffice.comp.drivers.MySQL.Driver</value>
+      </prop>
+      <prop oor:name="DriverTypeDisplayName" oor:type="xs:string">
+        <value xml:lang="en-US">MySQL (ODBC)</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="AddIndexAppendix" oor:op="replace">
+          <prop oor:name="Value" oor:type="xs:boolean">
+            <value>true</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="SupportsBrowsing" 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:name="sdbc:mysql:mysqlc:*" oor:op="replace">
+      <prop oor:name="Driver">
+        <value>org.openoffice.comp.drivers.MySQL.Driver</value>
+      </prop>
+      <prop oor:name="DriverTypeDisplayName" oor:type="xs:string">
+        <value xml:lang="en-US">MySQL (Native)</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 oor:name="AddIndexAppendix" oor:op="replace">
+          <prop oor:name="Value" oor:type="xs:boolean">
+            <value>true</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 oor:name="SupportsColumnDescription" oor:op="replace">
+          <prop oor:name="Value" oor:type="xs:boolean">
+            <value>true</value>
+          </prop>
+        </node>
+      </node>
+    </node>
+  </node>
+</oor:component-data>
diff --git a/connectivity/source/drivers/mysql/YUser.cxx b/connectivity/source/drivers/mysql/YUser.cxx
new file mode 100644
index 000000000000..bc9c8c55b22e
--- /dev/null
+++ b/connectivity/source/drivers/mysql/YUser.cxx
@@ -0,0 +1,320 @@
+/* -*- 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 <mysql/YUser.hxx>
+#include <com/sun/star/sdbc/XRow.hpp>
+#include <com/sun/star/sdbc/XResultSet.hpp>
+#include <connectivity/dbtools.hxx>
+#include <connectivity/dbexception.hxx>
+#include <com/sun/star/sdbcx/Privilege.hpp>
+#include <com/sun/star/sdbcx/PrivilegeObject.hpp>
+#include <TConnection.hxx>
+#include <strings.hrc>
+
+using namespace connectivity;
+using namespace connectivity::mysql;
+using namespace ::com::sun::star::uno;
+using namespace ::com::sun::star::beans;
+using namespace ::com::sun::star::sdbcx;
+using namespace ::com::sun::star::sdbc;
+using namespace ::com::sun::star::container;
+using namespace ::com::sun::star::lang;
+
+OMySQLUser::OMySQLUser( const css::uno::Reference< css::sdbc::XConnection >& _xConnection) : connectivity::sdbcx::OUser(true)
+                ,m_xConnection(_xConnection)
+{
+    construct();
+}
+
+OMySQLUser::OMySQLUser(   const css::uno::Reference< css::sdbc::XConnection >& _xConnection,
+                const OUString& Name
+            ) : connectivity::sdbcx::OUser(Name,true)
+                ,m_xConnection(_xConnection)
+{
+    construct();
+}
+
+void OMySQLUser::refreshGroups()
+{
+}
+
+OUserExtend::OUserExtend(   const css::uno::Reference< css::sdbc::XConnection >& _xConnection) : OMySQLUser(_xConnection)
+{
+    construct();
+}
+
+void OUserExtend::construct()
+{
+    registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_PASSWORD),    PROPERTY_ID_PASSWORD,0,&m_Password,::cppu::UnoType<OUString>::get());
+}
+
+cppu::IPropertyArrayHelper* OUserExtend::createArrayHelper() const
+{
+    Sequence< Property > aProps;
+    describeProperties(aProps);
+    return new cppu::OPropertyArrayHelper(aProps);
+}
+
+cppu::IPropertyArrayHelper & OUserExtend::getInfoHelper()
+{
+    return *OUserExtend_PROP::getArrayHelper();
+}
+typedef connectivity::sdbcx::OUser_BASE OUser_BASE_RBHELPER;
+
+sal_Int32 SAL_CALL OMySQLUser::getPrivileges( const OUString& objName, sal_Int32 objType )
+{
+    ::osl::MutexGuard aGuard(m_aMutex);
+    checkDisposed(OUser_BASE_RBHELPER::rBHelper.bDisposed);
+
+    sal_Int32 nRights,nRightsWithGrant;
+    findPrivilegesAndGrantPrivileges(objName,objType,nRights,nRightsWithGrant);
+    return nRights;
+}
+
+void OMySQLUser::findPrivilegesAndGrantPrivileges(const OUString& objName, sal_Int32 objType,sal_Int32& nRights,sal_Int32& nRightsWithGrant)
+{
+    nRightsWithGrant = nRights = 0;
+    // first we need to create the sql stmt to select the privs
+    Reference<XDatabaseMetaData> xMeta = m_xConnection->getMetaData();
+    OUString sCatalog,sSchema,sTable;
+    ::dbtools::qualifiedNameComponents(xMeta,objName,sCatalog,sSchema,sTable,::dbtools::EComposeRule::InDataManipulation);
+    Reference<XResultSet> xRes;
+    switch(objType)
+    {
+        case PrivilegeObject::TABLE:
+        case PrivilegeObject::VIEW:
+            {
+                Any aCatalog;
+                if ( !sCatalog.isEmpty() )
+                    aCatalog <<= sCatalog;
+                xRes = xMeta->getTablePrivileges(aCatalog,sSchema,sTable);
+            }
+            break;
+
+        case PrivilegeObject::COLUMN:
+            {
+                Any aCatalog;
+                if ( !sCatalog.isEmpty() )
+                    aCatalog <<= sCatalog;
+                xRes = xMeta->getColumnPrivileges(aCatalog,sSchema,sTable, "%");
+            }
+            break;
+    }
+
+    if ( xRes.is() )
+    {
+        static const char sYes      [] = "YES";
+
+        nRightsWithGrant = nRights = 0;
+
+        Reference<XRow> xCurrentRow(xRes,UNO_QUERY);
+        while( xCurrentRow.is() && xRes->next() )
+        {
+            OUString sGrantee    = xCurrentRow->getString(5);
+            OUString sPrivilege  = xCurrentRow->getString(6);
+            OUString sGrantable  = xCurrentRow->getString(7);
+
+            if (!m_Name.equalsIgnoreAsciiCase(sGrantee))
+                continue;
+
+            if (sPrivilege.equalsIgnoreAsciiCase("SELECT"))
+            {
+                nRights |= Privilege::SELECT;
+                if ( sGrantable.equalsIgnoreAsciiCase(sYes) )
+                    nRightsWithGrant |= Privilege::SELECT;
+            }
+            else if (sPrivilege.equalsIgnoreAsciiCase("INSERT"))
+            {
+                nRights |= Privilege::INSERT;
+                if ( sGrantable.equalsIgnoreAsciiCase(sYes) )
+                    nRightsWithGrant |= Privilege::INSERT;
+            }
+            else if (sPrivilege.equalsIgnoreAsciiCase("UPDATE"))
+            {
+                nRights |= Privilege::UPDATE;
+                if ( sGrantable.equalsIgnoreAsciiCase(sYes) )
+                    nRightsWithGrant |= Privilege::UPDATE;
+            }
+            else if (sPrivilege.equalsIgnoreAsciiCase("DELETE"))
+            {
+                nRights |= Privilege::DELETE;
+                if ( sGrantable.equalsIgnoreAsciiCase(sYes) )
+                    nRightsWithGrant |= Privilege::DELETE;
+            }
+            else if (sPrivilege.equalsIgnoreAsciiCase("READ"))
+            {
+                nRights |= Privilege::READ;
+                if ( sGrantable.equalsIgnoreAsciiCase(sYes) )
+                    nRightsWithGrant |= Privilege::READ;
+            }
+            else if (sPrivilege.equalsIgnoreAsciiCase("CREATE"))
+            {
+                nRights |= Privilege::CREATE;
+                if ( sGrantable.equalsIgnoreAsciiCase(sYes) )
+                    nRightsWithGrant |= Privilege::CREATE;
+            }
+            else if (sPrivilege.equalsIgnoreAsciiCase("ALTER"))
+            {
+                nRights |= Privilege::ALTER;
+                if ( sGrantable.equalsIgnoreAsciiCase(sYes) )
+                    nRightsWithGrant |= Privilege::ALTER;
+            }
+            else if (sPrivilege.equalsIgnoreAsciiCase("REFERENCES"))
+            {
+                nRights |= Privilege::REFERENCE;
+                if ( sGrantable.equalsIgnoreAsciiCase(sYes) )
+                    nRightsWithGrant |= Privilege::REFERENCE;
+            }
+            else if (sPrivilege.equalsIgnoreAsciiCase("DROP"))
+            {
+                nRights |= Privilege::DROP;
+                if ( sGrantable.equalsIgnoreAsciiCase(sYes) )
+                    nRightsWithGrant |= Privilege::DROP;
+            }
+        }
+        ::comphelper::disposeComponent(xRes);
+    }
+}
+
+sal_Int32 SAL_CALL OMySQLUser::getGrantablePrivileges( const OUString& objName, sal_Int32 objType )
+{
+    ::osl::MutexGuard aGuard(m_aMutex);
+    checkDisposed(OUser_BASE_RBHELPER::rBHelper.bDisposed);
+
+    sal_Int32 nRights,nRightsWithGrant;
+    findPrivilegesAndGrantPrivileges(objName,objType,nRights,nRightsWithGrant);
+    return nRightsWithGrant;
+}
+
+void SAL_CALL OMySQLUser::grantPrivileges( const OUString& objName, sal_Int32 objType, sal_Int32 objPrivileges )
+{
+    if ( objType != PrivilegeObject::TABLE )
+    {
+        ::connectivity::SharedResources aResources;
+        const OUString sError( aResources.getResourceString(STR_PRIVILEGE_NOT_GRANTED));
+        ::dbtools::throwGenericSQLException(sError,*this);
+    } // if ( objType != PrivilegeObject::TABLE )
+
+    ::osl::MutexGuard aGuard(m_aMutex);
+
+    OUString sPrivs = getPrivilegeString(objPrivileges);
+    if(!sPrivs.isEmpty())
+    {
+        Reference<XDatabaseMetaData> xMeta = m_xConnection->getMetaData();
+        OUString sGrant = "GRANT " + sPrivs +
+            " ON " + ::dbtools::quoteTableName(xMeta,objName,::dbtools::EComposeRule::InDataManipulation) +
+            " TO " + m_Name;
+
+        Reference<XStatement> xStmt = m_xConnection->createStatement();
+        if(xStmt.is())
+            xStmt->execute(sGrant);
+        ::comphelper::disposeComponent(xStmt);
+    }
+}
+
+void SAL_CALL OMySQLUser::revokePrivileges( const OUString& objName, sal_Int32 objType, sal_Int32 objPrivileges )
+{
+    if ( objType != PrivilegeObject::TABLE )
+    {
+        ::connectivity::SharedResources aResources;
+        const OUString sError( aResources.getResourceString(STR_PRIVILEGE_NOT_REVOKED));
+        ::dbtools::throwGenericSQLException(sError,*this);
+    }
+
+    ::osl::MutexGuard aGuard(m_aMutex);
+    checkDisposed(OUser_BASE_RBHELPER::rBHelper.bDisposed);
+    OUString sPrivs = getPrivilegeString(objPrivileges);
+    if(!sPrivs.isEmpty())
+    {
+        Reference<XDatabaseMetaData> xMeta = m_xConnection->getMetaData();
+        OUString sGrant = "REVOKE " + sPrivs +
+            " ON " + ::dbtools::quoteTableName(xMeta,objName,::dbtools::EComposeRule::InDataManipulation) +
+            " FROM " + m_Name;
+
+        Reference<XStatement> xStmt = m_xConnection->createStatement();
+        if(xStmt.is())
+            xStmt->execute(sGrant);
+        ::comphelper::disposeComponent(xStmt);
+    }
+}
+
+// XUser
+void SAL_CALL OMySQLUser::changePassword( const OUString& /*oldPassword*/, const OUString& newPassword )
+{
+    ::osl::MutexGuard aGuard(m_aMutex);
+    checkDisposed(OUser_BASE_RBHELPER::rBHelper.bDisposed);
+    OUString sAlterPwd = "SET PASSWORD FOR " +
+        m_Name + "@\"%\" = PASSWORD('" +
+        newPassword + "')";
+
+
+    Reference<XStatement> xStmt = m_xConnection->createStatement();
+    if ( xStmt.is() )
+    {
+        xStmt->execute(sAlterPwd);
+        ::comphelper::disposeComponent(xStmt);
+    }
+}
+
+OUString OMySQLUser::getPrivilegeString(sal_Int32 nRights)
+{
+    OUString sPrivs;
+    if((nRights & Privilege::INSERT) == Privilege::INSERT)
+        sPrivs += "INSERT";
+
+    if((nRights & Privilege::DELETE) == Privilege::DELETE)
+    {
+        if(!sPrivs.isEmpty())
+            sPrivs += ",";
+        sPrivs += "DELETE";
+    }
+
+    if((nRights & Privilege::UPDATE) == Privilege::UPDATE)
+    {
+        if(!sPrivs.isEmpty())
+            sPrivs += ",";
+        sPrivs += "UPDATE";
+    }
+
+    if((nRights & Privilege::ALTER) == Privilege::ALTER)
+    {
+        if(!sPrivs.isEmpty())
+            sPrivs += ",";
+        sPrivs += "ALTER";
+    }
+
+    if((nRights & Privilege::SELECT) == Privilege::SELECT)
+    {
+        if(!sPrivs.isEmpty())
+            sPrivs += ",";
+        sPrivs += "SELECT";
+    }
+
+    if((nRights & Privilege::REFERENCE) == Privilege::REFERENCE)
+    {
+        if(!sPrivs.isEmpty())
+            sPrivs += ",";
+        sPrivs += "REFERENCES";
+    }
+
+    return sPrivs;
+}
+
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/mysql/mysql.component b/connectivity/source/drivers/mysql/mysql.component
new file mode 100644
index 000000000000..9c3e7ad7c6cd
--- /dev/null
+++ b/connectivity/source/drivers/mysql/mysql.component
@@ -0,0 +1,26 @@
+<?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 .
+ -->
+
+<component loader="com.sun.star.loader.SharedLibrary" environment="@CPPU_ENV@"
+    prefix="mysql" xmlns="http://openoffice.org/2010/uno-components">
+  <implementation name="org.openoffice.comp.drivers.MySQL.Driver">
+    <service name="com.sun.star.sdbc.Driver"/>
+    <service name="com.sun.star.sdbcx.Driver"/>
+  </implementation>
+</component>
diff --git a/dbaccess/source/ui/dlg/generalpage.cxx b/dbaccess/source/ui/dlg/generalpage.cxx
index adf5e01bde07..a0ff5233d6cf 100644
--- a/dbaccess/source/ui/dlg/generalpage.cxx
+++ b/dbaccess/source/ui/dlg/generalpage.cxx
@@ -124,6 +124,10 @@ namespace dbaui
                     const OUString sURLPrefix = aTypeLoop.getURLPrefix();
                     if ( !sURLPrefix.isEmpty() )
                     {
+                        // skip mysql connection variations. It is handled in another window.
+                        if(sURLPrefix.startsWith("sdbc:mysql:") && !sURLPrefix.startsWith("sdbc:mysql:jdbc:"))
+                            continue;
+
                         OUString sDisplayName = aTypeLoop.getDisplayName();
                         if (   m_pDatasourceType->GetEntryPos( sDisplayName ) == LISTBOX_ENTRY_NOTFOUND
                             && approveDatasourceType( sURLPrefix, sDisplayName ) )
diff --git a/dbaccess/source/ui/dlg/generalpage.hxx b/dbaccess/source/ui/dlg/generalpage.hxx
index e8a3f444806a..c8a597562362 100644
--- a/dbaccess/source/ui/dlg/generalpage.hxx
+++ b/dbaccess/source/ui/dlg/generalpage.hxx
@@ -85,6 +85,11 @@ namespace dbaui
         virtual void fillWindows(std::vector< ISaveValueWrapper* >& _rControlList) override;
 
         void onTypeSelected(const OUString& _sURLPrefix);
+
+        /**
+         * Initializes the listbox, which contains entires each representing a
+         * connection to an existing database.
+         */
         void initializeTypeList();
 
         void implSetCurrentType( const OUString& _eType );
diff --git a/mysqlc/Extension_mysql-connector-ooo.mk b/mysqlc/Extension_mysql-connector-ooo.mk
deleted file mode 100644
index 6cdf44967c6b..000000000000
--- a/mysqlc/Extension_mysql-connector-ooo.mk
+++ /dev/null
@@ -1,35 +0,0 @@
-# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
-#
-# 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/.
-#
-
-$(eval $(call gb_Extension_Extension,mysql-connector-ooo,mysqlc/source))
-
-$(eval $(call gb_Extension_use_default_description,mysql-connector-ooo,mysqlc/source/description-en-US.txt))
-$(eval $(call gb_Extension_use_default_license,mysql-connector-ooo))
-
-$(eval $(call gb_Extension_add_library,mysql-connector-ooo,mysqlc))
-
-$(eval $(call gb_Extension_add_file,mysql-connector-ooo,components.rdb,$(call gb_Rdb_get_target,mysqlc)))
-
-$(eval $(call gb_Extension_add_file,mysql-connector-ooo,registry/data/org/openoffice/Office/DataAccess/Drivers.xcu,$(call gb_XcuFile_for_extension,mysqlc/source/registry/data/org/openoffice/Office/DataAccess/Drivers.xcu)))
-
-$(eval $(call gb_Extension_add_files,mysql-connector-ooo,images,\
-    $(SRCDIR)/icon-themes/galaxy/desktop/res/extension_32.png \
-))
-
-ifeq ($(SYSTEM_MYSQL_CONNECTOR_CPP),)
-$(eval $(call gb_Extension_add_library,mysql-connector-ooo,mysqlcppconn))
-endif
-
-ifneq ($(BUNDLE_MARIADB_CONNECTOR_C),)
-$(eval $(call gb_Extension_add_files,mysql-connector-ooo,,\
-       $(LIBMARIADB_PATH)/$(LIBMARIADB) \
-))
-endif
-
-# vim: set noet sw=4 ts=4:
diff --git a/mysqlc/source/mysqlc_connection.hxx b/mysqlc/source/mysqlc_connection.hxx
deleted file mode 100644
index 910a5a08d152..000000000000
--- a/mysqlc/source/mysqlc_connection.hxx
+++ /dev/null
@@ -1,195 +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,
-                            public connectivity::mysqlc::OSubComponent<OConnection, 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;
-
-            // XInterface
-            virtual void SAL_CALL release()                     throw() 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.cxx b/mysqlc/source/mysqlc_databasemetadata.cxx
deleted file mode 100644
index 0f9e539e6df3..000000000000
--- a/mysqlc/source/mysqlc_databasemetadata.cxx
+++ /dev/null
@@ -1,1234 +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_databasemetadata.hxx"
-#include <memory>
-#include <com/sun/star/sdbc/DataType.hpp>
-#include <com/sun/star/sdbc/ResultSetType.hpp>
-#include <com/sun/star/sdbc/ResultSetConcurrency.hpp>
-#include <com/sun/star/sdbc/TransactionIsolation.hpp>
-#include <com/sun/star/sdbc/KeyRule.hpp>
-#include <com/sun/star/sdbc/Deferrability.hpp>
-#include <com/sun/star/sdbc/IndexType.hpp>
-#include <com/sun/star/sdbc/BestRowScope.hpp>
-#include <com/sun/star/sdbc/ColumnType.hpp>
-#include <com/sun/star/lang/XInitialization.hpp>
-
-#include <rtl/ustrbuf.hxx>
-#include "mysqlc_general.hxx"
-#include "mysqlc_statement.hxx"
-#include "mysqlc_driver.hxx"
-#include "mysqlc_preparedstatement.hxx"
-
-#include <stdio.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 mysqlc_sdbc_driver::getStringFromAny;
-
-#include <sal/macros.h>
-
-static std::string wild("%");
-
-
-void lcl_setRows_throw(const Reference< XResultSet >& _xResultSet,sal_Int32 _nType,const std::vector< std::vector< Any > >& _rRows)
-{
-    Reference< XInitialization> xIni(_xResultSet,UNO_QUERY);
-    Sequence< Any > aArgs(2);
-    aArgs[0] <<= _nType;
-
-    Sequence< Sequence< Any > > aRows(_rRows.size());
-
-    std::vector< std::vector< Any > >::const_iterator aIter = _rRows.begin();
-    Sequence< Any > * pRowsIter = aRows.getArray();
-    Sequence< Any > * pRowsEnd  = pRowsIter + aRows.getLength();
-    for (; pRowsIter != pRowsEnd;++pRowsIter,++aIter) {
-        if (!aIter->empty()) {
-            Sequence<Any> aSeq(&(*aIter->begin()),aIter->size());
-            (*pRowsIter) = aSeq;
-        }
-    }
-    aArgs[1] <<= aRows;
-    xIni->initialize(aArgs);
-}
-
-ODatabaseMetaData::ODatabaseMetaData(OConnection& _rCon, MYSQL* pMySql)
-    :m_rConnection(_rCon)
-    ,m_pMySql(pMySql)
-    ,identifier_quote_string_set(false)
-{
-}
-
-ODatabaseMetaData::~ODatabaseMetaData()
-{
-}
-
-rtl::OUString SAL_CALL ODatabaseMetaData::getCatalogSeparator()
-{
-    return rtl::OUString();
-}
-
-sal_Int32 SAL_CALL ODatabaseMetaData::getMaxBinaryLiteralLength()
-{
-        return 16777208L;
-}
-
-sal_Int32 SAL_CALL ODatabaseMetaData::getMaxRowSize()
-{
-        return 2147483647L - 8; // Max buffer size - HEADER
-}
-
-sal_Int32 SAL_CALL ODatabaseMetaData::getMaxCatalogNameLength()
-{
-        return 32;
-}
-
-sal_Int32 SAL_CALL ODatabaseMetaData::getMaxCharLiteralLength()
-{
-        return 16777208;
-}
-
-sal_Int32 SAL_CALL ODatabaseMetaData::getMaxColumnNameLength()
-{
-        return 64;
-}
-
-sal_Int32 SAL_CALL ODatabaseMetaData::getMaxColumnsInIndex()
-{
-        return 16;
-}
-
-sal_Int32 SAL_CALL ODatabaseMetaData::getMaxCursorNameLength()
-{
-        return 64;
-}
-
-sal_Int32 SAL_CALL ODatabaseMetaData::getMaxConnections()
-{
-        // TODO
-        // SELECT @@max_connections
-        return 100;
-}
-
-sal_Int32 SAL_CALL ODatabaseMetaData::getMaxColumnsInTable()
-{
-        return 512;
-}
-
-sal_Int32 SAL_CALL ODatabaseMetaData::getMaxStatementLength()
-{
-        // TODO
-        // "SHOW VARIABLES LIKE 'max_allowed_packet'"
-    return 32767;
-}
-
-sal_Int32 SAL_CALL ODatabaseMetaData::getMaxTableNameLength()
-{
-        return 64;
-}
-
-sal_Int32 SAL_CALL ODatabaseMetaData::getMaxTablesInSelect()
-{
-        return 256;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::doesMaxRowSizeIncludeBlobs()
-{
-        return true;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::storesLowerCaseQuotedIdentifiers()
-{
-        // TODO
-        return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::storesLowerCaseIdentifiers()
-{
-        //TODO;
-    return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::storesMixedCaseQuotedIdentifiers()
-{
-        // TODO
-    return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::storesMixedCaseIdentifiers()
-{
-        // TODO
-        return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::storesUpperCaseQuotedIdentifiers()
-{
-        // TODO
-        return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::storesUpperCaseIdentifiers()
-{
-        // TODO
-        return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsAlterTableWithAddColumn()
-{
-        return true;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsAlterTableWithDropColumn()
-{
-        return true;
-}
-
-sal_Int32 SAL_CALL ODatabaseMetaData::getMaxIndexLength()
-{
-        return 256;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsNonNullableColumns()
-{
-        return true;
-}
-
-rtl::OUString SAL_CALL ODatabaseMetaData::getCatalogTerm()
-{
-    return rtl::OUString("n/a");
-}
-
-rtl::OUString SAL_CALL ODatabaseMetaData::getIdentifierQuoteString()
-{
-    return rtl::OUString("\"");
-}
-
-rtl::OUString SAL_CALL ODatabaseMetaData::getExtraNameCharacters()
-{
-    return rtl::OUString("#@");
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsDifferentTableCorrelationNames()
-{
-    return true;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::isCatalogAtStart()
-{
-    return true;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::dataDefinitionIgnoredInTransactions()
-{
-    return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::dataDefinitionCausesTransactionCommit()
-{
-    return true;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsDataManipulationTransactionsOnly()
-{
-    return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsDataDefinitionAndDataManipulationTransactions()
-{
-    return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsPositionedDelete()
-{
-    return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsPositionedUpdate()
-{
-    return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsOpenStatementsAcrossRollback()
-{
-    return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsOpenStatementsAcrossCommit()
-{
-    return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsOpenCursorsAcrossCommit()
-{
-    return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsOpenCursorsAcrossRollback()
-{
-    return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsTransactionIsolationLevel(sal_Int32 /*level*/)
-{
-    return true;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsSchemasInDataManipulation()
-{
-    return true;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsANSI92FullSQL()
-{
-    return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsANSI92EntryLevelSQL()
-{
-    return true;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsIntegrityEnhancementFacility()
-{
-    return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsSchemasInIndexDefinitions()
-{
-    return true;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsSchemasInTableDefinitions()
-{
-    return true;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsCatalogsInTableDefinitions()
-{
-    return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsCatalogsInIndexDefinitions()
-{
-    return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsCatalogsInDataManipulation()
-{
-    return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsOuterJoins()
-{
-    return true;
-}
-
-sal_Int32 SAL_CALL ODatabaseMetaData::getMaxStatements()
-{
-    return 0;
-}
-
-sal_Int32 SAL_CALL ODatabaseMetaData::getMaxProcedureNameLength()
-{
-    return 64;
-}
-
-sal_Int32 SAL_CALL ODatabaseMetaData::getMaxSchemaNameLength()
-{
-    return 64;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsTransactions()
-{
-    return true;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::allProceduresAreCallable()
-{
-    return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsStoredProcedures()
-{
-    return m_rConnection.getMysqlVersion() >= 50000;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsSelectForUpdate()
-{
-    return m_rConnection.getMysqlVersion() >= 40000;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::allTablesAreSelectable()
-{
-    return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::isReadOnly()
-{
-    return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::usesLocalFiles()
-{
-    return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::usesLocalFilePerTable()
-{
-    return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsTypeConversion()
-{
-    return true;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::nullPlusNonNullIsNull()
-{
-    return true;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsColumnAliasing()
-{
-    return true;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsTableCorrelationNames()
-{
-    return true;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsConvert(sal_Int32 /*fromType*/,  sal_Int32 /*toType*/)
-{
-    // TODO
-    return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsExpressionsInOrderBy()
-{
-    return true;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsGroupBy()
-{
-    return true;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsGroupByBeyondSelect()
-{
-    return true;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsGroupByUnrelated()
-{
-    return true;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsMultipleTransactions()
-{
-    return true;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsMultipleResultSets()
-{
-    return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsLikeEscapeClause()
-{
-    return true;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsOrderByUnrelated()
-{
-    return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsUnion()
-{
-    return m_rConnection.getMysqlVersion() >= 40000;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsUnionAll()
-{
-    return m_rConnection.getMysqlVersion() >= 40000;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsMixedCaseIdentifiers()
-{
-    // TODO
-    return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsMixedCaseQuotedIdentifiers()
-{
-    // TODO
-    return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::nullsAreSortedAtEnd()
-{
-    return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::nullsAreSortedAtStart()
-{
-    return m_rConnection.getMysqlVersion() > 40001 && m_rConnection.getMysqlVersion() < 40011;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::nullsAreSortedHigh()
-{
-    return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::nullsAreSortedLow()
-{
-    return !nullsAreSortedHigh();
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsSchemasInProcedureCalls()
-{
-    return m_rConnection.getMysqlVersion() >= 32200;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsSchemasInPrivilegeDefinitions()
-{
-    return m_rConnection.getMysqlVersion() >= 32200;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsCatalogsInProcedureCalls()
-{
-    return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsCatalogsInPrivilegeDefinitions()
-{
-    return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsCorrelatedSubqueries()
-{
-    return m_rConnection.getMysqlVersion() >= 40100;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsSubqueriesInComparisons()
-{
-    return m_rConnection.getMysqlVersion() >= 40100;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsSubqueriesInExists()
-{
-    return m_rConnection.getMysqlVersion() >= 40100;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsSubqueriesInIns()
-{
-    return m_rConnection.getMysqlVersion() >= 40100;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsSubqueriesInQuantifieds()
-{
-    return m_rConnection.getMysqlVersion() >= 40100;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsANSI92IntermediateSQL()
-{
-    return false;
-}
-
-rtl::OUString SAL_CALL ODatabaseMetaData::getURL()
-{
-    return m_rConnection.getConnectionSettings().connectionURL;
-}
-
-rtl::OUString SAL_CALL ODatabaseMetaData::getUserName()
-{
-    // TODO execute "SELECT USER()"
-    return rtl::OUString();
-}
-
-rtl::OUString SAL_CALL ODatabaseMetaData::getDriverName()
-{
-    return rtl::OUString( "MySQL Connector/OO.org" );
-}
-
-rtl::OUString SAL_CALL ODatabaseMetaData::getDriverVersion()
-{
-    return rtl::OUString( "0.9.2" );
-}
-
-rtl::OUString SAL_CALL ODatabaseMetaData::getDatabaseProductVersion()
-{
-    return rtl::OStringToOUString(mysql_get_server_info(m_pMySql),
-        m_rConnection.getConnectionEncoding());
-}
-
-rtl::OUString SAL_CALL ODatabaseMetaData::getDatabaseProductName()
-{
-    return rtl::OUString("MySQL");
-}
-
-rtl::OUString SAL_CALL ODatabaseMetaData::getProcedureTerm()
-{
-    return rtl::OUString("procedure");
-}
-
-rtl::OUString SAL_CALL ODatabaseMetaData::getSchemaTerm()
-{
-    return rtl::OUString("database");
-}
-
-sal_Int32 SAL_CALL ODatabaseMetaData::getDriverMajorVersion()
-{
-    // TODO
-    return MARIADBC_VERSION_MAJOR;
-}
-
-sal_Int32 SAL_CALL ODatabaseMetaData::getDefaultTransactionIsolation()
-{
-    return m_rConnection.getMysqlVersion() >= 32336 ? TransactionIsolation::READ_COMMITTED :
-        TransactionIsolation::NONE;
-}
-
-sal_Int32 SAL_CALL ODatabaseMetaData::getDriverMinorVersion()
-{
-    // TODO
-    return MARIADBC_VERSION_MINOR;
-}
-
-rtl::OUString SAL_CALL ODatabaseMetaData::getSQLKeywords()
-{
-    return rtl::OUString(
-        "ACCESSIBLE, ADD, ALL,"\
-        "ALTER, ANALYZE, AND, AS, ASC, ASENSITIVE, BEFORE,"\
-        "BETWEEN, BIGINT, BINARY, BLOB, BOTH, BY, CALL,"\
-        "CASCADE, CASE, CHANGE, CHAR, CHARACTER, CHECK,"\
-        "COLLATE, COLUMN, CONDITION, CONNECTION, CONSTRAINT,"\
-        "CONTINUE, CONVERT, CREATE, CROSS, CURRENT_DATE,"\
-        "CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CURSOR,"\
-        "DATABASE, DATABASES, DAY_HOUR, DAY_MICROSECOND,"\
-        "DAY_MINUTE, DAY_SECOND, DEC, DECIMAL, DECLARE,"\
-        "DEFAULT, DELAYED, DELETE, DESC, DESCRIBE,"\
-        "DETERMINISTIC, DISTINCT, DISTINCTROW, DIV, DOUBLE,"\
-        "DROP, DUAL, EACH, ELSE, ELSEIF, ENCLOSED,"\
-        "ESCAPED, EXISTS, EXIT, EXPLAIN, FALSE, FETCH,"\
-        "FLOAT, FLOAT4, FLOAT8, FOR, FORCE, FOREIGN, FROM,"\
-        "FULLTEXT, GRANT, GROUP, HAVING, HIGH_PRIORITY,"\
-        "HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IF,"\
-        "IGNORE, IN, INDEX, INFILE, INNER, INOUT,"\
-        "INSENSITIVE, INSERT, INT, INT1, INT2, INT3, INT4,"\
-        "INT8, INTEGER, INTERVAL, INTO, IS, ITERATE, JOIN,"\
-        "KEY, KEYS, KILL, LEADING, LEAVE, LEFT, LIKE,"\
-        "LOCALTIMESTAMP, LOCK, LONG, LONGBLOB, LONGTEXT,"\
-        "LOOP, LOW_PRIORITY, MATCH, MEDIUMBLOB, MEDIUMINT,"\
-        "MEDIUMTEXT, MIDDLEINT, MINUTE_MICROSECOND,"\
-        "MINUTE_SECOND, MOD, MODIFIES, NATURAL, NOT,"\
-        "NO_WRITE_TO_BINLOG, NULL, NUMERIC, ON, OPTIMIZE,"\
-        "OPTION, OPTIONALLY, OR, ORDER, OUT, OUTER,"\
-        "OUTFILE, PRECISION, PRIMARY, PROCEDURE, PURGE,"\
-        "RANGE, READ, READS, READ_ONLY, READ_WRITE, REAL,"\
-        "REFERENCES, REGEXP, RELEASE, RENAME, REPEAT,"\
-        "REPLACE, REQUIRE, RESTRICT, RETURN, REVOKE, RIGHT,"\
-        "RLIKE, SCHEMA, SCHEMAS, SECOND_MICROSECOND, SELECT,"\
-        "SENSITIVE, SEPARATOR, SET, SHOW, SMALLINT, SPATIAL,"\
-        "SPECIFIC, SQL, SQLEXCEPTION, SQLSTATE, SQLWARNING,"\
-        "SQL_BIG_RESULT, SQL_CALC_FOUND_ROWS, SQL_SMALL_RESULT,"\
-        "SSL, STARTING, STRAIGHT_JOIN, TABLE, TERMINATED,"\
-        "THEN, TINYBLOB, TINYINT, TINYTEXT, TO, TRAILING,"\
-        "TRIGGER, TRUE, UNDO, UNION, UNIQUE, UNLOCK,"\
-        "UNSIGNED, UPDATE, USAGE, USE, USING, UTC_DATE,"\
-        "UTC_TIME, UTC_TIMESTAMP, VALUES, VARBINARY, VARCHAR,"\
-        "VARCHARACTER, VARYING, WHEN, WHERE, WHILE, WITH,"\
-        "WRITE, X509, XOR, YEAR_MONTH, ZEROFILL" \
-        "GENERAL, IGNORE_SERVER_IDS, MASTER_HEARTBEAT_PERIOD," \
-        "MAXVALUE, RESIGNAL, SIGNAL, SLOW");
-}
-
-rtl::OUString SAL_CALL ODatabaseMetaData::getSearchStringEscape()
-{
-    return rtl::OUString("\\");
-}
-
-rtl::OUString SAL_CALL ODatabaseMetaData::getStringFunctions()
-{
-    return rtl::OUString(
-        "ASCII,BIN,BIT_LENGTH,CHAR,CHARACTER_LENGTH,CHAR_LENGTH,CONCAT,"
-        "CONCAT_WS,CONV,ELT,EXPORT_SET,FIELD,FIND_IN_SET,HEX,INSERT,"
-        "INSTR,LCASE,LEFT,LENGTH,LOAD_FILE,LOCATE,LOCATE,LOWER,LPAD,"
-        "LTRIM,MAKE_SET,MATCH,MID,OCT,OCTET_LENGTH,ORD,POSITION,"
-        "QUOTE,REPEAT,REPLACE,REVERSE,RIGHT,RPAD,RTRIM,SOUNDEX,"
-        "SPACE,STRCMP,SUBSTRING,SUBSTRING,SUBSTRING,SUBSTRING,"
-        "SUBSTRING_INDEX,TRIM,UCASE,UPPER");
-}
-
-rtl::OUString SAL_CALL ODatabaseMetaData::getTimeDateFunctions()
-{
-    return rtl::OUString(
-        "DAYOFWEEK,WEEKDAY,DAYOFMONTH,DAYOFYEAR,MONTH,DAYNAME,"
-        "MONTHNAME,QUARTER,WEEK,YEAR,HOUR,MINUTE,SECOND,PERIOD_ADD,"
-        "PERIOD_DIFF,TO_DAYS,FROM_DAYS,DATE_FORMAT,TIME_FORMAT,"
-        "CURDATE,CURRENT_DATE,CURTIME,CURRENT_TIME,NOW,SYSDATE,"
-        "CURRENT_TIMESTAMP,UNIX_TIMESTAMP,FROM_UNIXTIME,"
-        "SEC_TO_TIME,TIME_TO_SEC");
-}
-
-rtl::OUString SAL_CALL ODatabaseMetaData::getSystemFunctions()
-{
-    return rtl::OUString(
-        "DATABASE,USER,SYSTEM_USER,"
-        "SESSION_USER,PASSWORD,ENCRYPT,LAST_INSERT_ID,VERSION");
-}
-
-rtl::OUString SAL_CALL ODatabaseMetaData::getNumericFunctions()
-{
-    return rtl::OUString("ABS,ACOS,ASIN,ATAN,ATAN2,BIT_COUNT,CEILING,COS,"
-                "COT,DEGREES,EXP,FLOOR,LOG,LOG10,MAX,MIN,MOD,PI,POW,"
-                "POWER,RADIANS,RAND,ROUND,SIN,SQRT,TAN,TRUNCATE");
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsExtendedSQLGrammar()
-{
-    return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsCoreSQLGrammar()
-{
-    return true;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsMinimumSQLGrammar()
-{
-    return true;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsFullOuterJoins()
-{
-    return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsLimitedOuterJoins()
-{
-    return true;
-}
-
-sal_Int32 SAL_CALL ODatabaseMetaData::getMaxColumnsInGroupBy()
-{
-    return 64;
-}
-
-sal_Int32 SAL_CALL ODatabaseMetaData::getMaxColumnsInOrderBy()
-{
-    return 64;
-}
-
-sal_Int32 SAL_CALL ODatabaseMetaData::getMaxColumnsInSelect()
-{
-    return 256;
-}
-
-sal_Int32 SAL_CALL ODatabaseMetaData::getMaxUserNameLength()
-{
-    return 16;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsResultSetType(sal_Int32 setType)
-{
-    return setType == ResultSetType::SCROLL_SENSITIVE;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsResultSetConcurrency(sal_Int32 /*setType*/, sal_Int32 /*concurrency*/)
-{
-    return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::ownUpdatesAreVisible(sal_Int32 /*setType*/)
-{
-    return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::ownDeletesAreVisible(sal_Int32 /*setType*/)
-{
-    return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::ownInsertsAreVisible(sal_Int32 /*setType*/)
-{
-    return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::othersUpdatesAreVisible(sal_Int32 /*setType*/)
-{
-    return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::othersDeletesAreVisible(sal_Int32 /*setType*/)
-{
-    return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::othersInsertsAreVisible(sal_Int32 /*setType*/)
-{
-    return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::updatesAreDetected(sal_Int32 /*setType*/)
-{
-    return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::deletesAreDetected(sal_Int32 /*setType*/)
-{
-    return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::insertsAreDetected(sal_Int32 /*setType*/)
-{
-    return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsBatchUpdates()
-{
-    return true;
-}
-
-Reference< XConnection > SAL_CALL ODatabaseMetaData::getConnection()
-{
-    return &m_rConnection;
-}
-
-/*
-  Here follow all methods which return(a resultset
-  the first methods is an example implementation how to use this resultset
-  of course you could implement it on your and you should do this because
-  the general way is more memory expensive
-*/
-
-Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTableTypes()
-{
-    const char * const table_types[] = {"TABLE", "VIEW"};
-    sal_Int32 const requiredVersion[] = {0, 50000};
-
-    Reference< XResultSet > xResultSet(getOwnConnection().getDriver().getFactory()->createInstance("org.openoffice.comp.helper.DatabaseMetaDataResultSet"),UNO_QUERY);
-    std::vector< std::vector< Any > > rRows;
-    rtl_TextEncoding encoding = m_rConnection.getConnectionEncoding();
-
-    for (sal_uInt32 i = 0; i < 2; i++) {
-        if (m_rConnection.getMysqlVersion() >= requiredVersion[i]) {
-            std::vector< Any > aRow { Any() };
-            aRow.push_back(makeAny(mysqlc_sdbc_driver::convert(table_types[i], encoding)));
-            rRows.push_back(aRow);
-        }
-    }
-    lcl_setRows_throw(xResultSet, 5 ,rRows);
-    return xResultSet;
-}
-
-Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTypeInfo()
-{
-    Reference< XResultSet > xResultSet(getOwnConnection().getDriver().getFactory()->createInstance("org.openoffice.comp.helper.DatabaseMetaDataResultSet"),UNO_QUERY);
-
-    std::vector< std::vector< Any > > rRows;
-
-    rtl_TextEncoding encoding = m_rConnection.getConnectionEncoding();
-    unsigned int i = 0;
-    while (mysqlc_types[i].typeName) {
-        std::vector< Any > aRow { Any() };
-
-        aRow.push_back(makeAny(mysqlc_sdbc_driver::convert(mysqlc_types[i].typeName, encoding)));
-        aRow.push_back(makeAny(mysqlc_types[i].dataType));
-        aRow.push_back(makeAny(mysqlc_types[i].precision));
-        aRow.push_back(makeAny(mysqlc_sdbc_driver::convert(mysqlc_types[i].literalPrefix, encoding)));
-        aRow.push_back(makeAny(mysqlc_sdbc_driver::convert(mysqlc_types[i].literalSuffix, encoding)));
-        aRow.push_back(makeAny(mysqlc_sdbc_driver::convert(mysqlc_types[i].createParams, encoding)));
-        aRow.push_back(makeAny(mysqlc_types[i].nullable));
-        aRow.push_back(makeAny(mysqlc_types[i].caseSensitive));
-        aRow.push_back(makeAny(mysqlc_types[i].searchable));
-        aRow.push_back(makeAny(mysqlc_types[i].isUnsigned));
-        aRow.push_back(makeAny(mysqlc_types[i].fixedPrecScale));
-        aRow.push_back(makeAny(mysqlc_types[i].autoIncrement));
-        aRow.push_back(makeAny(mysqlc_sdbc_driver::convert(mysqlc_types[i].localTypeName, encoding)));
-        aRow.push_back(makeAny(mysqlc_types[i].minScale));
-        aRow.push_back(makeAny(mysqlc_types[i].maxScale));
-        aRow.push_back(makeAny(sal_Int32(0)));
-        aRow.push_back(makeAny(sal_Int32(0)));
-        aRow.push_back(makeAny(sal_Int32(10)));
-
-        rRows.push_back(aRow);
-        i++;
-    }
-
-    lcl_setRows_throw(xResultSet, 14, rRows);
-    return xResultSet;
-}
-
-Reference< XResultSet > SAL_CALL ODatabaseMetaData::getCatalogs()
-{
-    Reference< XResultSet > xResultSet(getOwnConnection().getDriver().getFactory()->createInstance("org.openoffice.comp.helper.DatabaseMetaDataResultSet"),UNO_QUERY);
-    return xResultSet;
-}
-
-Reference< XResultSet > SAL_CALL ODatabaseMetaData::getSchemas()
-{
-    Reference< XResultSet > xResultSet(getOwnConnection().getDriver().getFactory()->createInstance("org.openoffice.comp.helper.DatabaseMetaDataResultSet"),UNO_QUERY);
-    std::vector< std::vector< Any > > rRows;
-
-    rtl::OUString sSql = m_rConnection.getMysqlVersion() > 49999?
-            rtl::OUString{"SELECT SCHEMA_NAME AS TABLE_SCHEM, CATALOG_NAME AS TABLE_CATALOG FROM INFORMATION_SCHEMA.SCHEMATA ORDER BY SCHEMA_NAME"}:
-            rtl::OUString{"SHOW DATABASES"};
-
-    Reference< XStatement > statement = m_rConnection.createStatement();
-    Reference< XInterface > executed = statement->executeQuery(sSql);
-    Reference< XResultSet > rs( executed, UNO_QUERY_THROW);
-    Reference< XResultSetMetaDataSupplier > supp( executed, UNO_QUERY_THROW);
-    Reference< XResultSetMetaData > rs_meta = supp->getMetaData();
-
-    Reference< XRow > xRow( rs, UNO_QUERY_THROW );
-    sal_uInt32 columns = rs_meta->getColumnCount();
-    while( rs->next() )
-    {
-        std::vector< Any > aRow { Any() };
-        bool informationSchema = false;
-        for (sal_uInt32 i = 1; i <= columns; i++) {
-            rtl::OUString columnStringValue = xRow->getString(i);
-            if (i == 1) {   // TABLE_SCHEM
-                informationSchema = (0 == columnStringValue.equalsIgnoreAsciiCase("information_schema"));
-            }
-            aRow.push_back(makeAny(columnStringValue));
-        }
-        if (!informationSchema ) {
-            rRows.push_back(aRow);
-        }
-    }
-
-    lcl_setRows_throw(xResultSet, 1, rRows);
-    return xResultSet;
-}
-
-Reference< XResultSet > SAL_CALL ODatabaseMetaData::getColumnPrivileges(
-        const Any& /*catalog*/,
-        const rtl::OUString& schema,
-        const rtl::OUString& table,
-        const rtl::OUString& columnNamePattern)
-{
-    rtl::OUString query("SELECT TABLE_CATALOG AS TABLE_CAT, TABLE_SCHEMA AS "
-            "TABLE_SCHEM, TABLE_NAME, COLUMN_NAME, NULL AS GRANTOR, "
-            "GRANTEE, PRIVILEGE_TYPE AS PRIVILEGE, IS_GRANTABLE FROM "
-            "INFORMATION_SCHEMA.COLUMN_PRIVILEGES WHERE TABLE_SCHEMA LIKE "
-            "'?' AND TABLE_NAME='?' AND COLUMN_NAME LIKE '?' ORDER BY "
-            "COLUMN_NAME, PRIVILEGE_TYPE");
-
-    query = query.replaceFirst("?", schema);
-    query = query.replaceFirst("?", table);
-    query = query.replaceFirst("?", columnNamePattern);
-
-    Reference<XStatement> statement = m_rConnection.createStatement();
-    Reference<XResultSet> rs = statement->executeQuery(query);
-    return rs;
-}
-
-Reference< XResultSet > SAL_CALL ODatabaseMetaData::getColumns(
-        const Any& /*catalog*/,
-        const rtl::OUString& /*schemaPattern*/,
-        const rtl::OUString& tableNamePattern,
-        const rtl::OUString& columnNamePattern)
-{
-    rtl::OUStringBuffer queryBuf("SELECT TABLE_CATALOG AS TABLE_CAT, " // 1
-        "TABLE_SCHEMA AS TABLE_SCHEM, " // 2
-        "TABLE_NAME, " // 3
-        "COLUMN_NAME, " // 4
-        "DATA_TYPE, " // 5
-        // TYPE_NAME missing
-        "CHARACTER_MAXIMUM_LENGTH, " // 6
-        "NUMERIC_PRECISION, " // 7
-        // buffer length missing
-        "NUMERIC_SCALE AS DECIMAL_DIGITS, " // 8
-        // NUM_PREC_RADIX missing
-        // NULLABLE missing
-        "COLUMN_COMMENT AS REMARKS, " // 9
-        "COLUMN_DEFAULT AS COLUMN_DEF," // 10
-        "CHARACTER_OCTET_LENGTH, " // 11
-        "ORDINAL_POSITION, " // 12
-        "IS_NULLABLE, " // 13
-        "COLUMN_TYPE " // 14
-        "FROM INFORMATION_SCHEMA.COLUMNS "
-        "WHERE (1 = 1) ");
-
-    if (!tableNamePattern.isEmpty())
-    {
-        rtl::OUString sAppend;
-        if (tableNamePattern.match("%"))
-            sAppend = "AND TABLE_NAME LIKE '%' ";
-        else
-            sAppend = "AND TABLE_NAME = '%' ";
-        queryBuf.append(sAppend.replaceAll("%", tableNamePattern));
-    }
-    if (!columnNamePattern.isEmpty())
-    {
-        rtl::OUString sAppend;
-        if (columnNamePattern.match("%"))
-            sAppend = "AND COLUMN_NAME LIKE '%' ";
-        else
-            sAppend = "AND COLUMN_NAME = '%' ";
-        queryBuf.append(sAppend.replaceAll("%", columnNamePattern));
-    }
-
-    rtl::OUString query = queryBuf.makeStringAndClear();
-    Reference<XStatement> statement = m_rConnection.createStatement();
-    Reference<XResultSet> rs = statement->executeQuery(query.getStr());
-    Reference<XRow> xRow( rs, UNO_QUERY_THROW );
-
-    Reference< XResultSet > xResultSet(getOwnConnection().getDriver().getFactory()->createInstance(
-                "org.openoffice.comp.helper.DatabaseMetaDataResultSet"),UNO_QUERY);
-    std::vector< std::vector< Any > > aRows;
-    while( rs->next() )
-    {
-        std::vector< Any > aRow { Any() }; // 0. element is unused
-
-        // catalog name
-        aRow.push_back(makeAny(xRow->getString(1)));
-        // schema name
-        aRow.push_back(makeAny(xRow->getString(2)));
-        // table name
-        aRow.push_back(makeAny(xRow->getString(3)));
-        // column name
-        aRow.push_back(makeAny(xRow->getString(4)));
-        // data type
-        rtl::OUString sDataType = xRow->getString(5);
-        aRow.push_back(makeAny(mysqlc_sdbc_driver::mysqlStrToOOOType(sDataType)));
-        // type name
-        aRow.push_back(makeAny(sDataType)); // TODO
-        // column size
-        sal_Int32 nColumnSize = 0;
-        rtl::OUString sColumnType = xRow->getString(14);
-        sal_Int32 nCharMaxLen = xRow->getShort(6);
-        bool bIsCharMax = !xRow->wasNull();
-        if( sDataType.equalsIgnoreAsciiCase("year") )
-            nColumnSize = sColumnType.copy(6, 1).toInt32(); // 'year(' length is 5
-        else if(sDataType.equalsIgnoreAsciiCase("date"))
-            nColumnSize = 10;
-        else if(sDataType.equalsIgnoreAsciiCase("date"))
-            nColumnSize = 8;
-        else if(sDataType.equalsIgnoreAsciiCase("datetime")
-                || sDataType.equalsIgnoreAsciiCase("timestamp"))
-            nColumnSize = 19;
-        else if(!bIsCharMax)
-            nColumnSize = xRow->getShort(7); // numeric precision
-        else
-            nColumnSize = nCharMaxLen;
-        aRow.push_back(makeAny(nColumnSize));
-        aRow.push_back( Any() ); // buffer length - unused
-        // decimal digits (scale)
-        aRow.push_back(makeAny(xRow->getShort(8)));
-        // num_prec_radix
-        aRow.push_back(makeAny(sal_Int32(10)));
-        // nullable
-        rtl::OUString sIsNullable = xRow->getString(13);
-        if(xRow->wasNull())
-            aRow.push_back(makeAny(ColumnValue::NULLABLE_UNKNOWN));
-        else if(sIsNullable.equalsIgnoreAsciiCase("YES"))
-            aRow.push_back(makeAny(ColumnValue::NULLABLE));
-        else
-            aRow.push_back(makeAny(ColumnValue::NO_NULLS));
-        // remarks
-        aRow.push_back(makeAny(xRow->getString(9)));
-        // default
-        aRow.push_back(makeAny(xRow->getString(10)));
-
-        aRow.push_back( Any{} ); // sql_data_type - unused
-        aRow.push_back( Any{} ); // sql_datetime_sub - unused
-
-        // character octet length
-        aRow.push_back(makeAny(xRow->getString(11)));
-        // ordinal position
-        aRow.push_back(makeAny(xRow->getString(12)));
-        // is nullable
-        aRow.push_back(makeAny(sIsNullable));
-        aRows.push_back(aRow);
-    }
-    lcl_setRows_throw(xResultSet, 1, aRows);
-    return xResultSet;
-}
-
-Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTables(
-        const Any& /*catalog*/,
-        const rtl::OUString& schemaPattern,
-        const rtl::OUString& tableNamePattern,
-        const Sequence< rtl::OUString >& /*types */)
-{
-    rtl::OUString query("SELECT TABLE_CATALOG AS TABLE_CAT, TABLE_SCHEMA AS TABLE_SCHEM, TABLE_NAME,"
-        "IF(STRCMP(TABLE_TYPE,'BASE TABLE'), TABLE_TYPE, 'TABLE') AS TABLE_TYPE, TABLE_COMMENT AS REMARKS "
-        "FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA  LIKE '?' AND TABLE_NAME LIKE '?' "
-        "ORDER BY TABLE_TYPE, TABLE_SCHEMA, TABLE_NAME");
-
-    // TODO use prepared stmt instead
-    // TODO escape schema, table name ?
-    query = query.replaceFirst("?", schemaPattern);
-    query = query.replaceFirst("?", tableNamePattern);
-
-    Reference<XStatement> statement = m_rConnection.createStatement();
-    Reference<XResultSet> rs = statement->executeQuery(query);
-    return rs;
-}
-
-Reference< XResultSet > SAL_CALL ODatabaseMetaData::getProcedureColumns(
-        const Any& /* catalog */,
-        const rtl::OUString& /* schemaPattern */,
-        const rtl::OUString& /* procedureNamePattern */,
-        const rtl::OUString& /* columnNamePattern */)
-{
-    // Currently there is no information available
-    return nullptr;
-}
-
-Reference< XResultSet > SAL_CALL ODatabaseMetaData::getProcedures(
-        const Any& /*catalog*/,
-        const rtl::OUString& /*schemaPattern*/,
-        const rtl::OUString& /*procedureNamePattern*/)
-{
-    Reference< XResultSet > xResultSet(getOwnConnection().getDriver().getFactory()->createInstance("org.openoffice.comp.helper.DatabaseMetaDataResultSet"),UNO_QUERY);
-    std::vector< std::vector< Any > > rRows;
-    // TODO IMPL
-    lcl_setRows_throw(xResultSet, 7,rRows);
-    return xResultSet;
-}
-
-Reference< XResultSet > SAL_CALL ODatabaseMetaData::getVersionColumns(
-        const Any& /* catalog */,
-        const rtl::OUString& /* schema */,
-        const rtl::OUString& /* table */)
-{
-    Reference< XResultSet > xResultSet(getOwnConnection().getDriver().getFactory()->createInstance("org.openoffice.comp.helper.DatabaseMetaDataResultSet"),UNO_QUERY);
-    std::vector< std::vector< Any > > rRows;
-    lcl_setRows_throw(xResultSet, 16,rRows);
-    return xResultSet;
-}
-
-Reference< XResultSet > SAL_CALL ODatabaseMetaData::getExportedKeys(
-        const Any& /*catalog */,
-        const rtl::OUString& /*schema */,
-        const rtl::OUString& /*table */)
-{
-    Reference< XResultSet > xResultSet(getOwnConnection().getDriver().getFactory()->createInstance("org.openoffice.comp.helper.DatabaseMetaDataResultSet"),UNO_QUERY);
-    std::vector< std::vector< Any > > rRows;
-    // TODO implement
-    lcl_setRows_throw(xResultSet, 8, rRows);
-    return xResultSet;
-}
-
-Reference< XResultSet > SAL_CALL ODatabaseMetaData::getImportedKeys(
-        const Any& /*catalog*/,
-        const rtl::OUString& /*schema*/,
-        const rtl::OUString& /*table*/)
-{
-    Reference< XResultSet > xResultSet(getOwnConnection().getDriver().getFactory()->createInstance("org.openoffice.comp.helper.DatabaseMetaDataResultSet"),UNO_QUERY);
-    std::vector< std::vector< Any > > rRows;
-    // TODO implement
-    lcl_setRows_throw(xResultSet,9,rRows);
-    return xResultSet;
-}
-
-Reference< XResultSet > SAL_CALL ODatabaseMetaData::getPrimaryKeys(
-        const Any& /*catalog*/,
-        const rtl::OUString& schema,
-        const rtl::OUString& table)
-{
-    rtl::OUString query("SELECT TABLE_CATALOG AS TABLE_CAT, TABLE_SCHEMA "
-            "AS TABLE_SCHEM, TABLE_NAME, " "COLUMN_NAME, SEQ_IN_INDEX AS KEY_SEQ,"
-            "INDEX_NAME AS PK_NAME FROM INFORMATION_SCHEMA.STATISTICS "
-            "WHERE TABLE_SCHEMA LIKE '?' AND TABLE_NAME LIKE '?' AND INDEX_NAME='PRIMARY' "
-            "ORDER BY TABLE_SCHEMA, TABLE_NAME, INDEX_NAME, SEQ_IN_INDEX");
-
-    // TODO use prepared stmt instead
-    // TODO escape schema, table name ?
-    query = query.replaceFirst("?", schema);
-    query = query.replaceFirst("?", table);
-
-    Reference<XStatement> statement = m_rConnection.createStatement();
-    Reference<XResultSet> rs = statement->executeQuery(query);
-    return rs;
-}
-
-Reference< XResultSet > SAL_CALL ODatabaseMetaData::getIndexInfo(
-        const Any& /*catalog*/,
-        const rtl::OUString& /*schema*/,
-        const rtl::OUString& /*table*/,
-        sal_Bool /*unique*/,
-        sal_Bool /*approximate*/)
-{
-    Reference< XResultSet > xResultSet(getOwnConnection().getDriver().getFactory()->createInstance("org.openoffice.comp.helper.DatabaseMetaDataResultSet"),UNO_QUERY);
-    std::vector< std::vector< Any > > rRows;
-    // TODO
-    lcl_setRows_throw(xResultSet, 11, rRows);
-    return xResultSet;
-}
-
-Reference< XResultSet > SAL_CALL ODatabaseMetaData::getBestRowIdentifier(
-        const Any& /*catalog*/,
-        const rtl::OUString& /*schema*/,
-        const rtl::OUString& /*table*/,
-        sal_Int32 /*scope*/,
-        sal_Bool /*nullable*/)
-{
-    Reference< XResultSet > xResultSet(getOwnConnection().getDriver().getFactory()->createInstance("org.openoffice.comp.helper.DatabaseMetaDataResultSet"),UNO_QUERY);
-    std::vector< std::vector< Any > > rRows;
-    // TODO
-    lcl_setRows_throw(xResultSet, 15, rRows);
-    return xResultSet;
-}
-
-Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTablePrivileges(
-        const Any& /*catalog*/,
-        const rtl::OUString& /*schemaPattern*/,
-        const rtl::OUString& /*tableNamePattern*/)
-{
-    Reference< XResultSet > xResultSet(getOwnConnection().getDriver().getFactory()->createInstance("org.openoffice.comp.helper.DatabaseMetaDataResultSet"),UNO_QUERY);
-    std::vector< std::vector< Any > > rRows;
-    // TODO
-    lcl_setRows_throw(xResultSet,12,rRows);
-    return xResultSet;
-}
-
-Reference< XResultSet > SAL_CALL ODatabaseMetaData::getCrossReference(
-        const Any& /*primaryCatalog*/,
-        const rtl::OUString& /*primarySchema_*/,
-        const rtl::OUString& /*primaryTable_*/,
-        const Any& /*foreignCatalog*/,
-        const rtl::OUString& /*foreignSchema*/,
-        const rtl::OUString& /*foreignTable*/)
-{
-    Reference< XResultSet > xResultSet(getOwnConnection().getDriver().getFactory()->createInstance("org.openoffice.comp.helper.DatabaseMetaDataResultSet"),UNO_QUERY);
-    std::vector< std::vector< Any > > rRows;
-    // TODO
-    lcl_setRows_throw(xResultSet,13,rRows);
-    return xResultSet;
-}
-
-Reference< XResultSet > SAL_CALL ODatabaseMetaData::getUDTs(
-        const Any& /* catalog */,
-        const rtl::OUString& /* schemaPattern */,
-        const rtl::OUString& /* typeNamePattern */,
-        const Sequence< sal_Int32 >& /* types */)
-{
-    mysqlc_sdbc_driver::throwFeatureNotImplementedException("ODatabaseMetaData::getUDTs", *this);
-    return nullptr;
-}
-
-/* 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 efbc0777d57c..000000000000
--- a/mysqlc/source/mysqlc_driver.cxx
+++ /dev/null
@@ -1,317 +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 (OWeakRefArray::iterator i = m_xConnections.begin(); m_xConnections.end() != i; ++i)
-    {
-        Reference< XComponent > xComp(i->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 SAL_CALL 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 >  SAL_CALL MysqlCDriver_CreateInstance(const Reference< XMultiServiceFactory >& _rxFactory)
-{
-    return(*(new MysqlCDriver(_rxFactory)));
-}
-
-void release(oslInterlockedCount& _refCount,
-             ::cppu::OBroadcastHelper& rBHelper,
-             Reference< XInterface >& _xInterface,
-             css::lang::XComponent* _pObject)
-{
-    if (osl_atomic_decrement(&_refCount) == 0) {
-        osl_atomic_increment(&_refCount);
-
-        if (!rBHelper.bDisposed && !rBHelper.bInDispose) {
-            // remember the parent
-            Reference< XInterface > xParent;
-            {
-                ::osl::MutexGuard aGuard(rBHelper.rMutex);
-                xParent = _xInterface;
-                _xInterface = nullptr;
-            }
-
-            // First dispose
-            _pObject->dispose();
-
-            // only the alive ref holds the object
-            OSL_ASSERT(_refCount == 1);
-
-            // release the parent in the destructor
-            if (xParent.is()) {
-                ::osl::MutexGuard aGuard(rBHelper.rMutex);
-                _xInterface = xParent;
-            }
-        }
-    } else {
-        osl_atomic_increment(&_refCount);
-    }
-}
-
-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 7649fc51539e..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 > SAL_CALL MysqlCDriver_CreateInstance(const Reference< css::lang::XMultiServiceFactory >& _rxFactory);
-
-        typedef ::cppu::WeakComponentImplHelper2<   css::sdbc::XDriver,
-                                                    css::lang::XServiceInfo > ODriver_BASE;
-
-        typedef void* (SAL_CALL * 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.cxx b/mysqlc/source/mysqlc_general.cxx
deleted file mode 100644
index 8f3d0ed619d2..000000000000
--- a/mysqlc/source/mysqlc_general.cxx
+++ /dev/null
@@ -1,352 +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_resultsetmetadata.hxx"
-
-#include <rtl/ustring.hxx>
-
-using com::sun::star::sdbc::SQLException;
-
-using com::sun::star::uno::Reference;
-using com::sun::star::uno::XInterface;
-using com::sun::star::uno::Any;
-
-using namespace rtl;
-
-namespace mysqlc_sdbc_driver
-{
-
-void allocateSqlVar(void** mem, enum_field_types eType, unsigned nSize)
-{
-    assert(mem);
-    switch(eType)
-    {
-        case MYSQL_TYPE_LONG:
-        case MYSQL_TYPE_INT24:
-            *mem = malloc(sizeof(sal_Int32));
-            break;
-        case MYSQL_TYPE_SHORT:
-            *mem = malloc(sizeof(sal_Int16));
-            break;
-        case MYSQL_TYPE_BIT:
-        case MYSQL_TYPE_TINY:
-            *mem = malloc(sizeof(sal_Int8));
-            break;
-        case MYSQL_TYPE_LONGLONG:
-            *mem = malloc(sizeof(sal_Int64));
-            break;
-        case MYSQL_TYPE_FLOAT:
-            *mem = malloc(sizeof(float));
-            break;
-        case MYSQL_TYPE_DOUBLE:
-            *mem = malloc(sizeof(double));
-            break;
-        case MYSQL_TYPE_DATE:
-        case MYSQL_TYPE_TIME:
-        case MYSQL_TYPE_DATETIME:
-        case MYSQL_TYPE_TIMESTAMP:
-        case MYSQL_TYPE_YEAR: // FIXME below
-        case MYSQL_TYPE_NEWDATE:
-        case MYSQL_TYPE_ENUM:
-        case MYSQL_TYPE_SET:
-        case MYSQL_TYPE_GEOMETRY:
-            *mem = malloc(sizeof(MYSQL_TIME));
-            break;
-        case MYSQL_TYPE_STRING:
-        case MYSQL_TYPE_VAR_STRING:
-        case MYSQL_TYPE_VARCHAR:
-        case MYSQL_TYPE_DECIMAL:
-        case MYSQL_TYPE_NEWDECIMAL:
-            *mem = malloc(sizeof(char)*nSize);
-            break;
-        case MYSQL_TYPE_NULL:
-        case MYSQL_TYPE_BLOB:
-        case MYSQL_TYPE_TINY_BLOB:
-        case MYSQL_TYPE_MEDIUM_BLOB:
-        case MYSQL_TYPE_LONG_BLOB:
-            *mem = nullptr;
-            break;
-        default:
-            SAL_WARN("connectivity","unknown enum_field_type");
-    }
-}
-
-/// Use this intead of mysql_real_escape_string, because that one also escapes
-/// single quote ('), which should not be escaped
-rtl::OString escapeSql( const rtl::OString& from )
-{
-    rtl::OString sRet = from.replaceAll("\\", "\\\\");
-    sRet = sRet.replaceAll("\"", "\\\"");
-    sRet = sRet.replaceAll("`", "\\`");
-    return sRet;
-}
-
-void throwFeatureNotImplementedException( const sal_Char* _pAsciiFeatureName, const css::uno::Reference< XInterface >& _rxContext )
-{
-    const rtl::OUString sMessage = rtl::OUString::createFromAscii( _pAsciiFeatureName ) + ": feature not implemented.";
-    throw SQLException(
-        sMessage,
-        _rxContext,
-        rtl::OUString("HYC00"),
-        0,
-        Any()
-    );
-}
-
-void throwInvalidArgumentException( const sal_Char* _pAsciiFeatureName, const css::uno::Reference< XInterface >& _rxContext )
-{
-    const rtl::OUString sMessage = rtl::OUString::createFromAscii( _pAsciiFeatureName ) + ": invalid arguments.";
-    throw SQLException(
-        sMessage,
-        _rxContext,
-        rtl::OUString("HYC00"),
-        0,
-        Any()
-    );
-}
-
-void translateAndThrow(const ::sql::SQLException& _error, const css::uno::Reference< css::uno::XInterface >& _context, const rtl_TextEncoding encoding)
-{
-    throw SQLException(
-            convert(_error.what(), encoding),
-            _context,
-            convert(_error.getSQLState(), encoding),
-            _error.getErrorCode(),
-            Any()
-        );
-}
-
-void throwSQLExceptionWithMsg(const char* msg, unsigned int errorNum, const css::uno::Reference< css::uno::XInterface >& _context, const rtl_TextEncoding encoding)
-{
-    rtl::OString errorMsg{msg};
-    // TODO error code?
-    throw SQLException( rtl::OStringToOUString(errorMsg, encoding),
-            _context, rtl::OUString(), errorNum, Any());
-}
-
-rtl::OUString getStringFromAny(const Any& _rAny)
-{
-    rtl::OUString nReturn;
-    OSL_VERIFY( _rAny >>= nReturn );
-    return nReturn;
-}
-
-int mysqlToOOOType(int eType, int charsetnr) noexcept
-{
-    // charset number 63 indicates binary
-    switch (eType) {
-        case MYSQL_TYPE_BIT:
-            return css::sdbc::DataType::VARCHAR;
-
-        case MYSQL_TYPE_TINY:
-            return css::sdbc::DataType::TINYINT;
-
-        case MYSQL_TYPE_SHORT:
-            return css::sdbc::DataType::SMALLINT;
-
-        case MYSQL_TYPE_INT24:
-        case MYSQL_TYPE_LONG:
-            return css::sdbc::DataType::INTEGER;
-
-        case MYSQL_TYPE_LONGLONG:
-            return css::sdbc::DataType::BIGINT;
-
-        case MYSQL_TYPE_FLOAT:
-            return css::sdbc::DataType::REAL;
-
-        case MYSQL_TYPE_DOUBLE:
-            return css::sdbc::DataType::DOUBLE;
-
-        case MYSQL_TYPE_DECIMAL:
-        case MYSQL_TYPE_NEWDECIMAL:
-            return css::sdbc::DataType::DECIMAL;
-
-        case MYSQL_TYPE_STRING:
-            if(charsetnr == 63)
-                return css::sdbc::DataType::BINARY;
-            return css::sdbc::DataType::CHAR;
-
-        case MYSQL_TYPE_ENUM:
-        case MYSQL_TYPE_SET:
-        case MYSQL_TYPE_VAR_STRING:
-            if(charsetnr == 63)
-                return css::sdbc::DataType::VARBINARY;
-            return css::sdbc::DataType::VARCHAR;
-
-        case MYSQL_TYPE_BLOB:
-            if(charsetnr == 63)
-                return css::sdbc::DataType::LONGVARBINARY;
-            return css::sdbc::DataType::LONGVARCHAR;
-
-        case MYSQL_TYPE_TIMESTAMP:
-        case MYSQL_TYPE_DATETIME:
-            return css::sdbc::DataType::TIMESTAMP;
-
-        case MYSQL_TYPE_DATE:
-            return css::sdbc::DataType::DATE;
-
-        case MYSQL_TYPE_TIME:
-            return css::sdbc::DataType::TIME;
-
-        case MYSQL_TYPE_GEOMETRY:
-            return css::sdbc::DataType::VARCHAR;
-
-        case MYSQL_TYPE_NULL:
-            return css::sdbc::DataType::SQLNULL;
-    }
-
-    OSL_FAIL( "mysqlToOOOType: unhandled case, falling back to VARCHAR" );
-    return css::sdbc::DataType::VARCHAR;
-}
-
-int mysqlStrToOOOType(const rtl::OUString& sType)
-{
-    // TODO other types.
-    if(sType.equalsIgnoreAsciiCase("tiny") || sType.equalsIgnoreAsciiCase("tinyint"))
-            return css::sdbc::DataType::TINYINT;

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list