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:
committed by
Julien Nabet
parent
aa1bfa6d18
commit
66d7540bcf
@@ -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( );
|
||||
}
|
||||
|
Reference in New Issue
Block a user