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.