1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
20 #ifndef _DBHELPER_DBEXCEPTION_HXX_
21 #define _DBHELPER_DBEXCEPTION_HXX_
23 #include <com/sun/star/sdbc/SQLException.hpp>
24 #include "connectivity/standardsqlstate.hxx"
25 #include "connectivity/dbtoolsdllapi.hxx"
45 //.........................................................................
48 //.........................................................................
50 //==============================================================================
51 //= Special exception if cancel is pressed in DBA UI
52 //==============================================================================
55 ParameterInteractionCancelled
= 1
58 //==============================================================================
59 //= SQLExceptionInfo - encapsulating the type info of an SQLException-derived class
60 //==============================================================================
62 class OOO_DLLPUBLIC_DBTOOLS SQLExceptionInfo
65 enum TYPE
{ SQL_EXCEPTION
, SQL_WARNING
, SQL_CONTEXT
, UNDEFINED
};
68 ::com::sun::star::uno::Any m_aContent
;
69 TYPE m_eType
; // redundant (could be derived from m_aContent.getValueType())
73 SQLExceptionInfo(const ::com::sun::star::sdbc::SQLException
& _rError
);
74 SQLExceptionInfo(const ::com::sun::star::sdbc::SQLWarning
& _rError
);
75 SQLExceptionInfo(const ::com::sun::star::sdb::SQLContext
& _rError
);
77 /** convenience constructor
79 If your error processing relies on SQLExceptions, and SQLExceptionInfos, you still may
80 need to display an error which consists of a simple message string only.
81 In those cases, you can use this constructor, which behaves as if you would have used
82 an SQLException containing exactly the given error message.
84 SQLExceptionInfo( const OUString
& _rSimpleErrorMessage
);
86 SQLExceptionInfo(const SQLExceptionInfo
& _rCopySource
);
88 // use for events got via XSQLErrorListener::errorOccured
89 SQLExceptionInfo(const ::com::sun::star::uno::Any
& _rError
);
90 // use with the Reason member of an SQLErrorEvent or with NextElement of an SQLException
92 /** prepends a plain error message to the chain of exceptions
93 @param _rSimpleErrorMessage
94 the error message to prepend
95 @param _pAsciiSQLState
96 the SQLState of the to-be-constructed SQLException, or NULL if this should be defaulted to HY000
98 the ErrorCode of the to-be-constructed SQLException
100 void prepend( const OUString
& _rErrorMessage
, const sal_Char
* _pAsciiSQLState
= NULL
, const sal_Int32 _nErrorCode
= 0 );
102 /** appends a plain message to the chain of exceptions
104 the type of exception to append. Must be SQL_EXCEPTION, SQL_WARNING, SQL_CONTEXT, for all other
105 values, the behavior is undefined.
106 @param _rErrorMessage
107 the message to append
108 @param _pAsciiSQLState
109 the SQLState of the exception to append
111 the error code of the exception to append
113 void append( TYPE _eType
, const OUString
& _rErrorMessage
, const sal_Char
* _pAsciiSQLState
= NULL
, const sal_Int32 _nErrorCode
= 0 );
115 /** throws (properly typed) the exception contained in the object
117 isValid() returns <TRUE/>
119 @throws RuntimeException
120 if the instance does not contain an SQLException
124 const SQLExceptionInfo
& operator=(const ::com::sun::star::sdbc::SQLException
& _rError
);
125 const SQLExceptionInfo
& operator=(const ::com::sun::star::sdbc::SQLWarning
& _rError
);
126 const SQLExceptionInfo
& operator=(const ::com::sun::star::sdb::SQLContext
& _rError
);
127 const SQLExceptionInfo
& operator=(const ::com::sun::star::sdb::SQLErrorEvent
& _rErrorEvent
);
128 const SQLExceptionInfo
& operator=(const ::com::sun::star::uno::Any
& _rCaughtSQLException
);
130 sal_Bool
isKindOf(TYPE _eType
) const;
131 // not just a simple comparisation ! e.g. getType() == SQL_CONTEXT implies isKindOf(SQL_EXCEPTION) == sal_True !
132 sal_Bool
isValid() const { return m_eType
!= UNDEFINED
; }
133 TYPE
getType() const { return m_eType
; }
135 operator const ::com::sun::star::sdbc::SQLException
* () const;
136 operator const ::com::sun::star::sdbc::SQLWarning
* () const;
137 operator const ::com::sun::star::sdb::SQLContext
* () const;
139 const ::com::sun::star::uno::Any
& get() const { return m_aContent
; }
148 void implDetermineType();
151 //==============================================================================
152 //= SQLExceptionIteratorHelper - iterating through an SQLException chain
153 //==============================================================================
155 class OOO_DLLPUBLIC_DBTOOLS SQLExceptionIteratorHelper
158 const ::com::sun::star::sdbc::SQLException
* m_pCurrent
;
159 SQLExceptionInfo::TYPE m_eCurrentType
;
162 /** constructs an iterator instance from an SQLException
165 the start of the exception chain to iterate. Must live as long as the iterator
166 instances lives, at least.
168 SQLExceptionIteratorHelper( const ::com::sun::star::sdbc::SQLException
& _rChainStart
);
170 /** constructs an iterator instance from an SQLExceptionInfo
173 the start of the exception chain to iterate. Must live as long as the iterator
174 instances lives, at least.
176 SQLExceptionIteratorHelper( const SQLExceptionInfo
& _rErrorInfo
);
178 /** determines whether there are more elements in the exception chain
180 sal_Bool
hasMoreElements() const { return ( m_pCurrent
!= NULL
); }
182 /** returns the type of the current element in the exception chain
184 SQLExceptionInfo::TYPE
currentType() const { return m_eCurrentType
; }
186 /** retrieves the current element in the chain, or <NULL/> if the chain has been completely
189 const ::com::sun::star::sdbc::SQLException
* current() const { return m_pCurrent
; }
191 /** retrieves the current element in the chain, or <NULL/> if the chain has been completely
194 In opposite to the second <member>current</member>, this version allows typed access to
195 the respective SQLException.
197 void current( SQLExceptionInfo
& _out_rInfo
) const;
199 /** proceeds to the next element in the chain
201 @return the current element in the chain, as <b>before</em> the chain move.
203 const ::com::sun::star::sdbc::SQLException
* next();
205 /** proceeds to the next element in the chain
207 In opposite to the second <member>current</member>, this version allows typed access to
208 the respective SQLException.
210 void next( SQLExceptionInfo
& _out_rInfo
);
213 //==================================================================================
214 //= StandardExceptions
215 //==================================================================================
216 //----------------------------------------------------------------------------------
217 /** returns a standard error string for a given SQLState
220 describes the state whose description is to retrieve. Must not be SQL_ERROR_UNSPECIFIED.
221 @raises RuntimeException
222 in case of an internal error
224 OOO_DLLPUBLIC_DBTOOLS OUString
getStandardSQLState( StandardSQLState _eState
);
226 //----------------------------------------------------------------------------------
227 /** returns a standard ASCII string for a given SQLState
230 describes the state whose description is to retrieve. Must not be SQL_ERROR_UNSPECIFIED.
232 a non-<NULL/> pointer to an ASCII character string denoting the requested SQLState
233 @raises RuntimeException
234 in case of an internal error
236 OOO_DLLPUBLIC_DBTOOLS
const sal_Char
* getStandardSQLStateAscii( StandardSQLState _eState
);
238 //----------------------------------------------------------------------------------
239 OOO_DLLPUBLIC_DBTOOLS
void throwFunctionNotSupportedException(
240 const OUString
& _rMsg
,
241 const ::com::sun::star::uno::Reference
< ::com::sun::star::uno::XInterface
>& _Context
,
242 const ::com::sun::star::uno::Any
& _Next
= ::com::sun::star::uno::Any()
244 throw ( ::com::sun::star::sdbc::SQLException
);
246 //----------------------------------------------------------------------------------
247 /** throws an exception with SQL state IM001, saying that a certain function is not supported
249 OOO_DLLPUBLIC_DBTOOLS
void throwFunctionNotSupportedException(
250 const sal_Char
* _pAsciiFunctionName
,
251 const ::com::sun::star::uno::Reference
< ::com::sun::star::uno::XInterface
>& _rxContext
,
252 const ::com::sun::star::uno::Any
* _pNextException
= NULL
254 throw ( ::com::sun::star::sdbc::SQLException
);
256 //----------------------------------------------------------------------------------
257 /** throws a function sequence (HY010) exception
259 OOO_DLLPUBLIC_DBTOOLS
void throwFunctionSequenceException(
260 const ::com::sun::star::uno::Reference
< ::com::sun::star::uno::XInterface
>& _Context
,
261 const ::com::sun::star::uno::Any
& _Next
= ::com::sun::star::uno::Any()
263 throw ( ::com::sun::star::sdbc::SQLException
);
265 //----------------------------------------------------------------------------------
266 /** throw a invalid index sqlexception
268 OOO_DLLPUBLIC_DBTOOLS
void throwInvalidIndexException(
269 const ::com::sun::star::uno::Reference
< ::com::sun::star::uno::XInterface
>& _Context
,
270 const ::com::sun::star::uno::Any
& _Next
= ::com::sun::star::uno::Any()
272 throw ( ::com::sun::star::sdbc::SQLException
);
274 //----------------------------------------------------------------------------------
275 /** throw a generic SQLException, i.e. one with an SQLState of HY000, an ErrorCode of 0 and no NextException
277 OOO_DLLPUBLIC_DBTOOLS
void throwGenericSQLException(
278 const OUString
& _rMsg
,
279 const ::com::sun::star::uno::Reference
< ::com::sun::star::uno::XInterface
>& _rxSource
281 throw (::com::sun::star::sdbc::SQLException
);
283 //----------------------------------------------------------------------------------
284 /** throw a generic SQLException, i.e. one with an SQLState of HY000, an ErrorCode of 0 and no NextException
286 OOO_DLLPUBLIC_DBTOOLS
void throwGenericSQLException(
287 const OUString
& _rMsg
,
288 const ::com::sun::star::uno::Reference
< ::com::sun::star::uno::XInterface
>& _rxSource
,
289 const ::com::sun::star::uno::Any
& _rNextException
291 throw (::com::sun::star::sdbc::SQLException
);
293 //----------------------------------------------------------------------------------
294 /** throw a SQLException with SQLState HYC00 (Optional feature not implemented)
295 @param _pAsciiFeatureName
296 an ASCII description of the feature which is not implemented. It's recommended that the feature
297 name is built from the name of the interface plus its method, for instance "XParameters::updateBinaryStream"
299 the context of the exception
300 @param _pNextException
301 the next exception to chain into the thrown exception, if any
303 OOO_DLLPUBLIC_DBTOOLS
void throwFeatureNotImplementedException(
304 const sal_Char
* _pAsciiFeatureName
,
305 const ::com::sun::star::uno::Reference
< ::com::sun::star::uno::XInterface
>& _rxContext
,
306 const ::com::sun::star::uno::Any
* _pNextException
= NULL
308 throw (::com::sun::star::sdbc::SQLException
);
310 //----------------------------------------------------------------------------------
311 /** throws an SQLException
313 OOO_DLLPUBLIC_DBTOOLS
void throwSQLException(
314 const sal_Char
* _pAsciiMessage
,
315 const sal_Char
* _pAsciiState
,
316 const ::com::sun::star::uno::Reference
< ::com::sun::star::uno::XInterface
>& _rxContext
,
317 const sal_Int32 _nErrorCode
= 0,
318 const ::com::sun::star::uno::Any
* _pNextException
= NULL
320 throw (::com::sun::star::sdbc::SQLException
);
322 //----------------------------------------------------------------------------------
323 /** throws an SQLException
325 OOO_DLLPUBLIC_DBTOOLS
void throwSQLException(
326 const sal_Char
* _pAsciiMessage
,
327 StandardSQLState _eSQLState
,
328 const ::com::sun::star::uno::Reference
< ::com::sun::star::uno::XInterface
>& _rxContext
,
329 const sal_Int32 _nErrorCode
= 0,
330 const ::com::sun::star::uno::Any
* _pNextException
= NULL
332 throw (::com::sun::star::sdbc::SQLException
);
334 //----------------------------------------------------------------------------------
335 /** throws an SQLException
337 OOO_DLLPUBLIC_DBTOOLS
void throwSQLException(
338 const OUString
& _rMessage
,
339 StandardSQLState _eSQLState
,
340 const ::com::sun::star::uno::Reference
< ::com::sun::star::uno::XInterface
>& _rxContext
,
341 const sal_Int32 _nErrorCode
= 0,
342 const ::com::sun::star::uno::Any
* _pNextException
= NULL
344 throw (::com::sun::star::sdbc::SQLException
);
346 //.........................................................................
347 } // namespace dbtools
348 //.........................................................................
350 #endif // _DBHELPER_DBEXCEPTION_HXX_
353 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */