Deduplication of loading logic for catalog data.

This commit is contained in:
eelke 2017-12-09 21:46:19 +01:00
parent ea035f58c8
commit cd4e99cd11
6 changed files with 33 additions and 28 deletions

View file

@ -53,18 +53,23 @@ void PgDatabaseCatalogue::loadInfo(Pgsql::Connection &conn)
m_serverVersionString = r.get(0, 0).asQString();
}
void load(Pgsql::Connection &conn, IPgContainter &pg_cont)
{
std::string q = pg_cont.getLoadQuery();
Pgsql::Result result = conn.query(q.c_str());
if (result && result.resultStatus() == PGRES_TUPLES_OK)
pg_cont.load(result);
else
throw std::runtime_error("Query failed");
}
void PgDatabaseCatalogue::loadTypes(Pgsql::Connection &conn)
{
if (!m_types)
m_types = std::make_shared<PgTypeContainer>(shared_from_this());
std::string q = m_types->getLoadQuery();
Pgsql::Result result = conn.query(q.c_str());
if (result && result.resultStatus() == PGRES_TUPLES_OK)
m_types->load(result);
else
throw std::runtime_error("Query failed");
load(conn, *m_types);
}
void PgDatabaseCatalogue::loadDatabases(Pgsql::Connection &conn)
@ -72,13 +77,7 @@ void PgDatabaseCatalogue::loadDatabases(Pgsql::Connection &conn)
if (!m_databases)
m_databases = std::make_shared<PgDatabaseContainer>(shared_from_this());
std::string q = m_databases->getLoadQuery();
Pgsql::Result result = conn.query(q.c_str());
if (result && result.resultStatus() == PGRES_TUPLES_OK)
m_databases->load(result);
else
throw std::runtime_error("Query failed");
load(conn, *m_databases);
}
void PgDatabaseCatalogue::loadAuthIds(Pgsql::Connection &conn)
@ -86,12 +85,7 @@ void PgDatabaseCatalogue::loadAuthIds(Pgsql::Connection &conn)
if (!m_authIds)
m_authIds = std::make_shared<PgAuthIdContainer>(shared_from_this());
std::string q = m_authIds->getLoadQuery();
Pgsql::Result result = conn.query(q.c_str());
if (result && result.resultStatus() == PGRES_TUPLES_OK)
m_authIds->load(result);
else
throw std::runtime_error("Query failed");
load(conn, *m_authIds);
}
const QString& PgDatabaseCatalogue::serverVersionString() const