31using namespace fbcpp::impl;
34void StatusWrapper::checkException(StatusWrapper* status)
36 if (status->dirty && (status->getState() & fb::IStatus::STATE_ERRORS))
40void StatusWrapper::catchException(fb::IStatus* status)
noexcept
46std::string DatabaseException::buildMessage(
Client& client,
const std::intptr_t* statusVector)
48 constexpr char DEFAULT_MESSAGE[] =
"Unknown database error";
51 return DEFAULT_MESSAGE;
53 const auto util = client.
getUtil();
56 status->setErrors(statusVector);
58 constexpr unsigned MAX_BUFFER_SIZE = 32u * 1024u;
59 unsigned bufferSize = 256u;
62 while (bufferSize <= MAX_BUFFER_SIZE)
64 std::string buffer(bufferSize,
'\0');
65 const auto written = util->formatStatus(buffer.data(), bufferSize, status.get());
67 if (written < bufferSize && buffer[0] !=
'\0')
69 message = written == 0 ? std::string{buffer.c_str()} : std::string{buffer.data(), written};
73 if (bufferSize == MAX_BUFFER_SIZE)
75 message = buffer.c_str();
79 bufferSize = (bufferSize > MAX_BUFFER_SIZE / 2u) ? MAX_BUFFER_SIZE : bufferSize * 2u;
83 message = DEFAULT_MESSAGE;
Represents a Firebird client library instance.
fb::IUtil * getUtil()
Returns a Firebird IUtil interface.
FbUniquePtr< fb::IStatus > newStatus()
Creates and returns a Firebird IStatus instance.