2017-12-09 10:45:13 +01:00
|
|
|
|
#include "PgDatabaseCatalogue.h"
|
2017-02-12 14:03:42 +01:00
|
|
|
|
#include "PgTypeContainer.h"
|
|
|
|
|
|
#include "PgDatabaseContainer.h"
|
2017-02-18 12:05:48 +01:00
|
|
|
|
#include "PgAuthIdContainer.h"
|
2017-08-26 11:45:50 +02:00
|
|
|
|
#include "Pgsql_Connection.h"
|
2017-01-25 06:52:02 +01:00
|
|
|
|
|
2017-02-18 12:05:48 +01:00
|
|
|
|
|
2017-12-09 20:21:22 +01:00
|
|
|
|
QString getRoleNameFromOid(std::shared_ptr<const PgDatabaseCatalogue> cat, Oid oid)
|
2017-02-18 12:05:48 +01:00
|
|
|
|
{
|
|
|
|
|
|
QString name;
|
2017-12-09 10:45:13 +01:00
|
|
|
|
auto auth_ids = cat->authIds();
|
2017-02-18 12:05:48 +01:00
|
|
|
|
if (auth_ids) {
|
|
|
|
|
|
const PgAuthId& auth_id = auth_ids->getByOid(oid);
|
|
|
|
|
|
if (auth_id.valid()) {
|
|
|
|
|
|
name = auth_id.name;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return name;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2017-12-09 20:21:22 +01:00
|
|
|
|
QString getRoleDisplayString(std::shared_ptr<const PgDatabaseCatalogue> cat, Oid oid)
|
2017-12-09 10:45:13 +01:00
|
|
|
|
{
|
|
|
|
|
|
QString name = getRoleNameFromOid(cat, oid);
|
|
|
|
|
|
return QString("%1 (%2)").arg(name).arg(oid);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-08-26 11:44:40 +02:00
|
|
|
|
PgDatabaseCatalogue::PgDatabaseCatalogue()
|
2017-01-25 06:52:02 +01:00
|
|
|
|
{
|
|
|
|
|
|
}
|
2017-02-01 20:00:25 +01:00
|
|
|
|
|
2017-08-26 11:44:40 +02:00
|
|
|
|
PgDatabaseCatalogue::~PgDatabaseCatalogue()
|
2017-02-01 20:00:25 +01:00
|
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2017-08-26 11:44:40 +02:00
|
|
|
|
void PgDatabaseCatalogue::loadAll(Pgsql::Connection &conn)
|
2017-02-01 20:00:25 +01:00
|
|
|
|
{
|
|
|
|
|
|
loadTypes(conn);
|
2017-02-12 14:03:42 +01:00
|
|
|
|
loadDatabases(conn);
|
2017-02-18 12:05:48 +01:00
|
|
|
|
loadAuthIds(conn);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2017-08-26 11:44:40 +02:00
|
|
|
|
void PgDatabaseCatalogue::loadInfo(Pgsql::Connection &conn)
|
2017-02-18 12:05:48 +01:00
|
|
|
|
{
|
|
|
|
|
|
Pgsql::Result r = conn.query("SHOW server_version_num");
|
|
|
|
|
|
if (r && r.resultStatus() == PGRES_TUPLES_OK)
|
|
|
|
|
|
if (r.rows() == 1)
|
2017-08-22 12:45:45 +02:00
|
|
|
|
m_serverVersion << r.get(0, 0);
|
2017-02-18 12:05:48 +01:00
|
|
|
|
|
|
|
|
|
|
r = conn.query("SELECT version()");
|
|
|
|
|
|
if (r && r.resultStatus() == PGRES_TUPLES_OK)
|
|
|
|
|
|
if (r.rows() == 1)
|
2017-08-22 12:45:45 +02:00
|
|
|
|
m_serverVersionString = r.get(0, 0).asQString();
|
2017-02-01 20:00:25 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
2017-12-09 21:46:19 +01:00
|
|
|
|
void load(Pgsql::Connection &conn, IPgContainter &pg_cont)
|
2017-02-01 20:00:25 +01:00
|
|
|
|
{
|
2017-12-09 21:46:19 +01:00
|
|
|
|
std::string q = pg_cont.getLoadQuery();
|
2017-02-01 20:00:25 +01:00
|
|
|
|
Pgsql::Result result = conn.query(q.c_str());
|
2017-02-18 12:05:48 +01:00
|
|
|
|
if (result && result.resultStatus() == PGRES_TUPLES_OK)
|
2017-12-09 21:46:19 +01:00
|
|
|
|
pg_cont.load(result);
|
2017-02-18 12:05:48 +01:00
|
|
|
|
else
|
|
|
|
|
|
throw std::runtime_error("Query failed");
|
|
|
|
|
|
|
2017-02-01 20:00:25 +01:00
|
|
|
|
}
|
2017-02-12 14:03:42 +01:00
|
|
|
|
|
2017-12-09 21:46:19 +01:00
|
|
|
|
void PgDatabaseCatalogue::loadTypes(Pgsql::Connection &conn)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (!m_types)
|
|
|
|
|
|
m_types = std::make_shared<PgTypeContainer>(shared_from_this());
|
|
|
|
|
|
|
|
|
|
|
|
load(conn, *m_types);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2017-08-26 11:44:40 +02:00
|
|
|
|
void PgDatabaseCatalogue::loadDatabases(Pgsql::Connection &conn)
|
2017-02-12 14:03:42 +01:00
|
|
|
|
{
|
2017-12-09 20:21:22 +01:00
|
|
|
|
if (!m_databases)
|
|
|
|
|
|
m_databases = std::make_shared<PgDatabaseContainer>(shared_from_this());
|
2017-02-18 12:05:48 +01:00
|
|
|
|
|
2017-12-09 21:46:19 +01:00
|
|
|
|
load(conn, *m_databases);
|
2017-02-18 12:05:48 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
2017-08-26 11:44:40 +02:00
|
|
|
|
void PgDatabaseCatalogue::loadAuthIds(Pgsql::Connection &conn)
|
2017-02-18 12:05:48 +01:00
|
|
|
|
{
|
2017-12-09 20:21:22 +01:00
|
|
|
|
if (!m_authIds)
|
|
|
|
|
|
m_authIds = std::make_shared<PgAuthIdContainer>(shared_from_this());
|
2017-02-18 12:05:48 +01:00
|
|
|
|
|
2017-12-09 21:46:19 +01:00
|
|
|
|
load(conn, *m_authIds);
|
2017-02-18 12:05:48 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
2017-08-26 11:44:40 +02:00
|
|
|
|
const QString& PgDatabaseCatalogue::serverVersionString() const
|
2017-02-18 12:05:48 +01:00
|
|
|
|
{
|
|
|
|
|
|
return m_serverVersionString;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2017-08-26 11:44:40 +02:00
|
|
|
|
int PgDatabaseCatalogue::serverVersion() const
|
2017-02-18 12:05:48 +01:00
|
|
|
|
{
|
|
|
|
|
|
return m_serverVersion;
|
2017-02-12 14:03:42 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
2017-12-09 20:21:22 +01:00
|
|
|
|
std::shared_ptr<const PgTypeContainer> PgDatabaseCatalogue::types() const
|
2017-02-12 14:03:42 +01:00
|
|
|
|
{
|
|
|
|
|
|
return m_types;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2017-12-09 20:21:22 +01:00
|
|
|
|
std::shared_ptr<const PgDatabaseContainer> PgDatabaseCatalogue::databases() const
|
2017-02-12 14:03:42 +01:00
|
|
|
|
{
|
|
|
|
|
|
return m_databases;
|
|
|
|
|
|
}
|
2017-02-18 12:05:48 +01:00
|
|
|
|
|
2017-12-09 20:21:22 +01:00
|
|
|
|
std::shared_ptr<const PgAuthIdContainer> PgDatabaseCatalogue::authIds() const
|
2017-02-18 12:05:48 +01:00
|
|
|
|
{
|
|
|
|
|
|
return m_authIds;
|
|
|
|
|
|
}
|