[Libreoffice-commits] .: connectivity/Configuration_mork.mk connectivity/Executable_mork_helper.mk connectivity/Library_mork.mk connectivity/Module_connectivity.mk connectivity/registry connectivity/source Repository.mk

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Tue Sep 18 01:30:33 PDT 2012


 Repository.mk                                                           |    2 
 connectivity/Configuration_mork.mk                                      |   20 
 connectivity/Executable_mork_helper.mk                                  |   30 
 connectivity/Library_mork.mk                                            |   58 
 connectivity/Module_connectivity.mk                                     |    2 
 connectivity/registry/mork/org/openoffice/Office/DataAccess/Drivers.xcu |   66 
 connectivity/source/drivers/mork/MCatalog.cxx                           |  111 
 connectivity/source/drivers/mork/MCatalog.hxx                           |   55 
 connectivity/source/drivers/mork/MColumnAlias.cxx                       |  184 
 connectivity/source/drivers/mork/MColumnAlias.hxx                       |   79 
 connectivity/source/drivers/mork/MColumns.cxx                           |   87 
 connectivity/source/drivers/mork/MColumns.hxx                           |   51 
 connectivity/source/drivers/mork/MConfigAccess.cxx                      |  259 +
 connectivity/source/drivers/mork/MConfigAccess.hxx                      |   32 
 connectivity/source/drivers/mork/MConnection.cxx                        |  397 +
 connectivity/source/drivers/mork/MConnection.hxx                        |  120 
 connectivity/source/drivers/mork/MDatabaseMetaData.cxx                  | 1034 ++++
 connectivity/source/drivers/mork/MDatabaseMetaData.hxx                  |  202 
 connectivity/source/drivers/mork/MDatabaseMetaDataHelper.cxx            |  119 
 connectivity/source/drivers/mork/MDatabaseMetaDataHelper.hxx            |   46 
 connectivity/source/drivers/mork/MDriver.cxx                            |  124 
 connectivity/source/drivers/mork/MDriver.hxx                            |  106 
 connectivity/source/drivers/mork/MErrorResource.hxx                     |   71 
 connectivity/source/drivers/mork/MExtConfigAccess.hxx                   |   39 
 connectivity/source/drivers/mork/MNSFolders.cxx                         |  156 
 connectivity/source/drivers/mork/MNSFolders.hxx                         |   34 
 connectivity/source/drivers/mork/MNSINIParser.cxx                       |   96 
 connectivity/source/drivers/mork/MNSINIParser.hxx                       |   74 
 connectivity/source/drivers/mork/MNSProfileDiscover.cxx                 |  224 
 connectivity/source/drivers/mork/MNSProfileDiscover.hxx                 |   98 
 connectivity/source/drivers/mork/MPreparedStatement.cxx                 |  529 ++
 connectivity/source/drivers/mork/MPreparedStatement.hxx                 |  156 
 connectivity/source/drivers/mork/MQueryHelper.cxx                       |  414 +
 connectivity/source/drivers/mork/MQueryHelper.hxx                       |  215 
 connectivity/source/drivers/mork/MResultSet.cxx                         | 2301 ++++++++++
 connectivity/source/drivers/mork/MResultSet.hxx                         |  359 +
 connectivity/source/drivers/mork/MResultSetMetaData.cxx                 |  205 
 connectivity/source/drivers/mork/MResultSetMetaData.hxx                 |   92 
 connectivity/source/drivers/mork/MServices.cxx                          |   37 
 connectivity/source/drivers/mork/MStatement.cxx                         |  589 ++
 connectivity/source/drivers/mork/MStatement.hxx                         |  202 
 connectivity/source/drivers/mork/MTable.cxx                             |   80 
 connectivity/source/drivers/mork/MTable.hxx                             |   62 
 connectivity/source/drivers/mork/MTables.cxx                            |   86 
 connectivity/source/drivers/mork/MTables.hxx                            |   48 
 connectivity/source/drivers/mork/MorkParser.cxx                         |  694 +++
 connectivity/source/drivers/mork/MorkParser.hxx                         |  168 
 connectivity/source/drivers/mork/README                                 |   41 
 connectivity/source/drivers/mork/dllapi.h                               |   25 
 connectivity/source/drivers/mork/license.txt                            |   31 
 connectivity/source/drivers/mork/mork.component                         |   16 
 connectivity/source/drivers/mork/mork.xml                               |   85 
 connectivity/source/drivers/mork/mork_helper.cxx                        |   86 
 connectivity/source/drivers/mork/post_include_windows.h                 |   24 
 connectivity/source/drivers/mork/pre_include_windows.h                  |   25 
 connectivity/source/drivers/mork/services.cxx                           |   40 
 connectivity/source/inc/resource/conn_shared_res.hrc                    |    2 
 connectivity/source/inc/resource/mork_res.hrc                           |   63 
 58 files changed, 10651 insertions(+)

New commits:
commit 77e4adbe4759f21f6cf095d954391a9ddbbec2cf
Author: David Ostrovsky <david at ostrovsky.org>
Date:   Mon Sep 17 22:50:49 2012 +0200

    mork driver implementation
    
    This is a preparation for merge into master, feature/mork
    branch is obsoslete and shouldn't be used any more. In
    context of this change the usage of old mozilla based mork
    driver depends on platform: all non windows platforms use
    this new mork driver, windows still uses mozilla.
    
    Because mozilla driver shipping was stripped on feature/mork
    branch for all platforms, the corresponding commits were
    changed prior to creating this change (the build file changes
    are reverted now). So the build and shipping of different mork
    driver implementation should be implemented from scratch:
    mozilla on windows, new mork dirver on all other platforms.
    
    Currently the new mork dirver is compiled (on all platforms),
    but not used. It can be tested with mork_helper executable.
    
    fdo#51004
    
    Change-Id: Ib2413ab6856f163337aa311c4bf7b1182d6c6f63
    Reviewed-on: https://gerrit.libreoffice.org/635
    Reviewed-by: Miklos Vajna <vmiklos at suse.cz>
    Tested-by: Miklos Vajna <vmiklos at suse.cz>

diff --git a/Repository.mk b/Repository.mk
index 3609d09..d5fdb49 100644
--- a/Repository.mk
+++ b/Repository.mk
@@ -45,6 +45,7 @@ $(eval $(call gb_Helper_register_executables,NONE, \
     idxdict \
     lngconvex \
     localize \
+    mork_helper \
     mkunroll \
     osl_process_child \
     pdf2xml \
@@ -300,6 +301,7 @@ $(eval $(call gb_Helper_register_libraries,OOOLIBS, \
     lwpft \
 	MacOSXSpell \
     merged \
+    mork \
     mozab2 \
     mozabdrv \
     msfilter \
diff --git a/connectivity/Configuration_mork.mk b/connectivity/Configuration_mork.mk
new file mode 100644
index 0000000..dc36ca8
--- /dev/null
+++ b/connectivity/Configuration_mork.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_mork))
+
+$(eval $(call gb_Configuration_add_spool_modules,driver_mork,connectivity/registry/mork,\
+	org/openoffice/Office/DataAccess/Drivers-mork.xcu \
+))
+
+$(eval $(call gb_Configuration_add_localized_datas,driver_mork,connectivity/registry/mork,\
+	org/openoffice/Office/DataAccess/Drivers.xcu \
+))
+
+# vim: set noet sw=4 ts=4:
diff --git a/connectivity/Executable_mork_helper.mk b/connectivity/Executable_mork_helper.mk
new file mode 100644
index 0000000..27b8685
--- /dev/null
+++ b/connectivity/Executable_mork_helper.mk
@@ -0,0 +1,30 @@
+# -*- 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_Executable_Executable,mork_helper))
+
+$(eval $(call gb_Executable_set_include,mork_helper,\
+    -I$(SRCDIR)/connectivity/source/inc \
+    $$(INCLUDE) \
+))
+
+$(eval $(call gb_Executable_use_sdk_api,mork_helper))
+
+$(eval $(call gb_Executable_use_libraries,mork_helper,\
+    cppu \
+    cppuhelper \
+    mork \
+    sal \
+))
+
+$(eval $(call gb_Executable_add_exception_objects,mork_helper,\
+    connectivity/source/drivers/mork/mork_helper \
+))
+
+# vim:set shiftwidth=4 softtabstop=4 expandtab:
diff --git a/connectivity/Library_mork.mk b/connectivity/Library_mork.mk
new file mode 100644
index 0000000..17de768
--- /dev/null
+++ b/connectivity/Library_mork.mk
@@ -0,0 +1,58 @@
+# -*- 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_Library_Library,mork))
+
+$(eval $(call gb_Library_set_componentfile,mork,connectivity/source/drivers/mork/mork))
+
+$(eval $(call gb_Library_add_defs,mork,\
+	-DLO_DLLIMPLEMENTATION_MORK \
+))
+
+$(eval $(call gb_Library_set_include,mork,\
+	-I$(SRCDIR)/connectivity/source/inc \
+	$$(INCLUDE) \
+))
+
+$(eval $(call gb_Library_use_libraries,mork, \
+    comphelper \
+    cppu \
+    cppuhelper \
+    dbtools \
+    sal \
+    salhelper \
+    $(gb_STDLIBS) \
+))
+
+$(eval $(call gb_Library_use_sdk_api,mork))
+
+$(eval $(call gb_Library_add_exception_objects,mork, \
+    connectivity/source/drivers/mork/MColumns \
+    connectivity/source/drivers/mork/MConfigAccess \
+    connectivity/source/drivers/mork/MColumnAlias \
+    connectivity/source/drivers/mork/MNSFolders \
+    connectivity/source/drivers/mork/MNSINIParser \
+    connectivity/source/drivers/mork/MNSProfileDiscover \
+    connectivity/source/drivers/mork/MorkParser \
+    connectivity/source/drivers/mork/MCatalog \
+    connectivity/source/drivers/mork/MConnection \
+    connectivity/source/drivers/mork/MDatabaseMetaData \
+    connectivity/source/drivers/mork/MDatabaseMetaDataHelper \
+    connectivity/source/drivers/mork/MDriver \
+    connectivity/source/drivers/mork/MStatement \
+    connectivity/source/drivers/mork/MResultSet \
+    connectivity/source/drivers/mork/MResultSetMetaData \
+    connectivity/source/drivers/mork/MPreparedStatement \
+    connectivity/source/drivers/mork/MQueryHelper \
+    connectivity/source/drivers/mork/MServices \
+    connectivity/source/drivers/mork/MTable \
+    connectivity/source/drivers/mork/MTables \
+))
+
+# vim: set noet sw=4 ts=4:
diff --git a/connectivity/Module_connectivity.mk b/connectivity/Module_connectivity.mk
index 2c6649a..a05df43 100644
--- a/connectivity/Module_connectivity.mk
+++ b/connectivity/Module_connectivity.mk
@@ -38,12 +38,14 @@ $(eval $(call gb_Module_add_targets,connectivity,\
 	Configuration_flat \
 	Configuration_mysql \
 	Configuration_odbc \
+	Executable_mork_helper \
 	Library_calc \
 	Library_dbase \
 	Library_dbpool2 \
 	Library_dbtools \
 	Library_file \
 	Library_flat \
+	Library_mork \
 	Library_mysql \
 	Library_odbc \
 	Library_odbcbase \
diff --git a/connectivity/registry/mork/org/openoffice/Office/DataAccess/Drivers.xcu b/connectivity/registry/mork/org/openoffice/Office/DataAccess/Drivers.xcu
new file mode 100644
index 0000000..408b005
--- /dev/null
+++ b/connectivity/registry/mork/org/openoffice/Office/DataAccess/Drivers.xcu
@@ -0,0 +1,66 @@
+<?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="mork">
+    <node oor:name="sdbc:address:mozilla:" oor:op="replace">
+      <prop oor:name="Driver">
+        <value>com.sun.star.comp.sdbc.MozabDriver</value>
+      </prop>
+      <prop oor:name="DriverTypeDisplayName" oor:type="xs:string">
+        <value xml:lang="en-US">SeaMonkey Address Book</value>
+      </prop>
+      <node oor:name="Features">
+        <node oor:name="EscapeDateTime" oor:op="replace">
+          <prop oor:name="Value" oor:type="xs:boolean">
+            <value>true</value>
+          </prop>
+        </node>
+      </node>
+      <node oor:name="MetaData">
+        <node oor:name="SupportsBrowsing" oor:op="replace">
+          <prop oor:name="Value" oor:type="xs:boolean">
+            <value>true</value>
+          </prop>
+        </node>
+      </node>
+    </node>
+    <node oor:name="sdbc:address:thunderbird:" oor:op="replace">
+      <prop oor:name="Driver">
+        <value>com.sun.star.comp.sdbc.MorkDriver</value>
+      </prop>
+      <prop oor:name="DriverTypeDisplayName" oor:type="xs:string">
+        <value xml:lang="en-US">Thunderbird/Icedove Address Book</value>
+      </prop>
+      <node oor:name="Features">
+        <node oor:name="EscapeDateTime" oor:op="replace">
+          <prop oor:name="Value" oor:type="xs:boolean">
+            <value>true</value>
+          </prop>
+        </node>
+      </node>
+      <node oor:name="MetaData">
+        <node oor:name="SupportsBrowsing" 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/mork/MCatalog.cxx b/connectivity/source/drivers/mork/MCatalog.cxx
new file mode 100644
index 0000000..005037c
--- /dev/null
+++ b/connectivity/source/drivers/mork/MCatalog.cxx
@@ -0,0 +1,111 @@
+/* -*- 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 "MCatalog.hxx"
+#include "MConnection.hxx"
+#include "MTables.hxx"
+#include <com/sun/star/sdbc/XRow.hpp>
+#include <com/sun/star/sdbc/XResultSet.hpp>
+#include <cppuhelper/interfacecontainer.h>
+
+// -------------------------------------------------------------------------
+using namespace connectivity::mork;
+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;
+using namespace ::cppu;
+
+// -------------------------------------------------------------------------
+OCatalog::OCatalog(OConnection* _pCon) : connectivity::sdbcx::OCatalog(_pCon)
+                ,m_pConnection(_pCon)
+                ,m_xMetaData(m_pConnection->getMetaData(  ))
+{
+//  osl_incrementInterlockedCount( &m_refCount );
+//  refreshTables();
+//  refreshViews();
+//  refreshGroups();
+//  refreshUsers();
+//  osl_decrementInterlockedCount( &m_refCount );
+}
+// -------------------------------------------------------------------------
+void OCatalog::refreshTables()
+{
+    TStringVector aVector;
+    Sequence< ::rtl::OUString > aTypes(1);
+    aTypes[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("%"));
+    Reference< XResultSet > xResult = m_xMetaData->getTables(Any(),
+        ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("%")),::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("%")),aTypes);
+
+    if(xResult.is())
+    {
+        Reference< XRow > xRow(xResult,UNO_QUERY);
+        ::rtl::OUString aName;
+        while(xResult->next())
+        {
+            aName = xRow->getString(3);
+            aVector.push_back(aName);
+        }
+    }
+    if(m_pTables)
+        m_pTables->reFill(aVector);
+    else
+        m_pTables = new OTables(m_xMetaData,*this,m_aMutex,aVector);
+}
+// -------------------------------------------------------------------------
+void OCatalog::refreshViews()
+{
+}
+// -------------------------------------------------------------------------
+void OCatalog::refreshGroups()
+{
+}
+// -------------------------------------------------------------------------
+void OCatalog::refreshUsers()
+{
+}
+// -----------------------------------------------------------------------------
+
+// XTablesSupplier
+Reference< XNameAccess > SAL_CALL OCatalog::getTables(  ) throw(RuntimeException)
+{
+    ::osl::MutexGuard aGuard(m_aMutex);
+    checkDisposed(rBHelper.bDisposed);
+
+    try
+    {
+        if(!m_pTables || m_pConnection->getForceLoadTables())
+            refreshTables();
+    }
+    catch( const RuntimeException& )
+    {
+        // allowed to leave this method
+        throw;
+    }
+    catch( const Exception& )
+    {
+        // allowed
+    }
+
+    return const_cast<OCatalog*>(this)->m_pTables;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/mork/MCatalog.hxx b/connectivity/source/drivers/mork/MCatalog.hxx
new file mode 100644
index 0000000..6723467
--- /dev/null
+++ b/connectivity/source/drivers/mork/MCatalog.hxx
@@ -0,0 +1,55 @@
+/* -*- 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 _CONNECTIVITY_MORK_CATALOG_HXX_
+#define _CONNECTIVITY_MORK_CATALOG_HXX_
+
+#include "connectivity/sdbcx/VCatalog.hxx"
+
+namespace connectivity
+{
+    namespace mork
+    {
+        // please don't name the class the same name as in an other namespaces
+        // some compilers have problems with this task as I noticed on windows
+        class OConnection;
+        class OCatalog : public connectivity::sdbcx::OCatalog
+        {
+            OConnection*    m_pConnection;      // used to get the metadata
+            ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDatabaseMetaData > m_xMetaData; // just to make things easier
+
+        public:
+            // implementation of the pure virtual methods
+            virtual void refreshTables();
+            virtual void refreshViews() ;
+            virtual void refreshGroups();
+            virtual void refreshUsers() ;
+            virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > SAL_CALL getTables(  ) throw(::com::sun::star::uno::RuntimeException);
+        public:
+            OCatalog(OConnection* _pCon);
+
+            OConnection*            getConnection()     const { return m_pConnection; }
+            sdbcx::OCollection*     getPrivateTables()  const { return m_pTables;}
+            sdbcx::OCollection*     getPrivateViews()   const { return m_pViews; }
+
+        };
+    }
+}
+#endif // _CONNECTIVITY_MORK_CATALOG_HXX_
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/mork/MColumnAlias.cxx b/connectivity/source/drivers/mork/MColumnAlias.cxx
new file mode 100644
index 0000000..d2c3ad1
--- /dev/null
+++ b/connectivity/source/drivers/mork/MColumnAlias.cxx
@@ -0,0 +1,184 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ *   Licensed to the Apache Software Foundation (ASF) under one or more
+ *   contributor license agreements. See the NOTICE file distributed
+ *   with this work for additional information regarding copyright
+ *   ownership. The ASF licenses this file to you under the Apache
+ *   License, Version 2.0 (the "License"); you may not use this file
+ *   except in compliance with the License. You may obtain a copy of
+ *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/macros.h>
+#include "MColumnAlias.hxx"
+#include "MConnection.hxx"
+#include "MExtConfigAccess.hxx"
+
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <com/sun/star/container/XNameAccess.hpp>
+
+#include <tools/diagnose_ex.h>
+
+#include <algorithm>
+#include <functional>
+
+using namespace ::connectivity;
+using namespace ::connectivity::mork;
+using namespace ::com::sun::star::uno;
+using namespace ::com::sun::star::lang;
+using namespace ::com::sun::star::beans;
+using namespace ::com::sun::star::container;
+
+//------------------------------------------------------------------------------
+OColumnAlias::OColumnAlias( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxORB )
+{
+    static const sal_Char* s_pProgrammaticNames[] =
+    {
+        "FirstName",
+        "LastName",
+        "DisplayName",
+        "NickName",
+        "PrimaryEmail",
+        "SecondEmail",
+        "PreferMailFormat",
+        "WorkPhone",
+        "HomePhone",
+        "FaxNumber",
+        "PagerNumber",
+        "CellularNumber",
+        "HomeAddress",
+        "HomeAddress2",
+        "HomeCity",
+        "HomeState",
+        "HomeZipCode",
+        "HomeCountry",
+        "WorkAddress",
+        "WorkAddress2",
+        "WorkCity",
+        "WorkState",
+        "WorkZipCode",
+        "WorkCountry",
+        "JobTitle",
+        "Department",
+        "Company",
+        "WebPage1",
+        "WebPage2",
+        "BirthYear",
+        "BirthMonth",
+        "BirthDay",
+        "Custom1",
+        "Custom2",
+        "Custom3",
+        "Custom4",
+        "Notes",
+    };
+
+    for ( size_t i = 0; i < sizeof( s_pProgrammaticNames ) / sizeof( s_pProgrammaticNames[0] ); ++i )
+        m_aAliasMap[ ::rtl::OUString::createFromAscii( s_pProgrammaticNames[i] ) ] = AliasEntry( s_pProgrammaticNames[i], i );
+
+    initialize( _rxORB );
+}
+
+//------------------------------------------------------------------------------
+void OColumnAlias::initialize( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxORB )
+{
+    // open our driver settings config node
+
+    // the config path for our own driver's settings
+    Reference< XPropertySet > xDriverNode = createDriverConfigNode( _rxORB );
+    if ( xDriverNode.is() )
+    {
+        try
+        {
+            //.............................................................
+            Reference< XNameAccess > xAliasesNode;
+            xDriverNode->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("ColumnAliases")) ) >>= xAliasesNode;
+            OSL_ENSURE( xAliasesNode.is(), "OColumnAlias::setAlias: missing the aliases node!" );
+
+            // this is a set of string nodes
+            Sequence< ::rtl::OUString > aProgrammaticNames;
+            if ( xAliasesNode.is() )
+                aProgrammaticNames = xAliasesNode->getElementNames();
+
+            //.............................................................
+            // travel through all the set elements
+            const ::rtl::OUString* pProgrammaticNames = aProgrammaticNames.getConstArray();
+            const ::rtl::OUString* pProgrammaticNamesEnd = pProgrammaticNames + aProgrammaticNames.getLength();
+            ::rtl::OUString sAssignedAlias;
+
+            for ( ; pProgrammaticNames < pProgrammaticNamesEnd; ++pProgrammaticNames )
+            {
+                OSL_VERIFY( xAliasesNode->getByName( *pProgrammaticNames ) >>= sAssignedAlias );
+
+                // normalize in case the config data is corrupted
+                // (what we really don't need is an empty alias ...)
+                if ( sAssignedAlias.isEmpty() )
+                      sAssignedAlias = *pProgrammaticNames;
+
+                ::rtl::OString sAsciiProgrammaticName( ::rtl::OUStringToOString( *pProgrammaticNames, RTL_TEXTENCODING_ASCII_US ) );
+                //.............................................................
+            #if OSL_DEBUG_LEVEL > 0
+                bool bFound = false;
+            #endif
+                for (   AliasMap::iterator search = m_aAliasMap.begin();
+                        ( search != m_aAliasMap.end() );
+                        ++search
+                    )
+                {
+                    if ( search->second.programmaticAsciiName.equals( sAsciiProgrammaticName ) )
+                    {
+                        AliasEntry entry( search->second );
+                        m_aAliasMap.erase( search );
+                        m_aAliasMap[ sAssignedAlias ] = entry;
+
+                    #if OSL_DEBUG_LEVEL > 0
+                        bFound = true;
+                    #endif
+
+                        break;
+                    }
+                }
+
+                OSL_ENSURE( bFound, "OColumnAlias::setAlias: did not find a programmatic name which exists in the configuration!" );
+            }
+        }
+        catch( const Exception& )
+        {
+            DBG_UNHANDLED_EXCEPTION();
+        }
+    }
+}
+
+//------------------------------------------------------------------
+::rtl::OString OColumnAlias::getProgrammaticNameOrFallbackToUTF8Alias( const ::rtl::OUString& _rAlias ) const
+{
+    AliasMap::const_iterator pos = m_aAliasMap.find( _rAlias );
+    if ( pos == m_aAliasMap.end() )
+    {
+        OSL_FAIL( "OColumnAlias::getProgrammaticNameOrFallbackToUTF8Alias: no programmatic name for this alias!" );
+        return ::rtl::OUStringToOString( _rAlias, RTL_TEXTENCODING_UTF8 );
+    }
+    return pos->second.programmaticAsciiName;
+}
+
+//------------------------------------------------------------------
+bool OColumnAlias::isColumnSearchable( const ::rtl::OUString _alias ) const
+{
+    ::rtl::OString sProgrammatic = getProgrammaticNameOrFallbackToUTF8Alias( _alias );
+
+    return  (   !sProgrammatic.equals( "HomeCountry" )
+            &&  !sProgrammatic.equals( "WorkCountry" )
+            );
+    // for those, we know that they're not searchable in the Mozilla/LDAP implementation.
+    // There might be more ...
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/mork/MColumnAlias.hxx b/connectivity/source/drivers/mork/MColumnAlias.hxx
new file mode 100644
index 0000000..3b713ae
--- /dev/null
+++ b/connectivity/source/drivers/mork/MColumnAlias.hxx
@@ -0,0 +1,79 @@
+/* -*- 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 _CONNECTIVITY_MORK_COLUMNALIAS_HXX_
+#define _CONNECTIVITY_MORK_COLUMNALIAS_HXX_
+
+#include <unotools/confignode.hxx>
+
+#include <osl/mutex.hxx>
+#include <vector>
+#include <boost/unordered_map.hpp>
+
+namespace connectivity
+{
+    namespace mork
+    {
+        class OColumnAlias
+        {
+        public:
+            struct AliasEntry
+            {
+                ::rtl::OString  programmaticAsciiName;
+                size_t columnPosition;
+
+                AliasEntry()
+                    :programmaticAsciiName()
+                    ,columnPosition( 0 )
+                {
+                }
+                AliasEntry( const sal_Char* _programmaticAsciiName, size_t _columnPosition )
+                    :programmaticAsciiName( _programmaticAsciiName )
+                    ,columnPosition( _columnPosition )
+                {
+                }
+            };
+            typedef ::boost::unordered_map< ::rtl::OUString, AliasEntry, ::rtl::OUStringHash > AliasMap;
+
+        private:
+            AliasMap    m_aAliasMap;
+
+        public:
+            OColumnAlias( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > & );
+
+            inline bool hasAlias( const ::rtl::OUString& _rAlias ) const
+            {
+                return m_aAliasMap.find( _rAlias ) != m_aAliasMap.end();
+            }
+            ::rtl::OString getProgrammaticNameOrFallbackToUTF8Alias( const ::rtl::OUString& _rAlias ) const;
+
+            inline AliasMap::const_iterator begin() const { return m_aAliasMap.begin(); }
+            inline AliasMap::const_iterator end() const { return m_aAliasMap.end(); }
+
+            bool isColumnSearchable( const ::rtl::OUString _alias ) const;
+
+        private:
+            void initialize( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxORB );
+        };
+    }
+}
+#endif // _CONNECTIVITY_MORK_COLUMNALIAS_HXX_
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/mork/MColumns.cxx b/connectivity/source/drivers/mork/MColumns.cxx
new file mode 100644
index 0000000..852bb4d
--- /dev/null
+++ b/connectivity/source/drivers/mork/MColumns.cxx
@@ -0,0 +1,87 @@
+/* -*- 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 "MColumns.hxx"
+#include "connectivity/sdbcx/VColumn.hxx"
+#include <com/sun/star/sdbc/XRow.hpp>
+#include <com/sun/star/sdbc/XResultSet.hpp>
+#include <com/sun/star/sdbc/DataType.hpp>
+#include <com/sun/star/sdbc/ColumnValue.hpp>
+#include "MTable.hxx"
+#include "MTables.hxx"
+#include "MCatalog.hxx"
+#include <comphelper/types.hxx>
+#include "connectivity/dbtools.hxx"
+
+using namespace ::comphelper;
+
+using namespace connectivity::mork;
+using namespace connectivity::sdbcx;
+using namespace connectivity;
+using namespace ::com::sun::star::uno;
+using namespace ::com::sun::star::beans;
+using namespace ::com::sun::star::sdbc;
+using namespace ::com::sun::star::container;
+using namespace ::com::sun::star::lang;
+
+sdbcx::ObjectType OColumns::createObject(const ::rtl::OUString& _rName)
+{
+    Reference< XResultSet > xResult = m_pTable->getConnection()->getMetaData()->getColumns(Any(),
+    m_pTable->getSchema(),m_pTable->getTableName(),_rName);
+
+    sdbcx::ObjectType xRet = NULL;
+    if(xResult.is())
+    {
+        Reference< XRow > xRow(xResult,UNO_QUERY);
+        while(xResult->next())
+        {
+            if(xRow->getString(4) == _rName)
+            {
+                sal_Int32 nType             = xRow->getInt(5);
+                ::rtl::OUString sTypeName   = xRow->getString(6);
+                sal_Int32 nPrec             = xRow->getInt(7);
+
+                OColumn* pRet = new OColumn(_rName,
+                                            sTypeName,
+                                            xRow->getString(13),
+                                            xRow->getString(12),
+                                            xRow->getInt(11),
+                                            nPrec,
+                                            xRow->getInt(9),
+                                            nType,
+                                            sal_False,sal_False,sal_False,sal_True);
+                xRet = pRet;
+                break;
+            }
+        }
+    }
+
+    return xRet;
+}
+
+// -------------------------------------------------------------------------
+void OColumns::impl_refresh() throw(RuntimeException)
+{
+    m_pTable->refreshColumns();
+}
+// -----------------------------------------------------------------------------
+
+
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/mork/MColumns.hxx b/connectivity/source/drivers/mork/MColumns.hxx
new file mode 100644
index 0000000..63d982f
--- /dev/null
+++ b/connectivity/source/drivers/mork/MColumns.hxx
@@ -0,0 +1,51 @@
+/* -*- 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 _CONNECTIVITY_MORK_COLUMNS_HXX_
+#define _CONNECTIVITY_MORK_COLUMNS_HXX_
+
+#include "connectivity/sdbcx/VCollection.hxx"
+#include <com/sun/star/sdbc/XDatabaseMetaData.hpp>
+#include "connectivity/sdbcx/IRefreshable.hxx"
+#include "MTable.hxx"
+
+namespace connectivity
+{
+    namespace mork
+    {
+        class OColumns : public sdbcx::OCollection
+        {
+        protected:
+            OTable* m_pTable;
+
+            virtual sdbcx::ObjectType createObject(const ::rtl::OUString& _rName);
+            virtual void impl_refresh() throw(::com::sun::star::uno::RuntimeException);
+        public:
+            OColumns(   OTable* _pTable,
+                        ::osl::Mutex& _rMutex,
+                        const TStringVector &_rVector
+                        ) : sdbcx::OCollection(*_pTable,sal_True,_rMutex,_rVector)
+                ,m_pTable(_pTable)
+            {}
+        };
+    }
+}
+#endif // _CONNECTIVITY_MORK_COLUMNS_HXX_
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/mork/MConfigAccess.cxx b/connectivity/source/drivers/mork/MConfigAccess.cxx
new file mode 100644
index 0000000..0734f12
--- /dev/null
+++ b/connectivity/source/drivers/mork/MConfigAccess.cxx
@@ -0,0 +1,259 @@
+/* -*- 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 "com/sun/star/configuration/theDefaultProvider.hpp"
+#include "comphelper/processfactory.hxx"
+
+#include "MConfigAccess.hxx"
+#include "MExtConfigAccess.hxx"
+#include "MConnection.hxx"
+#include "MDriver.hxx"
+
+using namespace ::com::sun::star::uno;
+using namespace ::com::sun::star::lang;
+using namespace ::com::sun::star::beans;
+
+//.........................................................................
+namespace connectivity
+{
+    namespace mork
+    {
+        //-----------------------------------------------------------------
+        Reference< XPropertySet > createDriverConfigNode( Reference< XMultiServiceFactory > _rxORB )
+        {
+            Reference< XPropertySet > xNode;
+            try
+            {
+                //=============================================================
+                // create the config provider
+                Reference< XMultiServiceFactory > xConfigProvider(
+                    com::sun::star::configuration::theDefaultProvider::get(
+                        comphelper::getComponentContext( _rxORB ) ) );
+
+                ::rtl::OUString sCompleteNodePath(RTL_CONSTASCII_USTRINGPARAM( "/org.openoffice.Office.DataAccess/DriverSettings/" ));
+                sCompleteNodePath += MorkDriver::getImplementationName_Static(  );
+
+                //=========================================================
+                // arguments for creating the config access
+                Sequence< Any > aArguments(2);
+                // the path to the node to open
+                aArguments[0] <<= PropertyValue(
+                    ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("nodepath")),
+                    0,
+                    makeAny( sCompleteNodePath ),
+                    PropertyState_DIRECT_VALUE
+                );
+                // the depth: -1 means unlimited
+                aArguments[1] <<= PropertyValue(
+                    ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("depth")),
+                    0,
+                    makeAny( (sal_Int32)-1 ),
+                    PropertyState_DIRECT_VALUE
+                );
+
+                //=========================================================
+                // create the access
+                Reference< XInterface > xAccess = xConfigProvider->createInstanceWithArguments(
+                    ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.configuration.ConfigurationAccess" )),
+                    aArguments
+                );
+                OSL_ENSURE( xAccess.is(), "createDriverConfigNode: invalid access returned (should throw an exception instead)!" );
+
+                xNode = xNode.query( xAccess );
+            }
+            catch( const Exception& )
+            {
+                OSL_FAIL( "createDriverConfigNode: caught an exception while accessing the driver's config node!" );
+            }
+
+            // outta here
+            return xNode;
+        }
+
+        //-----------------------------------------------------------------
+        namespace
+        {
+            // a private helper to accessing the point where we store the reference
+            // to the factory
+            Reference< XMultiServiceFactory >& accessFactoryStorage( )
+            {
+                static Reference< XMultiServiceFactory > xMozabServiceFactory;
+                return xMozabServiceFactory;
+            }
+        }
+
+        //-----------------------------------------------------------------
+        void setMozabServiceFactory( const Reference< XMultiServiceFactory >& _rxFactory )
+        {
+            accessFactoryStorage( ) = _rxFactory;
+        }
+
+        //-----------------------------------------------------------------
+        const Reference< XMultiServiceFactory >& getMozabServiceFactory( )
+        {
+            return accessFactoryStorage( );
+        }
+
+        //-----------------------------------------------------------------
+        ::rtl::OUString getDescription(const sal_Char* sNode,const ::rtl::OUString & sDefault)
+        {
+            ::rtl::OUString sPreferredName;
+            ::rtl::OUString sDescription;
+
+            Reference< XMultiServiceFactory > xFactory = getMozabServiceFactory();
+            OSL_ENSURE( xFactory.is(), "getPreferredProfileName: invalid service factory!" );
+            if ( xFactory.is() )
+            {
+                try
+                {
+                    Reference< XPropertySet > xDriverNode = createDriverConfigNode( xFactory );
+                    Reference< XPropertySet > xMozPrefsNode;
+                    if ( xDriverNode.is() )
+                        xDriverNode->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("MozillaPreferences" )) ) >>= xMozPrefsNode;
+                    OSL_ENSURE( xMozPrefsNode.is(), "getPreferredProfileName: could not access the node for the mozilla preferences!" );
+                    if ( xMozPrefsNode.is() )
+                        xMozPrefsNode->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("ProfileName" )) ) >>= sPreferredName;
+                    if ( xMozPrefsNode.is() )
+                        xMozPrefsNode->getPropertyValue( ::rtl::OUString::createFromAscii(sNode) ) >>= sDescription;
+                    if (sDescription.getLength() == 0)
+                        sDescription = sDefault;
+                }
+                catch( const Exception& )
+                {
+                    OSL_FAIL( "getDescription: caught an exception!" );
+                }
+            }
+            if (sDescription.getLength() == 0)
+                sDescription = sDefault;
+            return sDescription;
+        }
+        //-----------------------------------------------------------------
+        ::rtl::OUString getPreferredProfileName( )
+        {
+            ::rtl::OUString sPreferredName;
+
+            Reference< XMultiServiceFactory > xFactory = getMozabServiceFactory();
+            OSL_ENSURE( xFactory.is(), "getPreferredProfileName: invalid service factory!" );
+            if ( xFactory.is() )
+            {
+                try
+                {
+                    Reference< XPropertySet > xDriverNode = createDriverConfigNode( xFactory );
+                    Reference< XPropertySet > xMozPrefsNode;
+                    if ( xDriverNode.is() )
+                        xDriverNode->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("MozillaPreferences" )) ) >>= xMozPrefsNode;
+                    OSL_ENSURE( xMozPrefsNode.is(), "getPreferredProfileName: could not access the node for the mozilla preferences!" );
+                    if ( xMozPrefsNode.is() )
+                        xMozPrefsNode->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("ProfileName" )) ) >>= sPreferredName;
+                }
+                catch( const Exception& )
+                {
+                    OSL_FAIL( "getPreferredProfileName: caught an exception!" );
+                }
+            }
+            return sPreferredName;
+        }
+    }
+}
+
+//.........................................................................
+
+//-------------------------------------------------------------------------
+extern "C" const sal_Unicode* SAL_CALL getUserProfile( void )
+{
+    static sal_Bool         bReadConfig = sal_False;
+    static ::rtl::OUString  sUserProfile;
+    if ( !bReadConfig )
+    {
+        sUserProfile = ::connectivity::mork::getPreferredProfileName( );
+        bReadConfig = sal_True;
+    }
+
+    return sUserProfile.getStr();
+}
+//------------------------------------------------------------------------
+extern "C" const sal_Char* SAL_CALL getPabDescription( void )
+{
+    static sal_Bool         bReadConfig = sal_False;
+    static ::rtl::OUString  usPabDescription;
+    static ::rtl::OString   sPabDescription;
+
+    if ( !bReadConfig )
+    {
+        usPabDescription = ::connectivity::mork::getDescription(
+                            "PabDescription" ,
+                            ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Personal Address Book" )));
+        sPabDescription = ::rtl::OUStringToOString( usPabDescription,
+                                                 RTL_TEXTENCODING_UTF8);
+        bReadConfig = sal_True;
+    }
+
+    return sPabDescription.getStr();
+}
+
+//-------------------------------------------------------------------------
+extern "C" const sal_Char* SAL_CALL getHisDescription( void )
+{
+    static sal_Bool         bReadConfig = sal_False;
+    static ::rtl::OUString  usHisDescription;
+    static ::rtl::OString   sHisDescription;
+
+    if ( !bReadConfig )
+    {
+        usHisDescription = ::connectivity::mork::getDescription(
+                            "HisDescription" ,
+                            ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Collected Addresses" )));
+        sHisDescription = ::rtl::OUStringToOString( usHisDescription,
+                                                 RTL_TEXTENCODING_UTF8);
+        bReadConfig = sal_True;
+    }
+
+    return sHisDescription.getStr();
+}
+
+//-------------------------------------------------------------------------
+// MConfigAccess was invented to allow non-UNO parts access to the configuration.
+// Unfortunately, configuration access requires a XMultiServiceFactory - which the
+// mozilla side does not have.
+// So we create a "library-local" service factory here: Every need for a service
+// factory can be fullfilled by this factory (similar to the get/setProcessServiceFactory
+// in comphelper).
+// This is halfway valid, as usually, the mozabdrv library is invoked from the mozab library
+// only. The latter contains the driver class (and only this class and nothing more), and
+// the driver class is a singleton. The driver itself is created with a service factory,
+// which (by definition) can and should be used for all subsequent service requests.
+// And this is exactly what we're allowing with the following functions ....
+
+/** _pFactory must point to an XMultiServiceFactory, which must be aquired once
+    for purpose of safely transfering it. The callee will release this interface
+    when it has stored the pointer somewhere else.
+*/
+extern "C" SAL_DLLPUBLIC_EXPORT void SAL_CALL setMozabServiceFactory(
+    void* _pFactory )
+{
+    Reference< XMultiServiceFactory > xFactory = static_cast< XMultiServiceFactory* >( _pFactory );
+  //  ::connectivity::mozab::setMozabServiceFactory( xFactory );
+
+    // by definition, the object behind the interface pointer has been acquired once for purpose
+    // of safely transporting it
+    xFactory->release();
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/mork/MConfigAccess.hxx b/connectivity/source/drivers/mork/MConfigAccess.hxx
new file mode 100644
index 0000000..e00986b
--- /dev/null
+++ b/connectivity/source/drivers/mork/MConfigAccess.hxx
@@ -0,0 +1,32 @@
+/* -*- 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 CONNECTIVITY_MORK_MCONFIGACCESS_HXX
+
+#include <sal/types.h>
+
+extern "C" const sal_Unicode* SAL_CALL getUserProfile( void );
+
+extern "C" const sal_Char* SAL_CALL getPabDescription( void );
+
+extern "C" const sal_Char* SAL_CALL getHisDescription( void );
+
+#endif  // CONNECTIVITY_MORK_MCONFIGACCESS_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/mork/MConnection.cxx b/connectivity/source/drivers/mork/MConnection.cxx
new file mode 100644
index 0000000..bb16d72
--- /dev/null
+++ b/connectivity/source/drivers/mork/MConnection.cxx
@@ -0,0 +1,397 @@
+/* -*- 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/.
+ */
+
+#include "diagnose_ex.h"
+#include "MNSProfileDiscover.hxx"
+#include "MConnection.hxx"
+#include "MDriver.hxx"
+#include "MDatabaseMetaData.hxx"
+#include "MCatalog.hxx"
+#include "MPreparedStatement.hxx"
+#include "MorkParser.hxx"
+
+#include <connectivity/dbcharset.hxx>
+#include <connectivity/dbexception.hxx>
+#include <connectivity/sqlerror.hxx>
+
+#include "resource/mork_res.hrc"
+#include "resource/common_res.hrc"
+
+#include <com/sun/star/sdbc/ColumnValue.hpp>
+#include <com/sun/star/sdbc/XRow.hpp>
+#include <com/sun/star/sdbc/TransactionIsolation.hpp>
+
+#include <comphelper/officeresourcebundle.hxx>
+
+using namespace dbtools;
+
+//------------------------------------------------------------------------------
+using namespace com::sun::star::uno;
+using namespace com::sun::star::lang;
+using namespace com::sun::star::beans;
+using namespace com::sun::star::sdbc;
+using namespace com::sun::star::sdbcx;
+// --------------------------------------------------------------------------------
+
+namespace connectivity { namespace mork {
+
+static const int defaultScope = 0x80;
+
+// -----------------------------------------------------------------------------
+
+OConnection::OConnection(MorkDriver* _pDriver)
+    :OSubComponent<OConnection, OConnection_BASE>((::cppu::OWeakObject*)_pDriver, this)
+    ,m_pDriver(_pDriver)
+    ,m_aColumnAlias( _pDriver->getFactory() )
+{
+    m_pDriver->acquire();
+    m_pProfileAccess = new ProfileAccess();
+    m_pMork = new MorkParser();
+}
+//-----------------------------------------------------------------------------
+OConnection::~OConnection()
+{
+    acquire();
+    if(!isClosed())
+        close();
+    m_pDriver->release();
+    m_pDriver = NULL;
+    delete m_pProfileAccess;
+    delete m_pMork;
+}
+//-----------------------------------------------------------------------------
+void SAL_CALL OConnection::release() throw()
+{
+    relase_ChildImpl();
+}
+// -----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+void OConnection::construct(const ::rtl::OUString& url,const Sequence< PropertyValue >& info)  throw(SQLException)
+{
+    (void) info; // avoid warnings
+    SAL_INFO("connectivity.mork", "=> OConnection::construct()" );
+    //  open file
+    setURL(url);
+    //
+    // Skip 'sdbc:mozab: part of URL
+    //
+    sal_Int32 nLen = url.indexOf(':');
+    nLen = url.indexOf(':',nLen+1);
+    OSL_ENSURE( url.copy( 0, nLen ) == "sdbc:address", "OConnection::construct: invalid start of the URI - should never have survived XDriver::acceptsURL!" );
+
+    ::rtl::OUString aAddrbookURI(url.copy(nLen+1));
+    // Get Scheme
+    nLen = aAddrbookURI.indexOf(':');
+    ::rtl::OUString aAddrbookScheme;
+    ::rtl::OUString sAdditionalInfo;
+    if ( nLen == -1 )
+    {
+        // There isn't any subschema: - but could be just subschema
+        if ( !aAddrbookURI.isEmpty() )
+        {
+            aAddrbookScheme= aAddrbookURI;
+        }
+        else
+        {
+            SAL_WARN("connectivity.mork", "No subschema given!!!");
+            throwGenericSQLException( STR_URI_SYNTAX_ERROR, *this );
+        }
+    }
+    else
+    {
+        aAddrbookScheme = aAddrbookURI.copy(0, nLen);
+        sAdditionalInfo = aAddrbookURI.copy( nLen + 1 );
+    }
+
+    SAL_INFO("connectivity.mork", "URI = " << aAddrbookURI );
+    SAL_INFO("connectivity.mork", "Scheme = " << aAddrbookScheme );
+
+    ::rtl::OUString defaultProfile = m_pProfileAccess->getDefaultProfile(::com::sun::star::mozilla::MozillaProductType_Thunderbird);
+    SAL_INFO("connectivity.mork", "DefaultProfile: " << defaultProfile);
+
+    ::rtl::OUString path = m_pProfileAccess->getProfilePath(::com::sun::star::mozilla::MozillaProductType_Thunderbird, defaultProfile);
+    SAL_INFO("connectivity.mork", "ProfilePath: " << path);
+
+    path += rtl::OUString( "/abook.mab" );
+
+    SAL_INFO("connectivity.mork", "AdressbookPath: " << path);
+
+    rtl::OString strPath = ::rtl::OUStringToOString(path, RTL_TEXTENCODING_UTF8 );
+
+    // Open and parse mork file
+    if (!m_pMork->open(strPath.getStr()))
+    {
+        SAL_WARN("connectivity.mork", "Can not parse mork file!");
+        throwGenericSQLException( STR_COULD_NOT_LOAD_FILE, *this );
+    }
+
+    // check that we can retrieve the tables:
+    MorkTableMap *Tables = m_pMork->getTables( defaultScope );
+    MorkTableMap::iterator tableIter;
+    if (Tables)
+    {
+        // Iterate all tables
+        for ( tableIter = Tables->begin(); tableIter != Tables->end(); tableIter++ )
+        {
+            if ( 0 == tableIter->first ) continue;
+            SAL_INFO("connectivity.mork", "table->first : " << tableIter->first);
+        }
+    }
+}
+
+// XServiceInfo
+// --------------------------------------------------------------------------------
+IMPLEMENT_SERVICE_INFO(OConnection, "com.sun.star.sdbc.drivers.mork.OConnection", "com.sun.star.sdbc.Connection")
+
+// --------------------------------------------------------------------------------
+Reference< XStatement > SAL_CALL OConnection::createStatement(  ) throw(SQLException, RuntimeException)
+{
+    SAL_INFO("connectivity.mork", "=> OConnection::createStatement()" );
+
+    ::osl::MutexGuard aGuard( m_aMutex );
+    checkDisposed(OConnection_BASE::rBHelper.bDisposed);
+
+    // create a statement
+    // the statement can only be executed once
+    Reference< XStatement > xReturn = new OStatement(this);
+    m_aStatements.push_back(WeakReferenceHelper(xReturn));
+    return xReturn;
+}
+// --------------------------------------------------------------------------------
+Reference< XPreparedStatement > SAL_CALL OConnection::prepareStatement( const ::rtl::OUString& _sSql ) throw(SQLException, RuntimeException)
+{
+    SAL_INFO("connectivity.mork", "=> OConnection::prepareStatement()" );
+    SAL_INFO("connectivity.mork", "OConnection::prepareStatement( " << _sSql << " )");
+
+    OSL_UNUSED( _sSql );
+    ::osl::MutexGuard aGuard( m_aMutex );
+    checkDisposed(OConnection_BASE::rBHelper.bDisposed);
+
+    // the pre
+    // create a statement
+    // the statement can only be executed more than once
+    OPreparedStatement* pPrepared = new OPreparedStatement(this,_sSql);
+    Reference< XPreparedStatement > xReturn = pPrepared;
+    pPrepared->lateInit();
+
+    m_aStatements.push_back(WeakReferenceHelper(xReturn));
+    return xReturn;
+}
+// --------------------------------------------------------------------------------
+Reference< XPreparedStatement > SAL_CALL OConnection::prepareCall( const ::rtl::OUString& _sSql ) throw(SQLException, RuntimeException)
+{
+    SAL_INFO("connectivity.mork", "=> OConnection::prepareCall()" );
+    SAL_INFO("connectivity.mork", "sql: " << _sSql);
+    OSL_UNUSED( _sSql );
+    ::dbtools::throwFeatureNotImplementedException( "XConnection::prepareCall", *this );
+    SAL_INFO("connectivity.mork", "OConnection::prepareCall( " << _sSql << " )");
+    return NULL;
+}
+// --------------------------------------------------------------------------------
+::rtl::OUString SAL_CALL OConnection::nativeSQL( const ::rtl::OUString& _sSql ) throw(SQLException, RuntimeException)
+{
+    SAL_INFO("connectivity.mork", "=> OConnection::nativeSQL()" );
+    SAL_INFO("connectivity.mork", "sql: " << _sSql);
+
+    ::osl::MutexGuard aGuard( m_aMutex );
+    // when you need to transform SQL92 to you driver specific you can do it here
+    SAL_INFO("connectivity.mork", "OConnection::nativeSQL(" << _sSql << " )" );
+
+    return _sSql;
+}
+// --------------------------------------------------------------------------------
+void SAL_CALL OConnection::setAutoCommit( sal_Bool /*autoCommit*/ ) throw(SQLException, RuntimeException)
+{
+    ::dbtools::throwFeatureNotImplementedException( "XConnection::setAutoCommit", *this );
+}
+// --------------------------------------------------------------------------------
+sal_Bool SAL_CALL OConnection::getAutoCommit(  ) throw(SQLException, RuntimeException)
+{
+    // you have to distinguish which if you are in autocommit mode or not
+    // at normal case true should be fine here
+
+    return sal_True;
+}
+// --------------------------------------------------------------------------------
+void SAL_CALL OConnection::commit(  ) throw(SQLException, RuntimeException)
+{
+    // when you database does support transactions you should commit here
+}
+// --------------------------------------------------------------------------------
+void SAL_CALL OConnection::rollback(  ) throw(SQLException, RuntimeException)
+{
+    // same as commit but for the other case
+}
+// --------------------------------------------------------------------------------
+sal_Bool SAL_CALL OConnection::isClosed(  ) throw(SQLException, RuntimeException)
+{
+    ::osl::MutexGuard aGuard( m_aMutex );
+
+    // just simple -> we are close when we are disposed taht means someone called dispose(); (XComponent)
+    return OConnection_BASE::rBHelper.bDisposed;
+}
+// --------------------------------------------------------------------------------
+Reference< XDatabaseMetaData > SAL_CALL OConnection::getMetaData(  ) throw(SQLException, RuntimeException)
+{
+    SAL_INFO("connectivity.mork", "=> OConnection::getMetaData()" );
+
+    ::osl::MutexGuard aGuard( m_aMutex );
+    checkDisposed(OConnection_BASE::rBHelper.bDisposed);
+
+    // here we have to create the class with biggest interface
+    // The answer is 42 :-)
+    Reference< XDatabaseMetaData > xMetaData = m_xMetaData;
+    if(!xMetaData.is())
+    {
+        xMetaData = new ODatabaseMetaData(this); // need the connection because it can return it
+        m_xMetaData = xMetaData;
+    }
+
+    return xMetaData;
+}
+// --------------------------------------------------------------------------------
+void SAL_CALL OConnection::setReadOnly( sal_Bool /*readOnly*/ ) throw(SQLException, RuntimeException)
+{
+    ::dbtools::throwFeatureNotImplementedException( "XConnection::setReadOnly", *this );
+}
+// --------------------------------------------------------------------------------
+sal_Bool SAL_CALL OConnection::isReadOnly(  ) throw(SQLException, RuntimeException)
+{
+    // return if your connection to readonly
+    return sal_False;
+}
+// --------------------------------------------------------------------------------
+void SAL_CALL OConnection::setCatalog( const ::rtl::OUString& /*catalog*/ ) throw(SQLException, RuntimeException)
+{
+    ::dbtools::throwFeatureNotImplementedException( "XConnection::setCatalog", *this );
+}
+// --------------------------------------------------------------------------------
+::rtl::OUString SAL_CALL OConnection::getCatalog(  ) throw(SQLException, RuntimeException)
+{
+    return ::rtl::OUString();
+}
+// --------------------------------------------------------------------------------
+void SAL_CALL OConnection::setTransactionIsolation( sal_Int32 /*level*/ ) throw(SQLException, RuntimeException)
+{
+    ::dbtools::throwFeatureNotImplementedException( "XConnection::setTransactionIsolation", *this );
+}
+// --------------------------------------------------------------------------------
+sal_Int32 SAL_CALL OConnection::getTransactionIsolation(  ) throw(SQLException, RuntimeException)
+{
+    // please have a look at @see com.sun.star.sdbc.TransactionIsolation
+    return TransactionIsolation::NONE;
+}
+// --------------------------------------------------------------------------------
+Reference< ::com::sun::star::container::XNameAccess > SAL_CALL OConnection::getTypeMap(  ) throw(SQLException, RuntimeException)
+{
+    // if your driver has special database types you can return it here
+    return NULL;
+}
+// --------------------------------------------------------------------------------
+void SAL_CALL OConnection::setTypeMap( const Reference< ::com::sun::star::container::XNameAccess >& /*typeMap*/ ) throw(SQLException, RuntimeException)
+{
+    ::dbtools::throwFeatureNotImplementedException( "XConnection::setTypeMap", *this );
+}
+// --------------------------------------------------------------------------------
+// XCloseable
+void SAL_CALL OConnection::close(  ) throw(SQLException, RuntimeException)
+{
+    // we just dispose us
+    {
+        ::osl::MutexGuard aGuard( m_aMutex );
+        checkDisposed(OConnection_BASE::rBHelper.bDisposed);
+
+    }
+    dispose();
+}
+// --------------------------------------------------------------------------------
+// XWarningsSupplier
+Any SAL_CALL OConnection::getWarnings(  ) throw(SQLException, RuntimeException)
+{
+    // when you collected some warnings -> return it
+    return Any();
+}
+// --------------------------------------------------------------------------------
+void SAL_CALL OConnection::clearWarnings(  ) throw(SQLException, RuntimeException)
+{
+    // you should clear your collected warnings here
+}
+//------------------------------------------------------------------------------
+void OConnection::disposing()
+{
+    // we noticed that we should be destroied in near future so we have to dispose our statements
+    ::osl::MutexGuard aGuard(m_aMutex);
+    dispose_ChildImpl();
+}
+// -----------------------------------------------------------------------------
+
+Reference< XTablesSupplier > SAL_CALL OConnection::createCatalog()
+{
+    OSL_TRACE("IN OConnection::createCatalog()" );
+    ::osl::MutexGuard aGuard( m_aMutex );
+    Reference< XTablesSupplier > xTab = m_xCatalog;
+    if(!m_xCatalog.is())
+    {
+        OCatalog *pCat = new OCatalog(this);
+        xTab = pCat;
+        m_xCatalog = xTab;
+    }
+    OSL_TRACE( "\tOUT OConnection::createCatalog()" );
+    return xTab;
+}
+// -----------------------------------------------------------------------------
+
+// -----------------------------------------------------------------------------
+void OConnection::throwSQLException( const ErrorDescriptor& _rError, const Reference< XInterface >& _rxContext )
+{
+    if ( _rError.getResId() != 0 )
+    {
+        OSL_ENSURE( ( _rError.getErrorCondition() == 0 ),
+            "OConnection::throwSQLException: unsupported error code combination!" );
+
+        ::rtl::OUString sParameter( _rError.getParameter() );
+        if ( !sParameter.isEmpty() )
+        {
+            const ::rtl::OUString sError( getResources().getResourceStringWithSubstitution(
+                _rError.getResId(),
+                "$1$", sParameter
+             ) );
+            ::dbtools::throwGenericSQLException( sError, _rxContext );
+            OSL_FAIL( "OConnection::throwSQLException: unreachable (1)!" );
+        }
+
+        throwGenericSQLException( _rError.getResId(), _rxContext );
+        OSL_FAIL( "OConnection::throwSQLException: unreachable (2)!" );
+    }
+
+    if ( _rError.getErrorCondition() != 0 )
+    {
+        SQLError aErrorHelper( getDriver()->getFactory() );
+        ::rtl::OUString sParameter( _rError.getParameter() );
+        if ( !sParameter.isEmpty() )
+            aErrorHelper.raiseException( _rError.getErrorCondition(), _rxContext, sParameter );
+        else
+            aErrorHelper.raiseException( _rError.getErrorCondition(), _rxContext);
+        OSL_FAIL( "OConnection::throwSQLException: unreachable (3)!" );
+    }
+
+    throwGenericSQLException( STR_UNSPECIFIED_ERROR, _rxContext );
+}
+
+// -----------------------------------------------------------------------------
+void OConnection::throwSQLException( const sal_uInt16 _nErrorResourceId, const Reference< XInterface >& _rxContext )
+{
+    ErrorDescriptor aError;
+    aError.setResId( _nErrorResourceId );
+    throwSQLException( aError, _rxContext );
+}
+
+} } // namespace connectivity::mork
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/mork/MConnection.hxx b/connectivity/source/drivers/mork/MConnection.hxx
new file mode 100644
index 0000000..5dd1a78
--- /dev/null
+++ b/connectivity/source/drivers/mork/MConnection.hxx
@@ -0,0 +1,120 @@
+/* -*- 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/.
+ */
+
+#ifndef CONNECTIVITY_SCONNECTION_HXX
+#define CONNECTIVITY_SCONNECTION_HXX
+
+#include "connectivity/CommonTools.hxx"
+
+#include "connectivity/OSubComponent.hxx"
+#include "TConnection.hxx"
+#include "MColumnAlias.hxx"
+
+#include <com/sun/star/beans/PropertyValue.hpp>
+#include <com/sun/star/sdbc/SQLWarning.hpp>
+#include <com/sun/star/sdbcx/XTablesSupplier.hpp>
+
+#include <cppuhelper/weakref.hxx>
+
+#include <memory>
+
+// do we want here namespace too?
+class MorkParser;
+
+namespace connectivity
+{
+    namespace mork
+    {
+        namespace css = com::sun::star;
+
+        class MorkDriver;
+        class ProfileAccess;
+        class ErrorDescriptor;
+
+        typedef connectivity::OMetaConnection OConnection_BASE; // implements basics and text encoding
+
+        class OConnection : public OConnection_BASE,
+                            public connectivity::OSubComponent<OConnection, OConnection_BASE>
+        {
+            friend class connectivity::OSubComponent<OConnection, OConnection_BASE>;
+
+        protected:
+            //====================================================================
+            // Data attributes
+            //====================================================================
+            ::com::sun::star::sdbc::SQLWarning      m_aLastWarning;
+            MorkDriver*                             m_pDriver;      //  Pointer to the owning
+                                                                    //  driver object
+            OColumnAlias    m_aColumnAlias;
+            // Profile Access
+            ProfileAccess* m_pProfileAccess;
+            // Mork Parser
+            MorkParser* m_pMork;
+            // Store Catalog
+            ::com::sun::star::uno::Reference< ::com::sun::star::sdbcx::XTablesSupplier> m_xCatalog;
+
+        public:
+            virtual void construct( const ::rtl::OUString& url,const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& info) throw(::com::sun::star::sdbc::SQLException);
+            OConnection(MorkDriver* const driver);
+            virtual ~OConnection();
+
+            MorkDriver* getDriver() {return m_pDriver;};
+            MorkParser* getMorkParser() {return m_pMork;};
+            void closeAllStatements () throw( ::com::sun::star::sdbc::SQLException);
+
+            // OComponentHelper
+            virtual void SAL_CALL disposing(void);
+            // XInterface
+            virtual void SAL_CALL release() throw();
+
+            // XServiceInfo
+            DECLARE_SERVICE_INFO();
+            // XConnection
+            virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XStatement > SAL_CALL createStatement(  ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
+            virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XPreparedStatement > SAL_CALL prepareStatement( const ::rtl::OUString& sql ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
+            virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XPreparedStatement > SAL_CALL prepareCall( const ::rtl::OUString& sql ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
+            virtual ::rtl::OUString SAL_CALL nativeSQL( const ::rtl::OUString& sql ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
+            virtual void SAL_CALL setAutoCommit( sal_Bool autoCommit ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
+            virtual sal_Bool SAL_CALL getAutoCommit(  ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
+            virtual void SAL_CALL commit(  ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
+            virtual void SAL_CALL rollback(  ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
+            virtual sal_Bool SAL_CALL isClosed(  ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
+            virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDatabaseMetaData > SAL_CALL getMetaData(  ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
+            virtual void SAL_CALL setReadOnly( sal_Bool readOnly ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
+            virtual sal_Bool SAL_CALL isReadOnly(  ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
+            virtual void SAL_CALL setCatalog( const ::rtl::OUString& catalog ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
+            virtual ::rtl::OUString SAL_CALL getCatalog(  ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
+            virtual void SAL_CALL setTransactionIsolation( sal_Int32 level ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
+            virtual sal_Int32 SAL_CALL getTransactionIsolation(  ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
+            virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > SAL_CALL getTypeMap(  ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
+            virtual void SAL_CALL setTypeMap( const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess >& typeMap ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
+            // XCloseable
+            virtual void SAL_CALL close(  ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
+            // XWarningsSupplier
+            virtual ::com::sun::star::uno::Any SAL_CALL getWarnings(  ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
+            virtual void SAL_CALL clearWarnings() throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
+
+            const OColumnAlias & getColumnAlias() const   { return (m_aColumnAlias); }
+
+            static ::rtl::OUString getDriverImplementationName();
+
+            sal_Bool getForceLoadTables() {return true;}
+
+            // Added to enable me to use SQLInterpreter which requires an
+            // XNameAccess i/f to access tables.
+            ::com::sun::star::uno::Reference< ::com::sun::star::sdbcx::XTablesSupplier > SAL_CALL createCatalog();
+
+            void throwSQLException( const ErrorDescriptor& _rError, const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxContext );
+            void throwSQLException( const sal_uInt16 _nErrorResourceId, const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxContext );
+        };
+    }
+}
+#endif // CONNECTIVITY_SCONNECTION_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/mork/MDatabaseMetaData.cxx b/connectivity/source/drivers/mork/MDatabaseMetaData.cxx
new file mode 100644
index 0000000..fce0330
--- /dev/null
+++ b/connectivity/source/drivers/mork/MDatabaseMetaData.cxx
@@ -0,0 +1,1034 @@
+/* -*- 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/.
+ */
+
+#include "MDatabaseMetaData.hxx"
+#include "FDatabaseMetaDataResultSet.hxx"
+#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 <connectivity/FValue.hxx>
+#include <com/sun/star/sdbc/ColumnValue.hpp>
+#include <com/sun/star/sdbc/ColumnSearch.hpp>
+#include "resource/common_res.hrc"
+#include <vector>
+
+#include "MDatabaseMetaDataHelper.hxx"
+#include "MorkParser.hxx"
+#include "connectivity/dbtools.hxx"
+
+#if 0
+#if OSL_DEBUG_LEVEL > 0
+# define OUtoCStr( x ) ( ::rtl::OUStringToOString ( (x), RTL_TEXTENCODING_ASCII_US).getStr())
+#else /* OSL_DEBUG_LEVEL */
+# define OUtoCStr( x ) ("dummy")
+#endif /* OSL_DEBUG_LEVEL */
+#endif
+
+using namespace dbtools;
+using namespace connectivity::mork;
+using namespace connectivity;
+
+using namespace com::sun::star::uno;
+using namespace com::sun::star::lang;
+using namespace com::sun::star::beans;
+using namespace com::sun::star::sdbc;
+using namespace com::sun::star::sdbcx;
+
+
+namespace connectivity
+{
+    namespace mork
+    {
+        static sal_Int32 const s_nCOLUMN_SIZE = 256;
+        static sal_Int32 const s_nDECIMAL_DIGITS = 0;
+        static sal_Int32 const s_nNULLABLE = 1;
+        static sal_Int32 const s_nCHAR_OCTET_LENGTH = 65535;
+    }
+}
+
+ODatabaseMetaData::ODatabaseMetaData(OConnection* _pCon)
+                        : ::connectivity::ODatabaseMetaDataBase(_pCon,_pCon->getConnectionInfo())
+                        ,m_pConnection(_pCon)
+{
+    OSL_ENSURE(m_pConnection,"ODatabaseMetaData::ODatabaseMetaData: No connection set!");
+    m_pMetaDataHelper = new MDatabaseMetaDataHelper();
+}
+// -------------------------------------------------------------------------
+ODatabaseMetaData::~ODatabaseMetaData()
+{
+    delete m_pMetaDataHelper;
+}
+
+// -------------------------------------------------------------------------
+ODatabaseMetaDataResultSet::ORows& SAL_CALL ODatabaseMetaData::getColumnRows(
+        const ::rtl::OUString& tableNamePattern,
+        const ::rtl::OUString& columnNamePattern ) throw(SQLException)
+{
+    SAL_INFO("connectivity.mork", "=> ODatabaseMetaData::getColumnRows()" );
+    SAL_INFO("connectivity.mork", "tableNamePattern: " << tableNamePattern);
+    SAL_INFO("connectivity.mork", "columnNamePattern: " << columnNamePattern);
+
+    static ODatabaseMetaDataResultSet::ORows aRows;
+    ODatabaseMetaDataResultSet::ORow aRow(19);
+    aRows.clear();
+
+    ::osl::MutexGuard aGuard( m_aMutex );
+    ::std::vector< ::rtl::OUString > tables;
+    if (!m_pMetaDataHelper->getTableStrings(m_pConnection, tables))
+    {
+        ::connectivity::SharedResources aResources;
+        // TODO:
+        // get better message here?
+        const ::rtl::OUString sMessage = aResources.getResourceString(STR_UNKNOWN_COLUMN_TYPE);
+        ::dbtools::throwGenericSQLException(sMessage ,*this);
+    }
+
+    // ****************************************************
+    // Some entries in a row never change, so set them now
+    // ****************************************************
+
+    // Catalog
+    aRow[1] = new ORowSetValueDecorator(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("")));
+    // Schema
+    aRow[2] = new ORowSetValueDecorator(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("")));
+    // DATA_TYPE
+    aRow[5] = new ORowSetValueDecorator(static_cast<sal_Int16>(DataType::VARCHAR));
+    // TYPE_NAME, not used
+    aRow[6] = new ORowSetValueDecorator(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("VARCHAR")));
+    // COLUMN_SIZE
+    aRow[7] = new ORowSetValueDecorator(s_nCOLUMN_SIZE);
+    // BUFFER_LENGTH, not used
+    aRow[8] = ODatabaseMetaDataResultSet::getEmptyValue();
+    // DECIMAL_DIGITS.
+    aRow[9] = new ORowSetValueDecorator(s_nDECIMAL_DIGITS);
+    // NUM_PREC_RADIX
+    aRow[10] = new ORowSetValueDecorator((sal_Int32)10);
+    // NULLABLE
+    aRow[11] = new ORowSetValueDecorator(s_nNULLABLE);
+    // REMARKS
+    aRow[12] = ODatabaseMetaDataResultSet::getEmptyValue();
+    // COULUMN_DEF, not used
+    aRow[13] = ODatabaseMetaDataResultSet::getEmptyValue();
+    // SQL_DATA_TYPE, not used
+    aRow[14] = ODatabaseMetaDataResultSet::getEmptyValue();
+    // SQL_DATETIME_SUB, not used
+    aRow[15] = ODatabaseMetaDataResultSet::getEmptyValue();
+    // CHAR_OCTET_LENGTH, refer to [5]
+    aRow[16] = new ORowSetValueDecorator(s_nCHAR_OCTET_LENGTH);
+    // IS_NULLABLE
+    aRow[18] = new ORowSetValueDecorator(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("YES")));
+
+    // Iterate over all tables
+    for(size_t j = 0; j < tables.size(); j++ ) {
+        if(match(tableNamePattern, tables[j],'\0')) {
+            // TABLE_NAME
+            aRow[3] = new ORowSetValueDecorator( tables[j] );
+
+            const OColumnAlias& colNames = m_pConnection->getColumnAlias();
+
+            SAL_INFO("connectivity.mork", "\tTableName = : " << tables[j]);
+            // Iterate over all collumns in the table.
+            for (   OColumnAlias::AliasMap::const_iterator compare = colNames.begin();
+                    compare != colNames.end();
+                    ++compare
+                )
+            {
+                if ( match( columnNamePattern, compare->first, '\0' ) )
+                {
+//                    OSL_TRACE( "\t\t\tColumnName = %s;", OUtoCStr( compare->first ) );
+                    SAL_INFO("connectivity.mork", "\t\tColumnNam : " << compare->first);
+
+                    // COLUMN_NAME
+                    aRow[4] = new ORowSetValueDecorator( compare->first );
+                    // ORDINAL_POSITION
+                    aRow[17] = new ORowSetValueDecorator( static_cast< sal_Int32 >( compare->second.columnPosition ) + 1 );
+                    aRows.push_back(aRow);
+                }
+            }
+        }
+    }
+    return( aRows );
+}
+// -------------------------------------------------------------------------
+::rtl::OUString ODatabaseMetaData::impl_getCatalogSeparator_throw(  )
+{
+    return ::rtl::OUString();
+}
+// -------------------------------------------------------------------------
+sal_Int32 SAL_CALL ODatabaseMetaData::getMaxBinaryLiteralLength(  ) throw(SQLException, RuntimeException)
+{
+    sal_Int32 nValue = 65535; // 0 means no limit
+    return nValue;
+}
+// -------------------------------------------------------------------------
+sal_Int32 SAL_CALL ODatabaseMetaData::getMaxRowSize(  ) throw(SQLException, RuntimeException)
+{
+    sal_Int32 nValue = 0; // 0 means no limit
+    return nValue;
+}
+// -------------------------------------------------------------------------
+sal_Int32 SAL_CALL ODatabaseMetaData::getMaxCatalogNameLength(  ) throw(SQLException, RuntimeException)
+{
+    sal_Int32 nValue = 0; // 0 means no limit
+    return nValue;
+}
+// -------------------------------------------------------------------------
+sal_Int32 SAL_CALL ODatabaseMetaData::getMaxCharLiteralLength(  ) throw(SQLException, RuntimeException)
+{
+    sal_Int32 nValue = 254; // 0 means no limit
+    return nValue;
+}
+// -------------------------------------------------------------------------
+sal_Int32 SAL_CALL ODatabaseMetaData::getMaxColumnNameLength(  ) throw(SQLException, RuntimeException)
+{
+    sal_Int32 nValue = 20; // 0 means no limit
+    return nValue;
+}
+// -------------------------------------------------------------------------
+sal_Int32 SAL_CALL ODatabaseMetaData::getMaxColumnsInIndex(  ) throw(SQLException, RuntimeException)
+{
+    sal_Int32 nValue = 0; // 0 means no limit
+    return nValue;
+}
+// -------------------------------------------------------------------------
+sal_Int32 SAL_CALL ODatabaseMetaData::getMaxCursorNameLength(  ) throw(SQLException, RuntimeException)
+{
+    sal_Int32 nValue = 0; // 0 means no limit
+    return nValue;
+}
+// -------------------------------------------------------------------------
+sal_Int32 SAL_CALL ODatabaseMetaData::getMaxConnections(  ) throw(SQLException, RuntimeException)
+{
+    sal_Int32 nValue = 0; // 0 means no limit
+    return nValue;
+}
+// -------------------------------------------------------------------------
+sal_Int32 SAL_CALL ODatabaseMetaData::getMaxColumnsInTable(  ) throw(SQLException, RuntimeException)
+{
+    sal_Int32 nValue = 0; // 0 means no limit
+    return nValue;
+}
+// -------------------------------------------------------------------------
+sal_Int32 ODatabaseMetaData::impl_getMaxStatements_throw(  )
+{
+    return 0;
+}
+// -------------------------------------------------------------------------
+sal_Int32 SAL_CALL ODatabaseMetaData::getMaxTableNameLength(  ) throw(SQLException, RuntimeException)
+{
+    sal_Int32 nValue = 0; // 0 means no limit
+    return nValue;
+}
+// -------------------------------------------------------------------------
+sal_Int32 ODatabaseMetaData::impl_getMaxTablesInSelect_throw(  )
+{
+    // We only support a single table
+    return 1;
+}
+// -------------------------------------------------------------------------
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::doesMaxRowSizeIncludeBlobs(  ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::storesLowerCaseQuotedIdentifiers(  ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::storesLowerCaseIdentifiers(  ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool ODatabaseMetaData::impl_storesMixedCaseQuotedIdentifiers_throw(  )
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::storesMixedCaseIdentifiers(  ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::storesUpperCaseQuotedIdentifiers(  ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::storesUpperCaseIdentifiers(  ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool ODatabaseMetaData::impl_supportsAlterTableWithAddColumn_throw(  )
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool ODatabaseMetaData::impl_supportsAlterTableWithDropColumn_throw(  )
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Int32 SAL_CALL ODatabaseMetaData::getMaxIndexLength(  ) throw(SQLException, RuntimeException)
+{
+    sal_Int32 nValue = 0; // 0 means no limit
+    return nValue;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::supportsNonNullableColumns(  ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+::rtl::OUString SAL_CALL ODatabaseMetaData::getCatalogTerm(  ) throw(SQLException, RuntimeException)
+{
+    ::rtl::OUString aVal;
+    return aVal;
+}
+// -------------------------------------------------------------------------
+::rtl::OUString ODatabaseMetaData::impl_getIdentifierQuoteString_throw(  )
+{
+    // normally this is "
+    return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("\""));
+}
+// -------------------------------------------------------------------------
+::rtl::OUString SAL_CALL ODatabaseMetaData::getExtraNameCharacters(  ) throw(SQLException, RuntimeException)
+{
+    ::rtl::OUString aVal;
+    return aVal;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::supportsDifferentTableCorrelationNames(  ) throw(SQLException, RuntimeException)
+{
+    return sal_True;
+}
+// -------------------------------------------------------------------------
+sal_Bool ODatabaseMetaData::impl_isCatalogAtStart_throw(  )
+{
+    return sal_True;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::dataDefinitionIgnoredInTransactions(  ) throw(SQLException, RuntimeException)
+{
+    return sal_True;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::dataDefinitionCausesTransactionCommit(  ) throw(SQLException, RuntimeException)
+{
+    return sal_True;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::supportsDataManipulationTransactionsOnly(  ) throw(SQLException, RuntimeException)
+{
+    //We support create table
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::supportsDataDefinitionAndDataManipulationTransactions(  ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::supportsPositionedDelete(  ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::supportsPositionedUpdate(  ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::supportsOpenStatementsAcrossRollback(  ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::supportsOpenStatementsAcrossCommit(  ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::supportsOpenCursorsAcrossCommit(  ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::supportsOpenCursorsAcrossRollback(  ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::supportsTransactionIsolationLevel( sal_Int32 /*level*/ ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool ODatabaseMetaData::impl_supportsSchemasInDataManipulation_throw(  )
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::supportsANSI92FullSQL(  ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::supportsANSI92EntryLevelSQL(  ) throw(SQLException, RuntimeException)
+{
+    return sal_True; // should be supported at least
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::supportsIntegrityEnhancementFacility(  ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::supportsSchemasInIndexDefinitions(  ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool ODatabaseMetaData::impl_supportsSchemasInTableDefinitions_throw(  )
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool ODatabaseMetaData::impl_supportsCatalogsInTableDefinitions_throw(  )
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::supportsCatalogsInIndexDefinitions(  ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool ODatabaseMetaData::impl_supportsCatalogsInDataManipulation_throw(  )
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::supportsOuterJoins(  ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Int32 SAL_CALL ODatabaseMetaData::getMaxStatementLength(  ) throw(SQLException, RuntimeException)
+{
+    return 0;// 0 means no limit
+}
+// -------------------------------------------------------------------------
+sal_Int32 SAL_CALL ODatabaseMetaData::getMaxProcedureNameLength(  ) throw(SQLException, RuntimeException)
+{
+    sal_Int32 nValue = 0; // 0 means no limit
+    return nValue;
+}
+// -------------------------------------------------------------------------
+sal_Int32 SAL_CALL ODatabaseMetaData::getMaxSchemaNameLength(  ) throw(SQLException, RuntimeException)
+{
+    sal_Int32 nValue = 0; // 0 means no limit
+    return nValue;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::supportsTransactions(  ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::allProceduresAreCallable(  ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::supportsStoredProcedures(  ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::supportsSelectForUpdate(  ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::allTablesAreSelectable(  ) throw(SQLException, RuntimeException)
+{
+    // We allow you to select from any table.
+    return sal_True;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::isReadOnly(  ) throw(SQLException, RuntimeException)
+{
+    //we support insert/update/delete now
+    //But we have to set this to return sal_True otherwise the UI will add create "table/edit table"
+    //entry to the popup menu. We should avoid them.
+    return sal_True;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::usesLocalFiles(  ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::usesLocalFilePerTable(  ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::supportsTypeConversion(  ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::nullPlusNonNullIsNull(  ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::supportsColumnAliasing(  ) throw(SQLException, RuntimeException)
+{
+    // Support added for this.
+    return sal_True;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::supportsTableCorrelationNames(  ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::supportsConvert( sal_Int32 /*fromType*/, sal_Int32 /*toType*/ ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::supportsExpressionsInOrderBy(  ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::supportsGroupBy(  ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::supportsGroupByBeyondSelect(  ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::supportsGroupByUnrelated(  ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::supportsMultipleTransactions(  ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::supportsMultipleResultSets(  ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::supportsLikeEscapeClause(  ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::supportsOrderByUnrelated(  ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::supportsUnion(  ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::supportsUnionAll(  ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::supportsMixedCaseIdentifiers(  ) throw(SQLException, RuntimeException)
+{
+    return sal_True;
+}
+// -------------------------------------------------------------------------
+sal_Bool ODatabaseMetaData::impl_supportsMixedCaseQuotedIdentifiers_throw(  )
+{
+    // Any case may be used
+    return sal_True;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::nullsAreSortedAtEnd(  ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::nullsAreSortedAtStart(  ) throw(SQLException, RuntimeException)
+{
+    return sal_True;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::nullsAreSortedHigh(  ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::nullsAreSortedLow(  ) throw(SQLException, RuntimeException)
+{
+    return sal_True;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::supportsSchemasInProcedureCalls(  ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::supportsSchemasInPrivilegeDefinitions(  ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::supportsCatalogsInProcedureCalls(  ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::supportsCatalogsInPrivilegeDefinitions(  ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::supportsCorrelatedSubqueries(  ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::supportsSubqueriesInComparisons(  ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::supportsSubqueriesInExists(  ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::supportsSubqueriesInIns(  ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::supportsSubqueriesInQuantifieds(  ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+sal_Bool SAL_CALL ODatabaseMetaData::supportsANSI92IntermediateSQL(  ) throw(SQLException, RuntimeException)
+{
+    return sal_False;
+}
+// -------------------------------------------------------------------------
+::rtl::OUString SAL_CALL ODatabaseMetaData::getURL(  ) throw(SQLException, RuntimeException)
+{
+    ::osl::MutexGuard aGuard( m_aMutex );
+
+    return m_pConnection->getURL();
+}
+// -------------------------------------------------------------------------
+::rtl::OUString SAL_CALL ODatabaseMetaData::getUserName(  ) throw(SQLException, RuntimeException)
+{
+    ::rtl::OUString aValue;
+    return aValue;
+}
+// -------------------------------------------------------------------------
+::rtl::OUString SAL_CALL ODatabaseMetaData::getDriverName(  ) throw(SQLException, RuntimeException)
+{
+    ::rtl::OUString aValue;
+    return aValue;
+}
+// -------------------------------------------------------------------------
+::rtl::OUString SAL_CALL ODatabaseMetaData::getDriverVersion() throw(SQLException, RuntimeException)
+{
+    ::rtl::OUString aValue = ::rtl::OUString::valueOf((sal_Int32)1);
+    return aValue;
+}
+// -------------------------------------------------------------------------
+::rtl::OUString SAL_CALL ODatabaseMetaData::getDatabaseProductVersion(  ) throw(SQLException, RuntimeException)
+{
+    ::rtl::OUString aValue = ::rtl::OUString::valueOf((sal_Int32)0);
+    return aValue;
+}
+// -------------------------------------------------------------------------
+::rtl::OUString SAL_CALL ODatabaseMetaData::getDatabaseProductName(  ) throw(SQLException, RuntimeException)
+{
+    ::rtl::OUString aValue;
+    return aValue;
+}
+// -------------------------------------------------------------------------
+::rtl::OUString SAL_CALL ODatabaseMetaData::getProcedureTerm(  ) throw(SQLException, RuntimeException)
+{
+    ::rtl::OUString aValue;
+    return aValue;
+}
+// -------------------------------------------------------------------------
+::rtl::OUString SAL_CALL ODatabaseMetaData::getSchemaTerm(  ) throw(SQLException, RuntimeException)
+{
+    ::rtl::OUString aValue;
+    return aValue;
+}
+// -------------------------------------------------------------------------
+sal_Int32 SAL_CALL ODatabaseMetaData::getDriverMajorVersion(  ) throw(RuntimeException)
+{
+    return 1;
+}
+// -------------------------------------------------------------------------
+sal_Int32 SAL_CALL ODatabaseMetaData::getDefaultTransactionIsolation(  ) throw(SQLException, RuntimeException)
+{
+    return TransactionIsolation::NONE;
+}
+// -------------------------------------------------------------------------
+sal_Int32 SAL_CALL ODatabaseMetaData::getDriverMinorVersion(  ) throw(RuntimeException)
+{
+    return 0;
+}
+// -------------------------------------------------------------------------
+::rtl::OUString SAL_CALL ODatabaseMetaData::getSQLKeywords(  ) throw(SQLException, RuntimeException)
+{
+    ::rtl::OUString aValue;
+    return aValue;
+}
+// -------------------------------------------------------------------------

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list