dbaccess OStatementBase: correctly check database metadata

the previous test didn't make any sense:
 * if xMeta.is(), then the test evaluated to false
 * if !xMeta.is(), then it called supportsMultipleResultSets
   (or supportsBatchUpdates, respectively) on a NULL pointer,
   which guaranteed a segfault / assert.

Change-Id: I6d6b93350557936b924a286732ae6d4f5ab2ce56
Reviewed-on: https://gerrit.libreoffice.org/47118
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Julien Nabet <serval2412@yahoo.fr>
This commit is contained in:
Lionel Elie Mamane
2017-12-28 06:16:30 +01:00
committed by Julien Nabet
parent aa1bfa6d18
commit 66d7540bcf

View File

@@ -321,7 +321,7 @@ Reference< XResultSet > SAL_CALL OStatementBase::getResultSet( )
// first check the meta data
Reference<XDatabaseMetaData> xMeta = Reference< XConnection > (m_xParent, UNO_QUERY)->getMetaData();
if (!xMeta.is() && !xMeta->supportsMultipleResultSets())
if (!xMeta.is() || !xMeta->supportsMultipleResultSets())
throwFunctionSequenceException(*this);
return Reference< XMultipleResults >(m_xAggregateAsSet, UNO_QUERY)->getResultSet();
@@ -334,7 +334,7 @@ sal_Int32 SAL_CALL OStatementBase::getUpdateCount( )
// first check the meta data
Reference<XDatabaseMetaData> xMeta = Reference< XConnection > (m_xParent, UNO_QUERY)->getMetaData();
if (!xMeta.is() && !xMeta->supportsMultipleResultSets())
if (!xMeta.is() || !xMeta->supportsMultipleResultSets())
throwFunctionSequenceException(*this);
return Reference< XMultipleResults >(m_xAggregateAsSet, UNO_QUERY)->getUpdateCount();
@@ -347,7 +347,7 @@ sal_Bool SAL_CALL OStatementBase::getMoreResults( )
// first check the meta data
Reference<XDatabaseMetaData> xMeta = Reference< XConnection > (m_xParent, UNO_QUERY)->getMetaData();
if (!xMeta.is() && !xMeta->supportsMultipleResultSets())
if (!xMeta.is() || !xMeta->supportsMultipleResultSets())
throwFunctionSequenceException(*this);
// free the previous results
@@ -364,7 +364,7 @@ void SAL_CALL OStatementBase::addBatch( )
// first check the meta data
Reference<XDatabaseMetaData> xMeta = Reference< XConnection > (m_xParent, UNO_QUERY)->getMetaData();
if (!xMeta.is() && !xMeta->supportsBatchUpdates())
if (!xMeta.is() || !xMeta->supportsBatchUpdates())
throwFunctionSequenceException(*this);
Reference< XPreparedBatchExecution >(m_xAggregateAsSet, UNO_QUERY)->addBatch();
@@ -377,7 +377,7 @@ void SAL_CALL OStatementBase::clearBatch( )
// first check the meta data
Reference<XDatabaseMetaData> xMeta = Reference< XConnection > (m_xParent, UNO_QUERY)->getMetaData();
if (!xMeta.is() && !xMeta->supportsBatchUpdates())
if (!xMeta.is() || !xMeta->supportsBatchUpdates())
throwFunctionSequenceException(*this);
Reference< XPreparedBatchExecution >(m_xAggregateAsSet, UNO_QUERY)->clearBatch();
@@ -390,7 +390,7 @@ Sequence< sal_Int32 > SAL_CALL OStatementBase::executeBatch( )
// first check the meta data
Reference<XDatabaseMetaData> xMeta = Reference< XConnection > (m_xParent, UNO_QUERY)->getMetaData();
if (!xMeta.is() && !xMeta->supportsBatchUpdates())
if (!xMeta.is() || !xMeta->supportsBatchUpdates())
throwFunctionSequenceException(*this);
// free the previous results
@@ -496,7 +496,7 @@ void OStatement::addBatch( const OUString& _rSQL )
// first check the meta data
Reference<XDatabaseMetaData> xMeta = Reference< XConnection > (m_xParent, UNO_QUERY)->getMetaData();
if (!xMeta.is() && !xMeta->supportsBatchUpdates())
if (!xMeta.is() || !xMeta->supportsBatchUpdates())
throwFunctionSequenceException(*this);
OUString sSQL( impl_doEscapeProcessing_nothrow( _rSQL ) );
@@ -509,7 +509,7 @@ void OStatement::clearBatch( )
::connectivity::checkDisposed(OComponentHelper::rBHelper.bDisposed);
// first check the meta data
Reference<XDatabaseMetaData> xMeta = Reference< XConnection > (m_xParent, UNO_QUERY)->getMetaData();
if (!xMeta.is() && !xMeta->supportsBatchUpdates())
if (!xMeta.is() || !xMeta->supportsBatchUpdates())
throwFunctionSequenceException(*this);
Reference< XBatchExecution >(m_xAggregateAsSet, UNO_QUERY)->clearBatch();
@@ -521,7 +521,7 @@ Sequence< sal_Int32 > OStatement::executeBatch( )
::connectivity::checkDisposed(OComponentHelper::rBHelper.bDisposed);
// first check the meta data
Reference<XDatabaseMetaData> xMeta = Reference< XConnection > (m_xParent, UNO_QUERY)->getMetaData();
if (!xMeta.is() && !xMeta->supportsBatchUpdates())
if (!xMeta.is() || !xMeta->supportsBatchUpdates())
throwFunctionSequenceException(*this);
return Reference< XBatchExecution >(m_xAggregateAsSet, UNO_QUERY)->executeBatch( );
}