37 lines
1.1 KiB
C++
37 lines
1.1 KiB
C++
#include "postgres_error.hpp"
|
|
|
|
#include <sstream>
|
|
|
|
#include <libpq-fe.h>
|
|
|
|
namespace matador::backends::postgres {
|
|
|
|
void throw_postgres_error(const char *what, const std::string &source)
|
|
{
|
|
std::stringstream msg;
|
|
msg << "postgres error (" << source << "): " << what;
|
|
throw std::logic_error(msg.str());
|
|
}
|
|
|
|
void throw_postgres_error(PGconn *db, const std::string &source)
|
|
{
|
|
if (PQstatus(db) == CONNECTION_BAD) {
|
|
throw_postgres_error(PQerrorMessage(db), source);
|
|
}
|
|
}
|
|
|
|
void throw_postgres_error(PGresult *res, PGconn *db, const std::string &source, const std::string &sql)
|
|
{
|
|
if (res == nullptr) {
|
|
std::stringstream msg;
|
|
msg << "postgres error (" << source << ", " << PQerrorMessage(db) << ": " << sql;
|
|
throw std::logic_error(msg.str());
|
|
} else if ((PQresultStatus(res) != PGRES_COMMAND_OK &&
|
|
PQresultStatus(res) != PGRES_TUPLES_OK)) {
|
|
std::stringstream msg;
|
|
msg << "postgres error (" << source << ", " << PQresultErrorField(res, PG_DIAG_SQLSTATE) << ") " << PQerrorMessage(db) << ": " << sql;
|
|
throw std::logic_error(msg.str());
|
|
}
|
|
}
|
|
|
|
} |