mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2024-12-22 06:17:48 +00:00
93 lines
2.7 KiB
C++
93 lines
2.7 KiB
C++
/* Definition of the pqxx::errorhandler class.
|
|
*
|
|
* pqxx::errorhandler handlers errors and warnings in a database session.
|
|
*
|
|
* DO NOT INCLUDE THIS FILE DIRECTLY; include pqxx/errorhandler instead.
|
|
*
|
|
* Copyright (c) 2000-2022, Jeroen T. Vermeulen.
|
|
*
|
|
* See COPYING for copyright license. If you did not receive a file called
|
|
* COPYING with this source code, please notify the distributor of this
|
|
* mistake, or contact the author.
|
|
*/
|
|
#ifndef PQXX_H_ERRORHANDLER
|
|
#define PQXX_H_ERRORHANDLER
|
|
|
|
#if !defined(PQXX_HEADER_PRE)
|
|
# error "Include libpqxx headers as <pqxx/header>, not <pqxx/header.hxx>."
|
|
#endif
|
|
|
|
#include "pqxx/types.hxx"
|
|
|
|
|
|
namespace pqxx::internal::gate
|
|
{
|
|
class errorhandler_connection;
|
|
}
|
|
|
|
|
|
namespace pqxx
|
|
{
|
|
/**
|
|
* @addtogroup errorhandler
|
|
*/
|
|
//@{
|
|
|
|
/// Base class for error-handler callbacks.
|
|
/** To receive errors and warnings from a connection, subclass this with your
|
|
* own error-handler functor, and instantiate it for the connection. Destroying
|
|
* the handler un-registers it.
|
|
*
|
|
* A connection can have multiple error handlers at the same time. When the
|
|
* database connection emits an error or warning message, it passes the message
|
|
* to each error handler, starting with the most recently registered one and
|
|
* progressing towards the oldest one. However an error handler may also
|
|
* instruct the connection not to pass the message to further handlers by
|
|
* returning "false."
|
|
*
|
|
* @warning Strange things happen when a result object outlives its parent
|
|
* connection. If you register an error handler on a connection, then you must
|
|
* not access the result after destroying the connection. This applies even if
|
|
* you destroy the error handler first!
|
|
*/
|
|
class PQXX_LIBEXPORT errorhandler
|
|
{
|
|
public:
|
|
explicit errorhandler(connection &);
|
|
virtual ~errorhandler();
|
|
|
|
/// Define in subclass: receive an error or warning message from the
|
|
/// database.
|
|
/**
|
|
* @return Whether the same error message should also be passed to the
|
|
* remaining, older errorhandlers.
|
|
*/
|
|
virtual bool operator()(char const msg[]) noexcept = 0;
|
|
|
|
errorhandler() = delete;
|
|
errorhandler(errorhandler const &) = delete;
|
|
errorhandler &operator=(errorhandler const &) = delete;
|
|
|
|
private:
|
|
connection *m_home;
|
|
|
|
friend class internal::gate::errorhandler_connection;
|
|
void unregister() noexcept;
|
|
};
|
|
|
|
|
|
/// An error handler that suppresses any previously registered error handlers.
|
|
class quiet_errorhandler : public errorhandler
|
|
{
|
|
public:
|
|
/// Suppress error notices.
|
|
quiet_errorhandler(connection &conn) : errorhandler{conn} {}
|
|
|
|
/// Revert to previous handling of error notices.
|
|
virtual bool operator()(char const[]) noexcept override { return false; }
|
|
};
|
|
|
|
//@}
|
|
} // namespace pqxx
|
|
#endif
|