Branch libreoffice-5-0-4
[LibreOffice.git] / include / connectivity / dbexception.hxx
blobc9337161834485bfe503cd5bbb3c075c02822f93
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
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 INCLUDED_CONNECTIVITY_DBEXCEPTION_HXX
21 #define INCLUDED_CONNECTIVITY_DBEXCEPTION_HXX
23 #include <com/sun/star/sdbc/SQLException.hpp>
24 #include <connectivity/standardsqlstate.hxx>
25 #include <connectivity/dbtoolsdllapi.hxx>
27 namespace com
29 namespace sun
31 namespace star
33 namespace sdb
35 class SQLContext;
36 struct SQLErrorEvent;
38 namespace sdbc
40 class SQLWarning;
46 namespace dbtools
51 //= Special exception if cancel is pressed in DBA UI
53 enum OOoBaseErrorCode
55 ParameterInteractionCancelled = 1
59 //= SQLExceptionInfo - encapsulating the type info of an SQLException-derived class
62 class OOO_DLLPUBLIC_DBTOOLS SQLExceptionInfo
64 public:
65 enum TYPE { SQL_EXCEPTION, SQL_WARNING, SQL_CONTEXT, UNDEFINED };
67 private:
68 ::com::sun::star::uno::Any m_aContent;
69 TYPE m_eType; // redundant (could be derived from m_aContent.getValueType())
71 public:
72 SQLExceptionInfo();
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 _rSQLState
96 the SQLState of the to-be-constructed SQLException, or NULL if this should be defaulted to HY000
97 @param _nErrorCode
98 the ErrorCode of the to-be-constructed SQLException
100 void prepend( const OUString& _rErrorMessage, const OUString& _rSQLState = OUString(), const sal_Int32 _nErrorCode = 0 );
102 /** appends a plain message to the chain of exceptions
103 @param _eType
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 _rSQLState
109 the SQLState of the exception to append
110 @param _nErrorCode
111 the error code of the exception to append
113 void append( TYPE _eType, const OUString& _rErrorMessage, const OUString& _rSQLState = OUString(), const sal_Int32 _nErrorCode = 0 );
115 /** throws (properly typed) the exception contained in the object
116 @precond
117 isValid() returns <TRUE/>
118 @throws SQLException
119 @throws RuntimeException
120 if the instance does not contain an SQLException
122 void doThrow();
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 bool isKindOf(TYPE _eType) const;
131 // not just a simple comparisation ! e.g. getType() == SQL_CONTEXT implies isKindOf(SQL_EXCEPTION) == sal_True !
132 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; }
141 void clear()
143 m_aContent.clear();
144 m_eType = UNDEFINED;
147 protected:
148 void implDetermineType();
152 //= SQLExceptionIteratorHelper - iterating through an SQLException chain
155 class OOO_DLLPUBLIC_DBTOOLS SQLExceptionIteratorHelper
157 protected:
158 const ::com::sun::star::sdbc::SQLException* m_pCurrent;
159 SQLExceptionInfo::TYPE m_eCurrentType;
161 public:
162 /** constructs an iterator instance from an SQLException
164 @param _rChainStart
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
172 @param _rErrorInfo
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 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
187 traveled.
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
192 traveled.
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 );
214 //= StandardExceptions
217 /** returns a standard error string for a given SQLState
219 @param _eState
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 );
227 /** throws an exception with SQL state IM001, saying that a certain function is not supported
229 OOO_DLLPUBLIC_DBTOOLS void throwFunctionNotSupportedSQLException(
230 const OUString& _rFunctionName,
231 const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxContext,
232 const ::com::sun::star::uno::Any& _rNextException = ::com::sun::star::uno::Any()
234 throw ( ::com::sun::star::sdbc::SQLException );
236 OOO_DLLPUBLIC_DBTOOLS void throwFunctionNotSupportedRuntimeException(
237 const OUString& _rFunctionName,
238 const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxContext
240 throw (css::uno::RuntimeException );
242 /** throws a function sequence (HY010) exception
244 OOO_DLLPUBLIC_DBTOOLS void throwFunctionSequenceException(
245 const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _Context,
246 const ::com::sun::star::uno::Any& _Next = ::com::sun::star::uno::Any()
248 throw ( ::com::sun::star::sdbc::SQLException );
251 /** throw a invalid index sqlexception
253 OOO_DLLPUBLIC_DBTOOLS void throwInvalidIndexException(
254 const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _Context,
255 const ::com::sun::star::uno::Any& _Next = ::com::sun::star::uno::Any()
257 throw ( ::com::sun::star::sdbc::SQLException );
260 /** throw a generic SQLException, i.e. one with an SQLState of HY000, an ErrorCode of 0 and no NextException
262 OOO_DLLPUBLIC_DBTOOLS void throwGenericSQLException(
263 const OUString& _rMsg,
264 const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxSource
266 throw (::com::sun::star::sdbc::SQLException);
269 /** throw a generic SQLException, i.e. one with an SQLState of HY000, an ErrorCode of 0 and no NextException
271 OOO_DLLPUBLIC_DBTOOLS void throwGenericSQLException(
272 const OUString& _rMsg,
273 const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxSource,
274 const ::com::sun::star::uno::Any& _rNextException
276 throw (::com::sun::star::sdbc::SQLException);
279 /** throw a SQLException with SQLState HYC00 (Optional feature not implemented)
280 @param _rFeatureName
281 a description of the feature which is not implemented. It's recommended that the feature
282 name is built from the name of the interface plus its method, for instance "XParameters::updateBinaryStream"
283 @param _rxContext
284 the context of the exception
285 @param _pNextException
286 the next exception to chain into the thrown exception, if any
288 OOO_DLLPUBLIC_DBTOOLS void throwFeatureNotImplementedSQLException(
289 const OUString& _rFeatureName,
290 const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxContext,
291 const ::com::sun::star::uno::Any* _pNextException = NULL
293 throw (css::sdbc::SQLException);
295 /** throw a RuntimeException (Optional feature not implemented)
296 @param _rFeatureName
297 a description of the feature which is not implemented. It's recommended that the feature
298 name is built from the name of the interface plus its method, for instance "XParameters::updateBinaryStream"
299 @param _rxContext
300 the context of the exception
301 @param _pNextException
302 the next exception to chain into the thrown exception, if any
304 OOO_DLLPUBLIC_DBTOOLS void throwFeatureNotImplementedRuntimeException(
305 const OUString& _rFeatureName,
306 const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxContext
308 throw (css::uno::RuntimeException);
310 /** throw a SQLException with SQLState 42S22 (Column Not Found)
311 @param _rColumnNameName
312 The column that couldn't be found.
313 @param _rxContext
314 the context of the exception
316 OOO_DLLPUBLIC_DBTOOLS void throwInvalidColumnException(
317 const OUString& _rColumnName,
318 const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxContext
320 throw (::com::sun::star::sdbc::SQLException);
323 /** throws an SQLException
325 OOO_DLLPUBLIC_DBTOOLS void throwSQLException(
326 const OUString& _rMessage,
327 const OUString& _rSQLState,
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);
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);
347 } // namespace dbtools
350 #endif // INCLUDED_CONNECTIVITY_DBEXCEPTION_HXX
353 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */