[Libreoffice-commits] core.git: connectivity/source include/connectivity
Noel Grandin (via logerrit)
logerrit at kemper.freedesktop.org
Wed May 13 12:07:31 UTC 2020
connectivity/source/parse/sqliterator.cxx | 12 +++++++-----
include/connectivity/sqliterator.hxx | 7 ++++---
2 files changed, 11 insertions(+), 8 deletions(-)
New commits:
commit bc059c08d86ccdeca4f340078b0de39053bc0888
Author: Noel Grandin <noel.grandin at collabora.co.uk>
AuthorDate: Wed May 13 11:02:41 2020 +0200
Commit: Noel Grandin <noel.grandin at collabora.co.uk>
CommitDate: Wed May 13 14:06:49 2020 +0200
use std::optional for this error field
otherwise when I add source/line to the uno::Exception in an
upcoming change, the message becomes non-empty, and hasErrors()
return true.
I note that we throw SQLException in lots of places without a
message, so it is possible that this change will cause us to notice
errors we previously missed.
Change-Id: Idf7c5b5143e20c992d8d7550043aa2ed875c78b1
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/94108
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>
diff --git a/connectivity/source/parse/sqliterator.cxx b/connectivity/source/parse/sqliterator.cxx
index 7af9dc9ab9ee..ba3f274e65ef 100644
--- a/connectivity/source/parse/sqliterator.cxx
+++ b/connectivity/source/parse/sqliterator.cxx
@@ -38,6 +38,7 @@
#include <connectivity/dbmetadata.hxx>
#include <com/sun/star/sdb/SQLFilterOperator.hpp>
#include <sal/log.hxx>
+#include <tools/diagnose_ex.h>
#include <iterator>
#include <memory>
@@ -209,7 +210,7 @@ void OSQLParseTreeIterator::setParseTree(const OSQLParseNode * pNewParseTree)
if ( !m_pImpl->m_xTableContainer.is() )
return;
- m_aErrors = SQLException();
+ m_xErrors.reset();
// Determine statement type ...
@@ -1468,7 +1469,7 @@ void OSQLParseTreeIterator::traverseAll()
void OSQLParseTreeIterator::impl_traverse( TraversalParts _nIncludeMask )
{
// resets our errors
- m_aErrors = css::sdbc::SQLException();
+ m_xErrors.reset();
m_pImpl->m_nIncludeMask = _nIncludeMask;
@@ -2006,15 +2007,16 @@ void OSQLParseTreeIterator::impl_appendError( IParseContext::ErrorCode _eError,
void OSQLParseTreeIterator::impl_appendError( const SQLException& _rError )
{
- if ( !m_aErrors.Message.isEmpty() )
+ SAL_WARN("connectivity.parse", "Adding error " << exceptionToString(Any(_rError)));
+ if ( m_xErrors )
{
- SQLException* pErrorChain = &m_aErrors;
+ SQLException* pErrorChain = &*m_xErrors;
while ( pErrorChain->NextException.hasValue() )
pErrorChain = static_cast< SQLException* >( pErrorChain->NextException.pData );
pErrorChain->NextException <<= _rError;
}
else
- m_aErrors = _rError;
+ m_xErrors = _rError;
}
sal_Int32 OSQLParseTreeIterator::getFunctionReturnType(const OSQLParseNode* _pNode )
diff --git a/include/connectivity/sqliterator.hxx b/include/connectivity/sqliterator.hxx
index f77df204d52c..e4f0450ea4bb 100644
--- a/include/connectivity/sqliterator.hxx
+++ b/include/connectivity/sqliterator.hxx
@@ -27,6 +27,7 @@
#include <rtl/ref.hxx>
#include <memory>
+#include <optional>
#include <vector>
#include <o3tl/typed_flags_set.hxx>
@@ -78,7 +79,7 @@ namespace connectivity
class OOO_DLLPUBLIC_DBTOOLS OSQLParseTreeIterator final
{
private:
- css::sdbc::SQLException m_aErrors; // contains the error while iterating through the statement
+ std::optional<css::sdbc::SQLException> m_xErrors; // contains the error while iterating through the statement
const OSQLParseNode* m_pParseTree; // current ParseTree
const OSQLParser& m_rParser; // if set used for general error messages from the context
OSQLStatementType m_eStatementType;
@@ -178,8 +179,8 @@ namespace connectivity
The returned object contains a chain (via SQLException::NextException) of SQLExceptions.
*/
- const css::sdbc::SQLException& getErrors() const { return m_aErrors; }
- bool hasErrors() const { return !m_aErrors.Message.isEmpty(); }
+ const css::sdbc::SQLException& getErrors() const { return *m_xErrors; }
+ bool hasErrors() const { return bool(m_xErrors); }
// statement type (already set in setParseTree):
OSQLStatementType getStatementType() const { return m_eStatementType; }
More information about the Libreoffice-commits
mailing list