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 INCLUDED_CONNECTIVITY_SQLERROR_HXX
21 #define INCLUDED_CONNECTIVITY_SQLERROR_HXX
23 #include <com/sun/star/sdbc/SQLException.hpp>
24 #include <connectivity/dbtoolsdllapi.hxx>
25 #include <boost/optional.hpp>
28 namespace connectivity
34 /** the type of error codes to be used in SQLExceptions
36 @see css::sdbc::SQLException::ErrorCode
38 typedef ::sal_Int32 ErrorCode
;
40 /** error condition values as defined in css::sdb::ErrorCondition
42 typedef ::sal_Int32 ErrorCondition
;
49 /** a class which provides helpers for working with SQLErrors
51 In particular, this class provides vendor-specific error codes (where
52 the vendor is OpenOffice.org Base), which can be used in OOo's various
53 database drivers, and checked in application-level code, to properly
54 recognize highly specific error conditions.
56 @see css::sdb::ErrorCondition
58 class OOO_DLLPUBLIC_DBTOOLS SQLError
64 /** convenience wrapper around boost::optional, allowing implicit construction
66 class ParamValue
: public ::boost::optional
< OUString
>
68 typedef ::boost::optional
< OUString
> base_type
;
71 ParamValue( ) : base_type( ) { }
72 ParamValue( OUString
const& val
) : base_type( val
) { }
73 ParamValue( ParamValue
const& rhs
) : base_type( static_cast<base_type
const&>( rhs
) ) { }
75 bool is() const { return !base_type::operator!(); }
83 /** returns the message associated with a given error condition, after (optionally) replacing
84 a placeholder with a given string
86 Some error messages need to contain references to runtime-dependent data (say, the
87 name of a concrete table in the database), which in the resource file's strings are
88 represented by a placeholder, namely $1$, $2, and so on. This method allows to
89 retrieve such an error message, and replace up to 3 placeholders with their concrete
92 In a non-product build, assertions will fire if the number of placeholders in the
93 message's resource string does not match the number of passed parameter values.
95 As specified in the css::sdb::ErrorCondition type,
96 error messages thrown by core components of OpenOffice.org Base will contain
97 a standardized prefix "[OOoBase]" in every message.
99 @see css::sdb::ErrorCondition
101 OUString
getErrorMessage(
102 const ErrorCondition _eCondition
105 /** returns the error code associated with a given error condition
108 @see css::sdb::ErrorCondition
109 @see css::sdbc::SQLException::ErrorCode
112 getErrorCode( const ErrorCondition _eCondition
);
114 /** returns the prefix which is used for OpenOffice.org Base's error messages
116 As specified in the css::sdb::ErrorCondition type,
117 error messages thrown by core components of OpenOffice.org Base will
118 contain a standardized prefix in every message. <code>getBaseErrorMessagePrefix</code>
119 returns this prefix, so clients of such error messages might decide to strip this
120 prefix before presenting the message to the user, or use it to determine
121 whether a concrete error has been raised by a OpenOffice.org core component.
123 static const OUString
&
127 /** throws an SQLException describing the given error condition
129 The thrown SQLException will contain the OOo-specific error code which derives
130 from the given error condition, and the error message associated with that condition.
133 the ErrorCondition which hit you
136 the context in which the error occurred. This will be filled in as
137 <member scope="css::uno">Exception::Context</member> member.
140 a runtime-dependent value which should be filled into the error message
141 which is associated with <arg>_eCondition</arg>, replacing the first placeholder
145 a runtime-dependent value which should be filled into the error message
146 which is associated with <arg>_eCondition</arg>, replacing the second placeholder
150 a runtime-dependent value which should be filled into the error message
151 which is associated with <arg>_eCondition</arg>, replacing the third placeholder
158 const ErrorCondition _eCondition
,
159 const css::uno::Reference
< css::uno::XInterface
>& _rxContext
,
160 const ParamValue
& _rParamValue1
= ParamValue(),
161 const ParamValue
& _rParamValue2
= ParamValue(),
162 const ParamValue
& _rParamValue3
= ParamValue()
165 /** throws an SQLException describing the given error condition
167 The thrown SQLException will contain the OOo-specific error code which derives
168 from the given error condition, and the error message associated with that condition.
170 Note: You should prefer the version of raiseException which takes
171 an additional Context parameter, since this allows clients of your
172 exception to examine where the error occurred.
175 the ErrorCondition which hit you
181 const ErrorCondition _eCondition
184 /** raises a typed exception, that is, a UNO exception which is derived from
185 css::sdbc::SQLException
188 the ErrorCondition which hit you
191 the context in which the error occurred. This will be filled in as
192 <member scope="css::uno">Exception::Context</member> member.
194 @param _rExceptionType
195 the type of the exception to throw. This type <em>must</em> specify
196 an exception class derived from css::sdbc::SQLException.
198 @throws ::std::bad_cast
199 if <arg>_rExceptionType</arg> does not specify an exception class derived from
200 css::sdbc::SQLException.
205 void raiseTypedException(
206 const ErrorCondition _eCondition
,
207 const css::uno::Reference
< css::uno::XInterface
>& _rxContext
,
208 const css::uno::Type
& _rExceptionType
211 /** retrieves an <code>SQLException</code> object which contains information about
212 the given error condition
215 the ErrorCondition which hit you
218 the context in which the error occurred. This will be filled in as
219 <member scope="css::uno">Exception::Context</member> member.
222 a runtime-dependent value which should be filled into the error message
223 which is associated with <arg>_eCondition</arg>, replacing the first placeholder
227 a runtime-dependent value which should be filled into the error message
228 which is associated with <arg>_eCondition</arg>, replacing the second placeholder
232 a runtime-dependent value which should be filled into the error message
233 which is associated with <arg>_eCondition</arg>, replacing the third placeholder
239 css::sdbc::SQLException
241 const ErrorCondition _eCondition
,
242 const css::uno::Reference
< css::uno::XInterface
>& _rxContext
,
243 const ParamValue
& _rParamValue1
= ParamValue(),
244 const ParamValue
& _rParamValue2
= ParamValue(),
245 const ParamValue
& _rParamValue3
= ParamValue()
249 std::shared_ptr
< SQLError_Impl
> m_pImpl
;
253 } // namespace connectivity
256 #endif // INCLUDED_CONNECTIVITY_SQLERROR_HXX
258 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */