25#ifndef FBCPP_EXCEPTION_H
26#define FBCPP_EXCEPTION_H
44 class StatusWrapper :
public fb::IStatusImpl<StatusWrapper, StatusWrapper>
47 explicit StatusWrapper(Client& client, IStatus* status)
54 static void checkException(StatusWrapper* status);
56 static void catchException(IStatus* status)
noexcept;
58 static void clearException(StatusWrapper* status)
noexcept
60 status->clearException();
72 bool isDirty() const noexcept
77 bool hasData() const noexcept
79 return getState() & IStatus::STATE_ERRORS;
82 bool isEmpty() const noexcept
87 static void setVersionError(
88 IStatus* status,
const char* interfaceName, uintptr_t currentVersion, uintptr_t expectedVersion)
noexcept
91 const intptr_t codes[] = {
92 isc_arg_gds, isc_interface_version_too_old,
93 isc_arg_number, (intptr_t) expectedVersion,
94 isc_arg_number, (intptr_t) currentVersion,
95 isc_arg_string, (intptr_t) interfaceName,
100 status->setErrors(codes);
104 void dispose() noexcept
override
111 void init() noexcept
override
116 unsigned getState() const noexcept
override
118 return dirty ? status->getState() : 0;
121 void setErrors2(
unsigned length,
const intptr_t* value)
noexcept override
124 status->setErrors2(length, value);
127 void setWarnings2(
unsigned length,
const intptr_t* value)
noexcept override
130 status->setWarnings2(length, value);
133 void setErrors(
const intptr_t* value)
noexcept override
136 status->setErrors(value);
139 void setWarnings(
const intptr_t* value)
noexcept override
142 status->setWarnings(value);
145 const intptr_t* getErrors() const noexcept
override
147 return dirty ? status->getErrors() : cleanStatus();
150 const intptr_t* getWarnings() const noexcept
override
152 return dirty ? status->getWarnings() : cleanStatus();
155 IStatus* clone() const noexcept
override
157 return status->clone();
165 static const intptr_t* cleanStatus() noexcept
167 static intptr_t clean[3] = {1, 0, 0};
182 using std::runtime_error::runtime_error;
185 : std::runtime_error{message}
193 using FbCppException::FbCppException;
201 static std::string buildMessage(
Client& client,
const std::intptr_t* status);
Represents a Firebird client library instance.