Create Catalog to deal with sdbcx details. (firebird-sdbc)

Change-Id: I521db652157e6b6da79e70f3731b6eddfc2bab1d
diff --git a/connectivity/Library_firebird_sdbc.mk b/connectivity/Library_firebird_sdbc.mk
index 066d60ad..577c169 100644
--- a/connectivity/Library_firebird_sdbc.mk
+++ b/connectivity/Library_firebird_sdbc.mk
@@ -38,6 +38,7 @@ $(eval $(call gb_Library_set_componentfile,firebird_sdbc,connectivity/source/dri

$(eval $(call gb_Library_add_exception_objects,firebird_sdbc,\
    connectivity/source/drivers/firebird/Blob \
    connectivity/source/drivers/firebird/Catalog \
    connectivity/source/drivers/firebird/Columns \
    connectivity/source/drivers/firebird/Connection \
    connectivity/source/drivers/firebird/DatabaseMetaData \
diff --git a/connectivity/source/drivers/firebird/Catalog.cxx b/connectivity/source/drivers/firebird/Catalog.cxx
new file mode 100644
index 0000000..552889a
--- /dev/null
+++ b/connectivity/source/drivers/firebird/Catalog.cxx
@@ -0,0 +1,47 @@
/* -*- 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 "Catalog.hxx"

using namespace ::connectivity::firebird;

using namespace ::com::sun::star;
using namespace ::com::sun::star::sdbc;

Catalog::Catalog(const uno::Reference< XConnection >& rConnection):
    OCatalog(rConnection),
    m_xConnection(rConnection)
{
}

//----- OCatalog -------------------------------------------------------------
void Catalog::refreshTables()
{
    // TODO: implement me.
    // Sets m_pTables (OCatalog)
}

void Catalog::refreshViews()
{
    // TODO: implement me.
    // Sets m_pViews (OCatalog)
}

//----- IRefreshableGroups ---------------------------------------------------
void Catalog::refreshGroups()
{
    // TODO: implement me
}

//----- IRefreshableUsers ----------------------------------------------------
void Catalog::refreshUsers()
{
    // TODO: implement me
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
\ No newline at end of file
diff --git a/connectivity/source/drivers/firebird/Catalog.hxx b/connectivity/source/drivers/firebird/Catalog.hxx
new file mode 100644
index 0000000..7281b79
--- /dev/null
+++ b/connectivity/source/drivers/firebird/Catalog.hxx
@@ -0,0 +1,43 @@
/* -*- 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_FIREBIRD_CATALOG_HXX
#define CONNECTIVITY_FIREBIRD_CATALOG_HXX

#include <connectivity/sdbcx/VCatalog.hxx>

namespace connectivity
{
    namespace firebird
    {
        class Catalog: public ::connectivity::sdbcx::OCatalog
        {
        protected:
            ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >
                m_xConnection;

        public:
            Catalog(const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >& rConnection);

            // OCatalog
            virtual void refreshTables();
            virtual void refreshViews();

            // IRefreshableGroups
            virtual void refreshGroups();

            // IRefreshableUsers
            virtual void refreshUsers();
        };
    } // namespace firebird
} // namespace connectivity

#endif //CONNECTIVITY_FIREBIRD_CATALOG_HXX

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
\ No newline at end of file
diff --git a/connectivity/source/drivers/firebird/Connection.cxx b/connectivity/source/drivers/firebird/Connection.cxx
index 9dbc87f..de795eb 100644
--- a/connectivity/source/drivers/firebird/Connection.cxx
+++ b/connectivity/source/drivers/firebird/Connection.cxx
@@ -17,6 +17,7 @@
 *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
 */

#include "Catalog.hxx"
#include "Connection.hxx"
#include "DatabaseMetaData.hxx"
#include "Driver.hxx"
@@ -67,6 +68,7 @@ using namespace ::com::sun::star::frame;
using namespace ::com::sun::star::io;
using namespace ::com::sun::star::lang;
using namespace ::com::sun::star::sdbc;
using namespace ::com::sun::star::sdbcx;
using namespace ::com::sun::star::uno;

const OUString OConnection::sDBLocation( "firebird.fdb" );
@@ -86,7 +88,8 @@ OConnection::OConnection(FirebirdDriver*    _pDriver)
                         m_bReadOnly(sal_False),
                         m_aTransactionIsolation(TransactionIsolation::REPEATABLE_READ),
                         m_DBHandler(0),
                         m_transactionHandle(0)
                         m_transactionHandle(0),
                         m_xCatalog(0)
{
    SAL_INFO("connectivity.firebird", "OConnection().");

@@ -762,12 +765,22 @@ void OConnection::clearStatements()
    m_aStatements.clear();
}

//----- XTablesSupplier ------------------------------------------------------
uno::Reference< XNameAccess > SAL_CALL OConnection::getTables()
    throw (RuntimeException)
uno::Reference< XTablesSupplier > OConnection::createCatalog()
{
    return new Tables(getMetaData(),
                      *this,
                      m_aMutex);
    MutexGuard aGuard(m_aMutex);

    // m_xCatalog is a weak reference. Reuse it if it still exists.
    Reference< XTablesSupplier > xCatalog = m_xCatalog;
    if (xCatalog.is())
    {
        return xCatalog;
    }
    else
    {
        xCatalog = new Catalog(this);
        m_xCatalog = xCatalog;
        return m_xCatalog;
    }

}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/firebird/Connection.hxx b/connectivity/source/drivers/firebird/Connection.hxx
index d7a4f37..ca6fae6 100644
--- a/connectivity/source/drivers/firebird/Connection.hxx
+++ b/connectivity/source/drivers/firebird/Connection.hxx
@@ -27,7 +27,7 @@

#include <connectivity/CommonTools.hxx>
#include <connectivity/OSubComponent.hxx>
#include <cppuhelper/compbase5.hxx>
#include <cppuhelper/compbase4.hxx>
#include <cppuhelper/weakref.hxx>
#include <map>
#include <OTypeInfo.hxx>
@@ -49,11 +49,10 @@ namespace connectivity
    namespace firebird
    {

        typedef ::cppu::WeakComponentImplHelper5< ::com::sun::star::document::XDocumentEventListener,
        typedef ::cppu::WeakComponentImplHelper4< ::com::sun::star::document::XDocumentEventListener,
                                                  ::com::sun::star::lang::XServiceInfo,
                                                  ::com::sun::star::sdbc::XConnection,
                                                  ::com::sun::star::sdbc::XWarningsSupplier,
                                                  ::com::sun::star::sdbcx::XTablesSupplier
                                                  ::com::sun::star::sdbc::XWarningsSupplier
                                                > OConnection_BASE;

        class OStatementCommonBase;
@@ -109,7 +108,10 @@ namespace connectivity
            isc_db_handle                           m_DBHandler;
            isc_tr_handle                           m_transactionHandle;

            ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage > m_xEmbeddedStorage;
            ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >
                m_xEmbeddedStorage;
            ::com::sun::star::uno::WeakReference< ::com::sun::star::sdbcx::XTablesSupplier>
                m_xCatalog;

            void                    buildTypeInfo() throw( ::com::sun::star::sdbc::SQLException);

@@ -161,13 +163,6 @@ namespace connectivity
            // css.lang.XEventListener
            virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source ) throw (::com::sun::star::uno::RuntimeException);

            // XTablesSupplier
            virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess >
                SAL_CALL getTables()
                throw(::com::sun::star::uno::RuntimeException);



            inline ::rtl::OUString  getUserName()       const { return m_sUser; }
            inline isc_db_handle&    getDBHandle()       { return m_DBHandler; }
            inline FirebirdDriver*  getDriver()         const { return m_pDriver;}
@@ -185,6 +180,13 @@ namespace connectivity
            ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XBlob>
                createBlob(ISC_QUAD* pBlobID)
                throw(::com::sun::star::sdbc::SQLException);

            /**
             * Create and/or connect to the sdbcx Catalog. This is completely
             * unrelated to the SQL "Catalog".
             */
            virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbcx::XTablesSupplier >
                createCatalog();
        };
    }
}
diff --git a/connectivity/source/drivers/firebird/Driver.cxx b/connectivity/source/drivers/firebird/Driver.cxx
index 41c31d2..2b9e656 100644
--- a/connectivity/source/drivers/firebird/Driver.cxx
+++ b/connectivity/source/drivers/firebird/Driver.cxx
@@ -174,7 +174,8 @@ uno::Reference< XTablesSupplier > SAL_CALL FirebirdDriver::getDataDefinitionByCo
                                    const uno::Reference< XConnection >& rConnection)
    throw(SQLException, RuntimeException)
{
    return uno::Reference< XTablesSupplier >(rConnection, UNO_QUERY);
    OConnection* pConnection = static_cast< OConnection* >(rConnection.get());
    return uno::Reference< XTablesSupplier >(pConnection->createCatalog(), UNO_QUERY);
}

uno::Reference< XTablesSupplier > SAL_CALL FirebirdDriver::getDataDefinitionByURL(