Populate table sizes

This commit is contained in:
eelke 2023-01-22 16:46:14 +01:00
parent 39dbab4d36
commit abc0dd892f
10 changed files with 47 additions and 62 deletions

View file

@ -57,10 +57,7 @@ void TablesTableModel::refresh()
if (!m_catalog)
return;
// Later afscheiden naar filter functie
auto classes = m_catalog->classes();
std::map<Oid, int> oidIndex;
rootNode.reset();
auto nsfilter = GetNamespaceFilterLambda();
@ -70,7 +67,8 @@ void TablesTableModel::refresh()
temp.emplace(e.oid(), e);
TableTreeBuilder treeBuilder(temp, *m_catalog->inherits());
rootNode = treeBuilder.Build();
auto [rn, oidIndex] = treeBuilder.Build();
rootNode = rn;
StartLoadTableSizes(std::move(oidIndex));
}
@ -189,16 +187,6 @@ QVariant TablesTableModel::getData(const QModelIndex &index) const
return QVariant();
}
//PgClass TablesTableModel::getTable(int row) const
//{
// return rootNode->children[row]->_class;
//}
//Oid TablesTableModel::getTableOid(int row) const
//{
// return rootNode->children[row]->_class.oid();
//}
QVariant TablesTableModel::data(const QModelIndex &index, int role) const
{
if (role == Qt::DisplayRole)
@ -221,7 +209,7 @@ QVariant TablesTableModel::data(const QModelIndex &index, int role) const
return QVariant();
}
void TablesTableModel::StartLoadTableSizes(std::map<Oid, int> oidIndex)
void TablesTableModel::StartLoadTableSizes(OidClassIndex oidIndex)
{
QPointer p(this);
QtConcurrent::run([this]
@ -231,7 +219,7 @@ void TablesTableModel::StartLoadTableSizes(std::map<Oid, int> oidIndex)
.then(qApp, [p, oidIndex] (TableSizes sizes)
{
if (p)
p.data()->PopulateSizes(std::move(oidIndex), std::move(sizes));
p.data()->PopulateSizes(oidIndex, sizes);
});
}
@ -280,20 +268,23 @@ TablesTableModel::TableSizes TablesTableModel::QueryTableSizes() const
return sizes;
}
void TablesTableModel::PopulateSizes(std::map<Oid, int> oidIndex, std::vector<TableSize> sizes)
void TablesTableModel::PopulateSizes(
const OidClassIndex &oidIndex,
const std::vector<TableSize> &sizes
)
{
// for (auto s : sizes)
// {
// auto findIter = oidIndex.find(s.oid);
// if (findIter != oidIndex.end())
// {
// rootNode->children[findIter->second]->sizes = s;
// }
// }
// emit dataChanged(
// createIndex(0, TotalSizeCol),
// createIndex(static_cast<int>(rootNode->children.size()), ToastSizeCol)
// );
for (auto s : sizes)
{
auto findIter = oidIndex.find(s.oid);
if (findIter != oidIndex.end())
{
findIter->second->sizes = s;
}
}
emit dataChanged(
index(0, TotalSizeCol),
index(static_cast<int>(rootNode->children.size()), ToastSizeCol)
);
}
const TableNode* TablesTableModel::nodeFromIndex(const QModelIndex &index)

View file

@ -50,12 +50,10 @@ public:
QVariant data(const QModelIndex &index, int role) const override;
// PgClass getTable(int row) const;
RowItem rowItem(const QModelIndex &index) const
{
return nodeFromIndex(index)->_class;
}
// Oid getTableOid(int row) const;
static const TableNode* nodeFromIndex(const QModelIndex &index);
@ -69,7 +67,6 @@ private:
std::shared_ptr<const PgDatabaseCatalog> m_catalog;
NamespaceFilter m_namespaceFilter = NamespaceFilter::User;
//t_Tables m_tables;
std::shared_ptr<TableNode> rootNode;
QMetaObject::Connection refreshConnection;
std::shared_ptr<OpenDatabase> openDatabase;
@ -78,9 +75,14 @@ private:
Oid getType(int column) const;
QVariant getData(const QModelIndex &index) const;
void StartLoadTableSizes(std::map<Oid, int> oidIndex);
using OidClassIndex = std::map<Oid, std::shared_ptr<TableNode>>;
void StartLoadTableSizes(OidClassIndex oidIndex);
TableSizes QueryTableSizes() const;
void PopulateSizes(std::map<Oid, int> oidIndex, std::vector<TableSize> sizes);
void PopulateSizes(
const OidClassIndex &oidIndex,
const std::vector<TableSize> &sizes
);
std::function<bool(const PgClass&)> GetNamespaceFilterLambda();

View file

@ -27,7 +27,7 @@ CatalogTablesPage::CatalogTablesPage(std::shared_ptr<OpenDatabase> opendatabase,
: QSplitter(Qt::Horizontal, parent)
, m_tablesTableView(this, new TablesTableModel(opendatabase, this))
{
auto tv = m_tablesTableView.tableView();
auto tv = m_tablesTableView.itemView();
tv->setSelectionMode(QAbstractItemView::SingleSelection);
m_detailsTabs = new QTabWidget(this);

View file

@ -12,7 +12,7 @@ DatabasesPage::DatabasesPage(std::shared_ptr<OpenDatabase> opendatabase, QWidget
: QSplitter(Qt::Horizontal, parent)
, m_databasesTableView(this, new DatabasesTableModel(opendatabase, this))
{
auto tv = m_databasesTableView.tableView();
auto tv = m_databasesTableView.itemView();
tv->setSelectionMode(QAbstractItemView::SingleSelection);
tv->setContextMenuPolicy(Qt::ActionsContextMenu);
@ -23,7 +23,7 @@ DatabasesPage::DatabasesPage(std::shared_ptr<OpenDatabase> opendatabase, QWidget
m_tableSql = new SqlCodePreview(this);
addWidget(m_tableSql);
connect(m_databasesTableView.tableView()->selectionModel(), &QItemSelectionModel::currentRowChanged,
connect(m_databasesTableView.itemView()->selectionModel(), &QItemSelectionModel::currentRowChanged,
this, &DatabasesPage::databaseSelectionChanged);
connect(createDbAction, &QAction::triggered,
[this](auto checked)
@ -37,7 +37,7 @@ void DatabasesPage::setCatalog(std::shared_ptr<PgDatabaseCatalog> cat)
{
m_catalog = cat;
m_databasesTableView.dataModel()->setDatabaseList(cat);
m_databasesTableView.tableView()->resizeColumnsToContents();
m_databasesTableView.itemView()->resizeColumnsToContents();
}
void DatabasesPage::updateDatabaseDetails(const PgDatabase &db)

View file

@ -6,7 +6,7 @@ RolesPage::RolesPage(QWidget * parent)
: QSplitter(Qt::Horizontal, parent)
, m_rolesTableView(this)
{
auto tv = m_rolesTableView.tableView();
auto tv = m_rolesTableView.itemView();
tv->setSelectionMode(QAbstractItemView::SingleSelection);
m_detailsTabs = new QTabWidget(this);
@ -19,5 +19,5 @@ void RolesPage::setCatalog(std::shared_ptr<PgDatabaseCatalog> cat)
{
m_catalog = cat;
m_rolesTableView.dataModel()->setRoleList(cat->authIds());
m_rolesTableView.tableView()->resizeColumnsToContents();
m_rolesTableView.itemView()->resizeColumnsToContents();
}

View file

@ -42,7 +42,7 @@ public:
: PgLabTableViewHelper(parent, new TableModel(parent))
{}
ViewType *tableView() const
ViewType *itemView() const
{
return m_tableView;
}

View file

@ -12,7 +12,7 @@ TableTreeBuilder::TableTreeBuilder(
{
}
std::shared_ptr<TableNode> TableTreeBuilder::Build()
std::tuple<std::shared_ptr<TableNode>, std::map<Oid, std::shared_ptr<TableNode>>> TableTreeBuilder::Build()
{
rootNode = std::make_shared<TableNode>();
@ -29,16 +29,9 @@ std::shared_ptr<TableNode> TableTreeBuilder::Build()
addNode(e.second);
}
AssignNodeIndexesAndParents(rootNode);
auto ret = rootNode;
resetState();
return ret;
return { rootNode, std::move(processedNodes) };
}
void TableTreeBuilder::resetState()
{
rootNode.reset();
processedNodes.clear();
}
std::shared_ptr<TableNode> TableTreeBuilder::addNode(const PgClass &cls)
{
@ -46,13 +39,13 @@ std::shared_ptr<TableNode> TableTreeBuilder::addNode(const PgClass &cls)
processedNodes.emplace(cls.oid(), node);
std::vector<Oid> parents = inheritance.getParentsOf(cls.oid());
if (parents.empty())
addToplevelNode(node);
addToToplevel(node);
else
addToParents(node, parents);
return node;
}
void TableTreeBuilder::addToplevelNode(std::shared_ptr<TableNode> node)
void TableTreeBuilder::addToToplevel(std::shared_ptr<TableNode> node)
{
rootNode->children.push_back(node);
}

View file

@ -13,7 +13,7 @@ class TableTreeBuilder
public:
TableTreeBuilder(const std::map<Oid, PgClass> &source, const IFindParents &inheritance);
std::shared_ptr<TableNode> Build();
std::tuple<std::shared_ptr<TableNode>, std::map<Oid, std::shared_ptr<TableNode>>> Build();
private:
const std::map<Oid, PgClass> &source;
@ -21,10 +21,9 @@ private:
std::map<Oid, std::shared_ptr<TableNode>> processedNodes;
std::shared_ptr<TableNode> rootNode;
void resetState();
bool hasParent(const PgClass &cls) const;
std::shared_ptr<TableNode> addNode(const PgClass &cls);
void addToplevelNode(std::shared_ptr<TableNode> node);
void addToToplevel(std::shared_ptr<TableNode> node);
void addToParents(std::shared_ptr<TableNode> node, const std::vector<Oid> &parents);
std::shared_ptr<TableNode> getParent(Oid oid);
void AssignNodeIndexesAndParents(std::shared_ptr<TableNode> parent);

View file

@ -25,21 +25,21 @@ namespace Pgsql {
return *this;
}
bool operator==(const ResultConstIterator &rhs)
bool operator==(const ResultConstIterator &rhs) const
{
return m_row == rhs.m_row;
}
bool operator!=(const ResultConstIterator &rhs)
bool operator!=(const ResultConstIterator &rhs) const
{
return !operator==(rhs);
}
const Row& operator*()
const Row& operator*() const
{
return m_row;
}
const Row& operator->()
const Row& operator->() const
{
return m_row;
}

View file

@ -13,7 +13,7 @@ TEST(TableTreeBuilder, EmptySourceEmptyResult)
PgDatabaseCatalog catalog;
PgInheritsContainer inherited(catalog);
TableTreeBuilder builder(source, inherited);
auto result = builder.Build();
auto [result, index] = builder.Build();
EXPECT_EQ(result->children.size(), 0);
}
@ -28,7 +28,7 @@ TEST(TableTreeBuilder, TopLevelOnly)
source.emplace(1000, cls1);
PgInheritsContainer inherited(catalog);
TableTreeBuilder builder(source, inherited);
auto result = builder.Build();
auto [result, index] = builder.Build();
EXPECT_EQ(result->children.size(), 1);
}
@ -56,7 +56,7 @@ TEST(TableTreeBuilder, WithChild)
source.emplace(1002, cls2);
PgInheritsContainer inherited(catalog);
TableTreeBuilder builder(source, findParents);
auto result = builder.Build();
auto [result, index] = builder.Build();
EXPECT_EQ(result->children.size(), 1);
EXPECT_EQ(result->children[0]->children.size(), 1);