summaryrefslogtreecommitdiff
path: root/dbaccess/source/ui/dlg/sqlmessage.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'dbaccess/source/ui/dlg/sqlmessage.cxx')
-rw-r--r--dbaccess/source/ui/dlg/sqlmessage.cxx36
1 files changed, 35 insertions, 1 deletions
diff --git a/dbaccess/source/ui/dlg/sqlmessage.cxx b/dbaccess/source/ui/dlg/sqlmessage.cxx
index bd5a4c1e6392..cc8f01dd4daf 100644
--- a/dbaccess/source/ui/dlg/sqlmessage.cxx
+++ b/dbaccess/source/ui/dlg/sqlmessage.cxx
@@ -258,6 +258,14 @@ namespace
ExceptionDisplayInfo( SQLExceptionInfo::TYPE _eType ) : eType( _eType ), bSubEntry( false ) { }
};
+ static bool lcl_hasDetails( const ExceptionDisplayInfo& _displayInfo )
+ {
+ return ( _displayInfo.sErrorCode.Len() )
+ || ( _displayInfo.sSQLState.Len()
+ && !_displayInfo.sSQLState.EqualsAscii( "S1000" )
+ );
+ }
+
typedef ::std::vector< ExceptionDisplayInfo > ExceptionDisplayChain;
//------------------------------------------------------------------------------
@@ -303,11 +311,19 @@ namespace
ExceptionDisplayInfo aDisplayInfo( aCurrentElement.getType() );
- aDisplayInfo.sMessage = pCurrentError->Message;
+ aDisplayInfo.sMessage = pCurrentError->Message.trim();
aDisplayInfo.sSQLState = pCurrentError->SQLState;
if ( pCurrentError->ErrorCode )
aDisplayInfo.sErrorCode = String::CreateFromInt32( pCurrentError->ErrorCode );
+ if ( !aDisplayInfo.sMessage.Len()
+ && !lcl_hasDetails( aDisplayInfo )
+ )
+ {
+ OSL_ENSURE( false, "lcl_buildExceptionChain: useles exception: no state, no error code, no message!" );
+ continue;
+ }
+
aDisplayInfo.pImageProvider = _rFactory.getImageProvider( aCurrentElement.getType() );
aDisplayInfo.pLabelProvider = _rFactory.getLabelProvider( aCurrentElement.getType(), false );
@@ -685,7 +701,25 @@ void OSQLMessageBox::impl_createStandardButtons( WinBits _nStyle )
void OSQLMessageBox::impl_addDetailsButton()
{
size_t nFirstPageVisible = m_aMessage.IsVisible() ? 2 : 1;
+
bool bMoreDetailsAvailable = m_pImpl->aDisplayInfo.size() > nFirstPageVisible;
+ if ( !bMoreDetailsAvailable )
+ {
+ // even if the text fits into what we can display, we might need to details button
+ // if there is more non-trivial information in the errors than the mere messages
+ for ( ExceptionDisplayChain::const_iterator error = m_pImpl->aDisplayInfo.begin();
+ error != m_pImpl->aDisplayInfo.end();
+ ++error
+ )
+ {
+ if ( lcl_hasDetails( *error ) )
+ {
+ bMoreDetailsAvailable = true;
+ break;
+ }
+ }
+ }
+
if ( bMoreDetailsAvailable )
{
AddButton( BUTTON_MORE, BUTTONID_MORE, 0 );