1*9b5730f6SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*9b5730f6SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*9b5730f6SAndrew Rist * or more contributor license agreements. See the NOTICE file 5*9b5730f6SAndrew Rist * distributed with this work for additional information 6*9b5730f6SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*9b5730f6SAndrew Rist * to you under the Apache License, Version 2.0 (the 8*9b5730f6SAndrew Rist * "License"); you may not use this file except in compliance 9*9b5730f6SAndrew Rist * with the License. You may obtain a copy of the License at 10*9b5730f6SAndrew Rist * 11*9b5730f6SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12*9b5730f6SAndrew Rist * 13*9b5730f6SAndrew Rist * Unless required by applicable law or agreed to in writing, 14*9b5730f6SAndrew Rist * software distributed under the License is distributed on an 15*9b5730f6SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*9b5730f6SAndrew Rist * KIND, either express or implied. See the License for the 17*9b5730f6SAndrew Rist * specific language governing permissions and limitations 18*9b5730f6SAndrew Rist * under the License. 19*9b5730f6SAndrew Rist * 20*9b5730f6SAndrew Rist *************************************************************/ 21*9b5730f6SAndrew Rist 22*9b5730f6SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_connectivity.hxx" 26cdf0e10cSrcweir 27cdf0e10cSrcweir #include "connectivity/warningscontainer.hxx" 28cdf0e10cSrcweir #include "connectivity/dbexception.hxx" 29cdf0e10cSrcweir 30cdf0e10cSrcweir #include <osl/diagnose.h> 31cdf0e10cSrcweir 32cdf0e10cSrcweir //........................................................................ 33cdf0e10cSrcweir namespace dbtools 34cdf0e10cSrcweir { 35cdf0e10cSrcweir //........................................................................ 36cdf0e10cSrcweir 37cdf0e10cSrcweir using namespace ::com::sun::star::uno; 38cdf0e10cSrcweir using namespace ::com::sun::star::sdbc; 39cdf0e10cSrcweir using namespace ::com::sun::star::sdb; 40cdf0e10cSrcweir 41cdf0e10cSrcweir //==================================================================== 42cdf0e10cSrcweir //= WarningsContainer 43cdf0e10cSrcweir //==================================================================== 44cdf0e10cSrcweir //-------------------------------------------------------------------- lcl_concatWarnings(Any & _rChainLeft,const Any & _rChainRight)45cdf0e10cSrcweir static void lcl_concatWarnings( Any& _rChainLeft, const Any& _rChainRight ) 46cdf0e10cSrcweir { 47cdf0e10cSrcweir if ( !_rChainLeft.hasValue() ) 48cdf0e10cSrcweir _rChainLeft = _rChainRight; 49cdf0e10cSrcweir else 50cdf0e10cSrcweir { 51cdf0e10cSrcweir // to travel the chain by reference (and not by value), we need the getValue ... 52cdf0e10cSrcweir // looks like a hack, but the meaning of getValue is documented, and it's the only chance for reference-traveling .... 53cdf0e10cSrcweir 54cdf0e10cSrcweir OSL_ENSURE( SQLExceptionInfo( _rChainLeft ).isValid(), 55cdf0e10cSrcweir "lcl_concatWarnings: invalid warnings chain (this will crash)!" ); 56cdf0e10cSrcweir 57cdf0e10cSrcweir const SQLException* pChainTravel = static_cast< const SQLException* >( _rChainLeft.getValue() ); 58cdf0e10cSrcweir SQLExceptionIteratorHelper aReferenceIterHelper( *pChainTravel ); 59cdf0e10cSrcweir while ( aReferenceIterHelper.hasMoreElements() ) 60cdf0e10cSrcweir pChainTravel = aReferenceIterHelper.next(); 61cdf0e10cSrcweir 62cdf0e10cSrcweir // reached the end of the chain, and pChainTravel points to the last element 63cdf0e10cSrcweir const_cast< SQLException* >( pChainTravel )->NextException = _rChainRight; 64cdf0e10cSrcweir } 65cdf0e10cSrcweir } 66cdf0e10cSrcweir 67cdf0e10cSrcweir //-------------------------------------------------------------------- ~WarningsContainer()68cdf0e10cSrcweir WarningsContainer::~WarningsContainer() 69cdf0e10cSrcweir { 70cdf0e10cSrcweir } 71cdf0e10cSrcweir 72cdf0e10cSrcweir //-------------------------------------------------------------------- appendWarning(const SQLException & _rWarning)73cdf0e10cSrcweir void WarningsContainer::appendWarning(const SQLException& _rWarning) 74cdf0e10cSrcweir { 75cdf0e10cSrcweir lcl_concatWarnings( m_aOwnWarnings, makeAny( _rWarning ) ); 76cdf0e10cSrcweir } 77cdf0e10cSrcweir 78cdf0e10cSrcweir //-------------------------------------------------------------------- appendWarning(const SQLContext & _rContext)79cdf0e10cSrcweir void WarningsContainer::appendWarning( const SQLContext& _rContext ) 80cdf0e10cSrcweir { 81cdf0e10cSrcweir lcl_concatWarnings( m_aOwnWarnings, makeAny( _rContext )); 82cdf0e10cSrcweir } 83cdf0e10cSrcweir 84cdf0e10cSrcweir //-------------------------------------------------------------------- appendWarning(const SQLWarning & _rWarning)85cdf0e10cSrcweir void WarningsContainer::appendWarning(const SQLWarning& _rWarning) 86cdf0e10cSrcweir { 87cdf0e10cSrcweir lcl_concatWarnings( m_aOwnWarnings, makeAny( _rWarning ) ); 88cdf0e10cSrcweir } 89cdf0e10cSrcweir 90cdf0e10cSrcweir //-------------------------------------------------------------------- getWarnings() const91cdf0e10cSrcweir Any SAL_CALL WarningsContainer::getWarnings( ) const 92cdf0e10cSrcweir { 93cdf0e10cSrcweir Any aAllWarnings; 94cdf0e10cSrcweir if ( m_xExternalWarnings.is() ) 95cdf0e10cSrcweir aAllWarnings = m_xExternalWarnings->getWarnings(); 96cdf0e10cSrcweir 97cdf0e10cSrcweir if ( m_aOwnWarnings.hasValue() ) 98cdf0e10cSrcweir lcl_concatWarnings( aAllWarnings, m_aOwnWarnings ); 99cdf0e10cSrcweir 100cdf0e10cSrcweir return aAllWarnings; 101cdf0e10cSrcweir } 102cdf0e10cSrcweir 103cdf0e10cSrcweir //-------------------------------------------------------------------- clearWarnings()104cdf0e10cSrcweir void SAL_CALL WarningsContainer::clearWarnings( ) 105cdf0e10cSrcweir { 106cdf0e10cSrcweir if ( m_xExternalWarnings.is() ) 107cdf0e10cSrcweir m_xExternalWarnings->clearWarnings(); 108cdf0e10cSrcweir m_aOwnWarnings.clear(); 109cdf0e10cSrcweir } 110cdf0e10cSrcweir 111cdf0e10cSrcweir //-------------------------------------------------------------------- appendWarning(const::rtl::OUString & _rWarning,const sal_Char * _pAsciiSQLState,const Reference<XInterface> & _rxContext)112cdf0e10cSrcweir void WarningsContainer::appendWarning( const ::rtl::OUString& _rWarning, const sal_Char* _pAsciiSQLState, const Reference< XInterface >& _rxContext ) 113cdf0e10cSrcweir { 114cdf0e10cSrcweir appendWarning( SQLWarning( _rWarning, _rxContext, ::rtl::OUString::createFromAscii( _pAsciiSQLState ), 0, Any() ) ); 115cdf0e10cSrcweir } 116cdf0e10cSrcweir 117cdf0e10cSrcweir //........................................................................ 118cdf0e10cSrcweir } // namespace dbtools 119cdf0e10cSrcweir //........................................................................ 120