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

Andrzej J.R. Hunt andrzej at ahunt.org
Thu Nov 14 03:50:55 PST 2013


 connectivity/source/drivers/firebird/Connection.cxx        |    6 ++++++
 connectivity/source/drivers/firebird/Connection.hxx        |   10 ++++++++++
 connectivity/source/drivers/firebird/PreparedStatement.cxx |    3 +++
 connectivity/source/drivers/firebird/Statement.cxx         |    7 +++++++
 4 files changed, 26 insertions(+)

New commits:
commit acef4b26879f6f8d80c26f6d2ee80667cb6ed388
Author: Andrzej J.R. Hunt <andrzej at ahunt.org>
Date:   Sun Nov 10 08:40:36 2013 +0000

    fdo#70144 Mark database document as modified when data inserted in firebird.
    
    This only applies to embedded databases where any changes to the database
    only affect the temporary extracted db which still has to be stored into
    the .odb.
    
    This only fixes the status for modification/insertion/deletion of data
    in existing tables. Insertion of new tables still does not result
    in the modified state being set.
    
    Change-Id: I553f67127672f2cf49b98ddcdf7d25f22bef5074
    Reviewed-on: https://gerrit.libreoffice.org/6621
    Reviewed-by: Lionel Elie Mamane <lionel at mamane.lu>
    Tested-by: Lionel Elie Mamane <lionel at mamane.lu>

diff --git a/connectivity/source/drivers/firebird/Connection.cxx b/connectivity/source/drivers/firebird/Connection.cxx
index d00478a..3f49b16 100644
--- a/connectivity/source/drivers/firebird/Connection.cxx
+++ b/connectivity/source/drivers/firebird/Connection.cxx
@@ -302,6 +302,12 @@ void Connection::construct(const ::rtl::OUString& url, const Sequence< PropertyV
     osl_atomic_decrement( &m_refCount );
 }
 
+void Connection::notifyDatabaseModified()
+{
+    if (m_xParentDocument.is()) // Only true in embedded mode
+        m_xParentDocument->setModified(sal_True);
+}
+
 //----- XServiceInfo ---------------------------------------------------------
 IMPLEMENT_SERVICE_INFO(Connection, "com.sun.star.sdbc.drivers.firebird.Connection",
                                                     "com.sun.star.sdbc.Connection")
diff --git a/connectivity/source/drivers/firebird/Connection.hxx b/connectivity/source/drivers/firebird/Connection.hxx
index 40ebee7..7850da7 100644
--- a/connectivity/source/drivers/firebird/Connection.hxx
+++ b/connectivity/source/drivers/firebird/Connection.hxx
@@ -189,6 +189,16 @@ namespace connectivity
                 throw(::com::sun::star::sdbc::SQLException);
 
             /**
+              * Must be called anytime the underlying database is likely to have
+              * changed.
+              *
+              * This is used to notify the database document of any changes, so
+              * that the user is informed of any pending changes needing to be
+              * saved.
+              */
+            void notifyDatabaseModified();
+
+            /**
              * Create a new Blob tied to this connection. Blobs are tied to a
              * transaction and not to a statement, hence the connection should
              * deal with their management.
diff --git a/connectivity/source/drivers/firebird/PreparedStatement.cxx b/connectivity/source/drivers/firebird/PreparedStatement.cxx
index d578450..5e02616 100644
--- a/connectivity/source/drivers/firebird/PreparedStatement.cxx
+++ b/connectivity/source/drivers/firebird/PreparedStatement.cxx
@@ -287,6 +287,9 @@ sal_Bool SAL_CALL OPreparedStatement::execute()
                                   m_aStatementHandle,
                                   m_pOutSqlda);
 
+    if (getStatementChangeCount() > 0)
+        m_pConnection->notifyDatabaseModified();
+
     return m_xResultSet.is();
     // TODO: implement handling of multiple ResultSets.
 }
diff --git a/connectivity/source/drivers/firebird/Statement.cxx b/connectivity/source/drivers/firebird/Statement.cxx
index 1ed5bd2..2364ed2 100644
--- a/connectivity/source/drivers/firebird/Statement.cxx
+++ b/connectivity/source/drivers/firebird/Statement.cxx
@@ -136,7 +136,14 @@ uno::Reference< XResultSet > SAL_CALL OStatement::executeQuery(const OUString& s
     evaluateStatusVector(m_statusVector, sql, *this);
 
     if (isDDLStatement())
+    {
         m_pConnection->commit();
+        m_pConnection->notifyDatabaseModified();
+    }
+    else if (getStatementChangeCount() > 0)
+    {
+        m_pConnection->notifyDatabaseModified();
+    }
 
     return m_xResultSet;
 }


More information about the Libreoffice-commits mailing list