#ifndef PGSQLDATABASECATALOGUE_H #define PGSQLDATABASECATALOGUE_H #include #include #include #include #include namespace Pgsql { class Connection; } class PgAttributeContainer; class PgAuthIdContainer; class PgClassContainer; class PgConstraintContainer; class PgDatabaseContainer; class PgIndexContainer; class PgNamespaceContainer; class PgTypeContainer; class PgDatabaseCatalog: public std::enable_shared_from_this { public: PgDatabaseCatalog(); PgDatabaseCatalog(const PgDatabaseCatalog&) = delete; PgDatabaseCatalog& operator = (const PgDatabaseCatalog&) = delete; ~PgDatabaseCatalog(); void loadAll(Pgsql::Connection &conn, std::function progress_callback); void loadInfo(Pgsql::Connection &conn); const QString& serverVersionString() const; int serverVersion() const; std::shared_ptr attributes() const; std::shared_ptr authIds() const; std::shared_ptr classes() const; std::shared_ptr constraints() const; std::shared_ptr databases() const; std::shared_ptr indexes() const; std::shared_ptr namespaces() const; std::shared_ptr types() const; private: QString m_serverVersionString; int m_serverVersion; std::shared_ptr m_attributes; std::shared_ptr m_authIds; std::shared_ptr m_classes; std::shared_ptr m_constraints; std::shared_ptr m_databases; std::shared_ptr m_indexes; std::shared_ptr m_namespaces; std::shared_ptr m_types; template void load2(std::shared_ptr &ptr, Pgsql::Connection &conn) { if (!ptr) ptr = std::make_shared(shared_from_this()); load(conn, *ptr); } }; QString getRoleNameFromOid(const PgDatabaseCatalog &cat, Oid oid); QString getRoleDisplayString(const PgDatabaseCatalog &cat, Oid oid); QString getNamespaceDisplayString(const PgDatabaseCatalog &cat, Oid oid); QString getTablespaceDisplayString(const PgDatabaseCatalog &cat, Oid oid); QString getTypeDisplayString(const PgDatabaseCatalog &cat, Oid oid, int32_t typmod = -1); QString getIndexDisplayString(const PgDatabaseCatalog &cat, Oid oid); QString getClassDisplayString(const PgDatabaseCatalog &cat, Oid oid); #endif // PGSQLDATABASECATALOGUE_H