pgLab/pglablib/catalog/PgContainer.cpp

35 lines
839 B
C++

#include "PgContainer.h"
#include "PgDatabaseCatalog.h"
#include "Pgsql_Connection.h"
IPgContainer::IPgContainer(PgDatabaseCatalog& cat)
: m_catalog(cat)
{}
bool IPgContainer::minimumVersion(int required_version) const
{
return m_catalog.serverVersion() >= required_version;
}
bool IPgContainer::lessThenVersion(int required_version) const
{
return m_catalog.serverVersion() < required_version;
}
void IPgContainer::loadAll(Pgsql::Connection &conn)
{
std::string q = getLoadQuery();
Pgsql::Result result = conn.query(q.c_str());
if (result && result.resultStatus() == PGRES_TUPLES_OK) {
load(result);
}
else {
auto details = result.diagDetails();
if (details.state == "42501") { // permission denied
// ignore this for now
}
else {
throw std::runtime_error("Query failed\n" + details.errorMessage);
}
}
}