#include "PgsqlDatabaseCatalogue.h" #include "PgTypeContainer.h" #include "PgDatabaseContainer.h" #include "PgAuthIdContainer.h" #include "PgsqlConn.h" QString getRoleNameFromOid(const PgsqlDatabaseCatalogue *cat, Oid oid) { QString name; const PgAuthIdContainer *auth_ids = cat->authIds(); if (auth_ids) { const PgAuthId& auth_id = auth_ids->getByOid(oid); if (auth_id.valid()) { name = auth_id.name; } } return name; } PgsqlDatabaseCatalogue::PgsqlDatabaseCatalogue() { } PgsqlDatabaseCatalogue::~PgsqlDatabaseCatalogue() { delete m_types; } void PgsqlDatabaseCatalogue::loadAll(Pgsql::Connection &conn) { loadTypes(conn); loadDatabases(conn); loadAuthIds(conn); } void PgsqlDatabaseCatalogue::loadInfo(Pgsql::Connection &conn) { Pgsql::Result r = conn.query("SHOW server_version_num"); if (r && r.resultStatus() == PGRES_TUPLES_OK) if (r.rows() == 1) m_serverVersion << r.get(0, 0); r = conn.query("SELECT version()"); if (r && r.resultStatus() == PGRES_TUPLES_OK) if (r.rows() == 1) m_serverVersionString = r.get(0, 0).asQString(); } void PgsqlDatabaseCatalogue::loadTypes(Pgsql::Connection &conn) { if (m_types == nullptr) m_types = new PgTypeContainer(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"); } void PgsqlDatabaseCatalogue::loadDatabases(Pgsql::Connection &conn) { if (m_databases == nullptr) m_databases = new PgDatabaseContainer(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"); } void PgsqlDatabaseCatalogue::loadAuthIds(Pgsql::Connection &conn) { if (m_authIds == nullptr) m_authIds = new PgAuthIdContainer(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"); } const QString& PgsqlDatabaseCatalogue::serverVersionString() const { return m_serverVersionString; } int PgsqlDatabaseCatalogue::serverVersion() const { return m_serverVersion; } const PgTypeContainer* PgsqlDatabaseCatalogue::types() const { return m_types; } const PgDatabaseContainer *PgsqlDatabaseCatalogue::databases() const { return m_databases; } const PgAuthIdContainer *PgsqlDatabaseCatalogue::authIds() const { return m_authIds; }