#ifndef PGSQLDATABASECATALOGUE_H #define PGSQLDATABASECATALOGUE_H #include #include #include #include #include #include #include namespace Pgsql { class Connection; } class PgAttributeContainer; class PgAuthIdContainer; class PgClassContainer; class PgConstraintContainer; class PgDatabaseContainer; class PgIndexContainer; class PgNamespaceContainer; class PgAmContainer; class PgTablespaceContainer; class PgTriggerContainer; class PgTypeContainer; class PgDatabaseCatalog: public QObject, public std::enable_shared_from_this { Q_OBJECT 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; const QString& getDBName() const { return m_dbName; } 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 ams() const; std::shared_ptr namespaces() const; std::shared_ptr tablespaces() const; std::shared_ptr triggers() const; std::shared_ptr types() const; enum RefreshFlag { Attributes = 1, AuthIds = (1 << 1), Classes = (1 << 2), Constraints = (1 << 3), Databases = (1 << 4), Indexes = (1 << 5), Ams = (1 << 6), Namespaces = (1 << 7), Tablespaces = (1 << 8), Triggers = (1 << 9), Types = (1 << 10), All = 0xffffffff }; using RefreshFlags = int; signals: void refreshed(const PgDatabaseCatalog *catalog, RefreshFlags flags); private: QString m_serverVersionString; int m_serverVersion; QString m_dbName; 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_ams; std::shared_ptr m_namespaces; std::shared_ptr m_tablespaces; std::shared_ptr m_triggers; 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