[Libreoffice-commits] core.git: connectivity/Library_writer.mk connectivity/source

Miklos Vajna vmiklos at collabora.co.uk
Tue Jul 18 13:56:26 UTC 2017


 connectivity/Library_writer.mk                            |    1 
 connectivity/source/drivers/writer/WPreparedStatement.cxx |    5 
 connectivity/source/drivers/writer/WResultSet.cxx         |  165 ++++++++++++++
 connectivity/source/inc/writer/WResultSet.hxx             |   86 +++++++
 4 files changed, 255 insertions(+), 2 deletions(-)

New commits:
commit a93c89894feb663df37609c95d4db523120c0bc1
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Tue Jul 18 10:53:15 2017 +0200

    connectivity writer driver: add ResultSet implementation
    
    Now column headers and table data show up on the UI.
    
    Change-Id: I84100c5a7ac65c3be1e985be8ae7195835c45145
    Reviewed-on: https://gerrit.libreoffice.org/40128
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Miklos Vajna <vmiklos at collabora.co.uk>

diff --git a/connectivity/Library_writer.mk b/connectivity/Library_writer.mk
index c5cd2ddf3979..99db1f98529f 100644
--- a/connectivity/Library_writer.mk
+++ b/connectivity/Library_writer.mk
@@ -43,6 +43,7 @@ $(eval $(call gb_Library_add_exception_objects,writer,\
 	connectivity/source/drivers/writer/WDatabaseMetaData \
 	connectivity/source/drivers/writer/WDriver \
 	connectivity/source/drivers/writer/WPreparedStatement \
+	connectivity/source/drivers/writer/WResultSet \
 	connectivity/source/drivers/writer/WTable \
 	connectivity/source/drivers/writer/WTables \
 	connectivity/source/drivers/writer/Wservices \
diff --git a/connectivity/source/drivers/writer/WPreparedStatement.cxx b/connectivity/source/drivers/writer/WPreparedStatement.cxx
index 5dffe6e9b2b3..9328d15be765 100644
--- a/connectivity/source/drivers/writer/WPreparedStatement.cxx
+++ b/connectivity/source/drivers/writer/WPreparedStatement.cxx
@@ -19,6 +19,8 @@
 
 #include "writer/WPreparedStatement.hxx"
 
+#include "writer/WResultSet.hxx"
+
 using namespace com::sun::star;
 
 namespace connectivity
@@ -28,8 +30,7 @@ namespace writer
 
 file::OResultSet* OWriterPreparedStatement::createResultSet()
 {
-    SAL_WARN("connectivity.writer", "TODO implement OWriterPreparedStatement::createResultSet");
-    return nullptr;
+    return new OWriterResultSet(this, m_aSQLIterator);
 }
 
 IMPLEMENT_SERVICE_INFO(OWriterPreparedStatement,"com.sun.star.sdbc.driver.writer.PreparedStatement", "com.sun.star.sdbc.PreparedStatement");
diff --git a/connectivity/source/drivers/writer/WResultSet.cxx b/connectivity/source/drivers/writer/WResultSet.cxx
new file mode 100644
index 000000000000..93919657aad5
--- /dev/null
+++ b/connectivity/source/drivers/writer/WResultSet.cxx
@@ -0,0 +1,165 @@
+/* -*- 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 "writer/WResultSet.hxx"
+
+#include <com/sun/star/sdbcx/CompareBookmark.hpp>
+#include <com/sun/star/lang/DisposedException.hpp>
+#include <comphelper/sequence.hxx>
+#include <comphelper/types.hxx>
+#include <cppuhelper/supportsservice.hxx>
+#include <connectivity/dbexception.hxx>
+
+using namespace com::sun::star;
+
+namespace connectivity
+{
+namespace writer
+{
+
+OWriterResultSet::OWriterResultSet(file::OStatement_Base* pStmt, connectivity::OSQLParseTreeIterator& _aSQLIterator)
+    : file::OResultSet(pStmt,_aSQLIterator)
+    ,m_bBookmarkable(true)
+{
+    registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISBOOKMARKABLE), PROPERTY_ID_ISBOOKMARKABLE, beans::PropertyAttribute::READONLY,&m_bBookmarkable, cppu::UnoType<bool>::get());
+}
+
+OUString SAL_CALL OWriterResultSet::getImplementationName()
+{
+    return OUString("com.sun.star.sdbcx.writer.ResultSet");
+}
+
+uno::Sequence<OUString> SAL_CALL OWriterResultSet::getSupportedServiceNames()
+{
+    uno::Sequence<OUString> aSupported(2);
+    aSupported[0] = "com.sun.star.sdbc.ResultSet";
+    aSupported[1] = "com.sun.star.sdbcx.ResultSet";
+    return aSupported;
+}
+
+sal_Bool SAL_CALL OWriterResultSet::supportsService(const OUString& _rServiceName)
+{
+    return cppu::supportsService(this, _rServiceName);
+}
+
+uno::Any SAL_CALL OWriterResultSet::queryInterface(const uno::Type& rType)
+{
+    uno::Any aRet = OResultSet::queryInterface(rType);
+    return aRet.hasValue() ? aRet : OWriterResultSet_BASE::queryInterface(rType);
+}
+
+uno::Sequence<uno::Type> SAL_CALL OWriterResultSet::getTypes()
+{
+    return ::comphelper::concatSequences(OResultSet::getTypes(), OWriterResultSet_BASE::getTypes());
+}
+
+uno::Any SAL_CALL OWriterResultSet::getBookmark()
+{
+    ::osl::MutexGuard aGuard(m_aMutex);
+    checkDisposed(file::OResultSet_BASE::rBHelper.bDisposed);
+
+    return uno::makeAny((sal_Int32)(m_aRow->get())[0]->getValue());
+}
+
+sal_Bool SAL_CALL OWriterResultSet::moveToBookmark(const uno::Any& bookmark)
+{
+    ::osl::MutexGuard aGuard(m_aMutex);
+    checkDisposed(file::OResultSet_BASE::rBHelper.bDisposed);
+
+    m_bRowDeleted = m_bRowInserted = m_bRowUpdated = false;
+
+    return Move(IResultSetHelper::BOOKMARK,comphelper::getINT32(bookmark),true);
+}
+
+sal_Bool SAL_CALL OWriterResultSet::moveRelativeToBookmark(const uno::Any& bookmark, sal_Int32 rows)
+{
+    ::osl::MutexGuard aGuard(m_aMutex);
+    checkDisposed(file::OResultSet_BASE::rBHelper.bDisposed);
+
+    m_bRowDeleted = m_bRowInserted = m_bRowUpdated = false;
+
+    Move(IResultSetHelper::BOOKMARK,comphelper::getINT32(bookmark),false);
+
+    return relative(rows);
+}
+
+sal_Int32 SAL_CALL OWriterResultSet::compareBookmarks(const uno::Any& lhs, const uno::Any& rhs)
+{
+    return (lhs == rhs) ? css::sdbcx::CompareBookmark::EQUAL : css::sdbcx::CompareBookmark::NOT_EQUAL;
+}
+
+sal_Bool SAL_CALL OWriterResultSet::hasOrderedBookmarks()
+{
+    return true;
+}
+
+sal_Int32 SAL_CALL OWriterResultSet::hashBookmark(const uno::Any& bookmark)
+{
+    ::osl::MutexGuard aGuard(m_aMutex);
+    checkDisposed(file::OResultSet_BASE::rBHelper.bDisposed);
+
+    return comphelper::getINT32(bookmark);
+}
+
+uno::Sequence<sal_Int32> SAL_CALL OWriterResultSet::deleteRows(const uno::Sequence<uno::Any>& /*rows*/)
+{
+    ::osl::MutexGuard aGuard(m_aMutex);
+    checkDisposed(file::OResultSet_BASE::rBHelper.bDisposed);
+
+    ::dbtools::throwFeatureNotImplementedSQLException("XDeleteRows::deleteRows", *this);
+    return uno::Sequence<sal_Int32>();
+}
+
+bool OWriterResultSet::fillIndexValues(const uno::Reference<css::sdbcx::XColumnsSupplier>& /*_xIndex*/)
+{
+    // Writer table have no index.
+    return false;
+}
+
+::cppu::IPropertyArrayHelper& OWriterResultSet::getInfoHelper()
+{
+    return *OWriterResultSet_BASE3::getArrayHelper();
+}
+
+cppu::IPropertyArrayHelper* OWriterResultSet::createArrayHelper() const
+{
+    uno::Sequence<beans::Property> aProps;
+    describeProperties(aProps);
+    return new cppu::OPropertyArrayHelper(aProps);
+}
+
+void SAL_CALL OWriterResultSet::acquire() throw()
+{
+    OWriterResultSet_BASE2::acquire();
+}
+
+void SAL_CALL OWriterResultSet::release() throw()
+{
+    OWriterResultSet_BASE2::release();
+}
+
+css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL OWriterResultSet::getPropertySetInfo()
+{
+    return ::cppu::OPropertySetHelper::createPropertySetInfo(getInfoHelper());
+}
+
+} // namespace writer
+} // namespace connectivity
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/inc/writer/WResultSet.hxx b/connectivity/source/inc/writer/WResultSet.hxx
new file mode 100644
index 000000000000..c97b4519bacf
--- /dev/null
+++ b/connectivity/source/inc/writer/WResultSet.hxx
@@ -0,0 +1,86 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ *   Licensed to the Apache Software Foundation (ASF) under one or more
+ *   contributor license agreements. See the NOTICE file distributed
+ *   with this work for additional information regarding copyright
+ *   ownership. The ASF licenses this file to you under the Apache
+ *   License, Version 2.0 (the "License"); you may not use this file
+ *   except in compliance with the License. You may obtain a copy of
+ *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_WRITER_WRESULTSET_HXX
+#define INCLUDED_CONNECTIVITY_SOURCE_INC_WRITER_WRESULTSET_HXX
+
+#include "file/FResultSet.hxx"
+#include <com/sun/star/sdbcx/XRowLocate.hpp>
+#include <com/sun/star/sdbcx/XDeleteRows.hpp>
+#include <cppuhelper/implbase2.hxx>
+
+namespace connectivity
+{
+namespace writer
+{
+class OWriterResultSet;
+// these typedef's are only necessary for the compiler
+typedef ::cppu::ImplHelper2<  css::sdbcx::XRowLocate,
+        css::sdbcx::XDeleteRows> OWriterResultSet_BASE;
+typedef file::OResultSet                                            OWriterResultSet_BASE2;
+typedef ::comphelper::OPropertyArrayUsageHelper<OWriterResultSet> OWriterResultSet_BASE3;
+
+
+class OWriterResultSet : public OWriterResultSet_BASE2,
+    public OWriterResultSet_BASE,
+    public OWriterResultSet_BASE3
+{
+    bool m_bBookmarkable;
+protected:
+    // OPropertyArrayUsageHelper
+    virtual ::cppu::IPropertyArrayHelper* createArrayHelper() const override;
+    // OPropertySetHelper
+    virtual ::cppu::IPropertyArrayHelper& SAL_CALL getInfoHelper() override;
+    virtual bool fillIndexValues(const css::uno::Reference< css::sdbcx::XColumnsSupplier>& _xIndex) override;
+public:
+    DECLARE_SERVICE_INFO();
+
+    OWriterResultSet(file::OStatement_Base* pStmt,connectivity::OSQLParseTreeIterator&   _aSQLIterator);
+
+private:
+    // XInterface
+    virtual css::uno::Any SAL_CALL queryInterface(const css::uno::Type& rType) override;
+    virtual void SAL_CALL acquire() throw() override;
+    virtual void SAL_CALL release() throw() override;
+    //XTypeProvider
+    virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes() override;
+    // XPropertySet
+    virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo() override;
+
+    // XRowLocate
+    virtual css::uno::Any SAL_CALL getBookmark() override;
+    virtual sal_Bool SAL_CALL moveToBookmark(const css::uno::Any& bookmark) override;
+    virtual sal_Bool SAL_CALL moveRelativeToBookmark(const css::uno::Any& bookmark, sal_Int32 rows) override;
+    virtual sal_Int32 SAL_CALL compareBookmarks(const css::uno::Any& first, const css::uno::Any& second) override;
+    virtual sal_Bool SAL_CALL hasOrderedBookmarks() override;
+    virtual sal_Int32 SAL_CALL hashBookmark(const css::uno::Any& bookmark) override;
+    // XDeleteRows
+    virtual css::uno::Sequence< sal_Int32 > SAL_CALL deleteRows(const css::uno::Sequence< css::uno::Any >& rows) override;
+
+    virtual bool isRowDeleted() const override
+    {
+        return false;
+    }
+
+};
+} // namespace writer
+} // namespace connectivity
+
+#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_WRITER_WRESULTSET_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */


More information about the Libreoffice-commits mailing list