From 6269b62b525ec22471db56015ac2daed813ec5ff Mon Sep 17 00:00:00 2001 From: Caolán McNamara Date: Mon, 1 Dec 2014 10:57:05 +0000 Subject: Resolves: fdo#80938 fix SQL view to be editable MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit regression from commit d60392fb5b387175dbd2e575848993c02c56922f Author: Caolán McNamara Date: Thu Mar 6 12:05:24 2014 +0000 coverity#706316 help out coverity re tortured logic Change-Id: I2ee7bd3b7421ae46878d1b565ef14dd7b0bbd10e --- connectivity/source/drivers/hsqldb/HView.cxx | 81 ++++++++++++++++++---------- 1 file changed, 53 insertions(+), 28 deletions(-) (limited to 'connectivity/source/drivers') diff --git a/connectivity/source/drivers/hsqldb/HView.cxx b/connectivity/source/drivers/hsqldb/HView.cxx index bd4fa1bdb81c..72e9e8af48a6 100644 --- a/connectivity/source/drivers/hsqldb/HView.cxx +++ b/connectivity/source/drivers/hsqldb/HView.cxx @@ -101,7 +101,7 @@ namespace connectivity { namespace hsqldb aRestoreCommand.appendAscii( "CREATE VIEW " ); aRestoreCommand.append ( sQualifiedName ); aRestoreCommand.appendAscii( " AS " ); - aRestoreCommand.append ( impl_getCommand_throw() ); + aRestoreCommand.append ( impl_getCommand_throwSQLException() ); OUString sRestoreCommand( aRestoreCommand.makeStringAndClear() ); bool bDropSucceeded( false ); @@ -150,45 +150,47 @@ namespace connectivity { namespace hsqldb { // retrieve the very current command, don't rely on the base classes cached value // (which we initialized empty, anyway) - try - { - _rValue <<= impl_getCommand_throw(); - } - catch (const SQLException& e) - { - throw WrappedTargetException(e.Message, - static_cast< XAlterView* >( const_cast< HView* >( this ) ), - ::cppu::getCaughtException() ); - } + _rValue <<= impl_getCommand_wrapSQLException(); + return; } HView_Base::getFastPropertyValue( _rValue, _nHandle ); } + OUString HView::impl_getCommand() const + { + OUStringBuffer aCommand; + aCommand.appendAscii( "SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.SYSTEM_VIEWS " ); + HTools::appendTableFilterCrit( aCommand, m_CatalogName, m_SchemaName, m_Name, false ); + ::utl::SharedUNOComponent< XStatement > xStatement; xStatement.set( m_xConnection->createStatement(), UNO_QUERY_THROW ); + Reference< XResultSet > xResult( xStatement->executeQuery( aCommand.makeStringAndClear() ), UNO_QUERY_THROW ); + if ( !xResult->next() ) + { + // hmm. There is no view view the name as we know it. Can only mean some other instance + // dropped this view meanwhile ... + throw DisposedException(); + } - OUString HView::impl_getCommand_throw() const + Reference< XRow > xRow( xResult, UNO_QUERY_THROW ); + return xRow->getString( 1 ); + } + + OUString HView::impl_getCommand_wrapSQLException() const { OUString sCommand; try { - OUStringBuffer aCommand; - aCommand.appendAscii( "SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.SYSTEM_VIEWS " ); - HTools::appendTableFilterCrit( aCommand, m_CatalogName, m_SchemaName, m_Name, false ); - ::utl::SharedUNOComponent< XStatement > xStatement; xStatement.set( m_xConnection->createStatement(), UNO_QUERY_THROW ); - Reference< XResultSet > xResult( xStatement->executeQuery( aCommand.makeStringAndClear() ), UNO_QUERY_THROW ); - if ( !xResult->next() ) - { - // hmm. There is no view view the name as we know it. Can only mean some other instance - // dropped this view meanwhile ... - throw DisposedException(); - } - - Reference< XRow > xRow( xResult, UNO_QUERY_THROW ); - sCommand = xRow->getString( 1 ); + sCommand = impl_getCommand(); + } + catch( const RuntimeException& ) + { + throw; + } + catch( const SQLException& e ) + { + throw WrappedTargetException( e.Message, static_cast< XAlterView* >( const_cast< HView* >( this ) ), ::cppu::getCaughtException() ); } - catch( const RuntimeException& ) { throw; } - catch( const SQLException& ) { throw; } catch( const Exception& ) { DBG_UNHANDLED_EXCEPTION(); @@ -197,6 +199,29 @@ namespace connectivity { namespace hsqldb return sCommand; } + OUString HView::impl_getCommand_throwSQLException() const + { + OUString sCommand; + + try + { + sCommand = impl_getCommand(); + } + catch( const RuntimeException& ) + { + throw; + } + catch( const SQLException& ) + { + throw; + } + catch( const Exception& ) + { + DBG_UNHANDLED_EXCEPTION(); + } + + return sCommand; + } } } // namespace connectivity::hsqldb -- cgit