lazy load the database sizes only when needed by the server inspector.

This commit is contained in:
eelke 2022-01-19 19:10:05 +01:00
parent 39195153cd
commit b5a706a2a2
10 changed files with 165 additions and 70 deletions

View file

@ -2,11 +2,11 @@
#define DATABASESTABLEMODEL_H
#include "BaseTableModel.h"
#include "catalog/PgDatabase.h"
#include <memory>
class PgDatabaseContainer;
class OpenDatabase;
class PgDatabaseCatalog;
class PgDatabase;
/** Class for displaying the list of databases of a server in a QTableView
*
@ -24,7 +24,7 @@ public:
explicit DatabasesTableModel(QObject *parent);
explicit DatabasesTableModel(std::shared_ptr<OpenDatabase> opendatabase, QObject *parent);
void setDatabaseList(std::shared_ptr<const PgDatabaseCatalog> cat);
@ -41,8 +41,36 @@ public:
protected:
virtual QVariant getDataMeaning(const QModelIndex &index) const override;
private:
class DatabaseSize {
public:
Oid oid;
int64_t totalBytes;
DatabaseSize()
: oid(InvalidOid)
, totalBytes(-1)
{}
};
using DatabaseSizes = std::vector<DatabaseSize>;
class Database {
public:
PgDatabase database;
DatabaseSize size;
Database(const PgDatabase &db)
: database(db)
{}
};
using Databases = std::vector<Database>;
std::shared_ptr<OpenDatabase> openDatabase;
std::shared_ptr<const PgDatabaseCatalog> m_catalog;
std::shared_ptr<const PgDatabaseContainer> m_databases;
Databases databases;
void StartLoadDatabaseSizes(std::map<Oid, int> oidIndex);
DatabaseSizes QueryDatabaseSizes();
void PopulateSizes(std::map<Oid, int> oidIndex, DatabaseSizes sizes);
};
#endif // DATABASESTABLEMODEL_H