Kaydet (Commit) 6269b62b authored tarafından Caolán McNamara's avatar Caolán McNamara

Resolves: fdo#80938 fix SQL view to be editable

regression from

commit d60392fb
Author: Caolán McNamara <caolanm@redhat.com>
Date:   Thu Mar 6 12:05:24 2014 +0000
    coverity#706316 help out coverity re tortured logic

Change-Id: I2ee7bd3b7421ae46878d1b565ef14dd7b0bbd10e
üst c17f5bb6
......@@ -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
......
......@@ -63,12 +63,21 @@ namespace connectivity { namespace hsqldb
virtual void SAL_CALL getFastPropertyValue( ::com::sun::star::uno::Any& _rValue, sal_Int32 _nHandle ) const SAL_OVERRIDE;
private:
/** retrieves the current command of the View */
OUString impl_getCommand() const;
/** retrieves the current command of the View
@throws ::com::sun::star::lang::WrappedTargetException
if an error occurs while retrieving the command from the database.
*/
OUString impl_getCommand_wrapSQLException() const;
/** retrieves the current command of the View
@throws ::com::sun::star::sdbc::SQLException
if an error occurs while retrieving the command from the database.
*/
OUString impl_getCommand_throw() const;
OUString impl_getCommand_throwSQLException() const;
private:
::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection > m_xConnection;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment