diff --git a/pglab/catalog/tables/TablesTableModel.cpp b/pglab/catalog/tables/TablesTableModel.cpp index 8c80749..2d49c75 100644 --- a/pglab/catalog/tables/TablesTableModel.cpp +++ b/pglab/catalog/tables/TablesTableModel.cpp @@ -57,10 +57,7 @@ void TablesTableModel::refresh() if (!m_catalog) return; - // Later afscheiden naar filter functie auto classes = m_catalog->classes(); - - std::map 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 oidIndex) +void TablesTableModel::StartLoadTableSizes(OidClassIndex oidIndex) { QPointer p(this); QtConcurrent::run([this] @@ -231,7 +219,7 @@ void TablesTableModel::StartLoadTableSizes(std::map 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 oidIndex, std::vector sizes) +void TablesTableModel::PopulateSizes( + const OidClassIndex &oidIndex, + const std::vector &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(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(rootNode->children.size()), ToastSizeCol) + ); } const TableNode* TablesTableModel::nodeFromIndex(const QModelIndex &index) diff --git a/pglab/catalog/tables/TablesTableModel.h b/pglab/catalog/tables/TablesTableModel.h index c204b60..2e02aa5 100644 --- a/pglab/catalog/tables/TablesTableModel.h +++ b/pglab/catalog/tables/TablesTableModel.h @@ -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 m_catalog; NamespaceFilter m_namespaceFilter = NamespaceFilter::User; - //t_Tables m_tables; std::shared_ptr rootNode; QMetaObject::Connection refreshConnection; std::shared_ptr openDatabase; @@ -78,9 +75,14 @@ private: Oid getType(int column) const; QVariant getData(const QModelIndex &index) const; - void StartLoadTableSizes(std::map oidIndex); + using OidClassIndex = std::map>; + + void StartLoadTableSizes(OidClassIndex oidIndex); TableSizes QueryTableSizes() const; - void PopulateSizes(std::map oidIndex, std::vector sizes); + void PopulateSizes( + const OidClassIndex &oidIndex, + const std::vector &sizes + ); std::function GetNamespaceFilterLambda(); diff --git a/pglab/catalog/widgets/CatalogTablesPage.cpp b/pglab/catalog/widgets/CatalogTablesPage.cpp index baeafff..d2d03f5 100644 --- a/pglab/catalog/widgets/CatalogTablesPage.cpp +++ b/pglab/catalog/widgets/CatalogTablesPage.cpp @@ -27,7 +27,7 @@ CatalogTablesPage::CatalogTablesPage(std::shared_ptr 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); diff --git a/pglab/serverinspector/DatabasesPage.cpp b/pglab/serverinspector/DatabasesPage.cpp index 60f1aa6..0e3fc0a 100644 --- a/pglab/serverinspector/DatabasesPage.cpp +++ b/pglab/serverinspector/DatabasesPage.cpp @@ -12,7 +12,7 @@ DatabasesPage::DatabasesPage(std::shared_ptr 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, 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 cat) { m_catalog = cat; m_databasesTableView.dataModel()->setDatabaseList(cat); - m_databasesTableView.tableView()->resizeColumnsToContents(); + m_databasesTableView.itemView()->resizeColumnsToContents(); } void DatabasesPage::updateDatabaseDetails(const PgDatabase &db) diff --git a/pglab/serverinspector/RolesPage.cpp b/pglab/serverinspector/RolesPage.cpp index 529350a..6ea7a3a 100644 --- a/pglab/serverinspector/RolesPage.cpp +++ b/pglab/serverinspector/RolesPage.cpp @@ -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 cat) { m_catalog = cat; m_rolesTableView.dataModel()->setRoleList(cat->authIds()); - m_rolesTableView.tableView()->resizeColumnsToContents(); + m_rolesTableView.itemView()->resizeColumnsToContents(); } diff --git a/pglab/util/PgLabTableViewHelper.h b/pglab/util/PgLabTableViewHelper.h index e2c88c8..8d1b86d 100644 --- a/pglab/util/PgLabTableViewHelper.h +++ b/pglab/util/PgLabTableViewHelper.h @@ -42,7 +42,7 @@ public: : PgLabTableViewHelper(parent, new TableModel(parent)) {} - ViewType *tableView() const + ViewType *itemView() const { return m_tableView; } diff --git a/pglablib/ui/catalog/tables/TableTreeBuilder.cpp b/pglablib/ui/catalog/tables/TableTreeBuilder.cpp index 430210f..44a3269 100644 --- a/pglablib/ui/catalog/tables/TableTreeBuilder.cpp +++ b/pglablib/ui/catalog/tables/TableTreeBuilder.cpp @@ -12,7 +12,7 @@ TableTreeBuilder::TableTreeBuilder( { } -std::shared_ptr TableTreeBuilder::Build() +std::tuple, std::map>> TableTreeBuilder::Build() { rootNode = std::make_shared(); @@ -29,16 +29,9 @@ std::shared_ptr 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 TableTreeBuilder::addNode(const PgClass &cls) { @@ -46,13 +39,13 @@ std::shared_ptr TableTreeBuilder::addNode(const PgClass &cls) processedNodes.emplace(cls.oid(), node); std::vector parents = inheritance.getParentsOf(cls.oid()); if (parents.empty()) - addToplevelNode(node); + addToToplevel(node); else addToParents(node, parents); return node; } -void TableTreeBuilder::addToplevelNode(std::shared_ptr node) +void TableTreeBuilder::addToToplevel(std::shared_ptr node) { rootNode->children.push_back(node); } diff --git a/pglablib/ui/catalog/tables/TableTreeBuilder.h b/pglablib/ui/catalog/tables/TableTreeBuilder.h index 0a4949f..99ccdb1 100644 --- a/pglablib/ui/catalog/tables/TableTreeBuilder.h +++ b/pglablib/ui/catalog/tables/TableTreeBuilder.h @@ -13,7 +13,7 @@ class TableTreeBuilder public: TableTreeBuilder(const std::map &source, const IFindParents &inheritance); - std::shared_ptr Build(); + std::tuple, std::map>> Build(); private: const std::map &source; @@ -21,10 +21,9 @@ private: std::map> processedNodes; std::shared_ptr rootNode; - void resetState(); bool hasParent(const PgClass &cls) const; std::shared_ptr addNode(const PgClass &cls); - void addToplevelNode(std::shared_ptr node); + void addToToplevel(std::shared_ptr node); void addToParents(std::shared_ptr node, const std::vector &parents); std::shared_ptr getParent(Oid oid); void AssignNodeIndexesAndParents(std::shared_ptr parent); diff --git a/pgsql/Pgsql_ResultConstIterator.h b/pgsql/Pgsql_ResultConstIterator.h index 7835779..a849837 100644 --- a/pgsql/Pgsql_ResultConstIterator.h +++ b/pgsql/Pgsql_ResultConstIterator.h @@ -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; } diff --git a/tests/pglabtests/TableTreeBuilderTests.cpp b/tests/pglabtests/TableTreeBuilderTests.cpp index 68beb2e..4805024 100644 --- a/tests/pglabtests/TableTreeBuilderTests.cpp +++ b/tests/pglabtests/TableTreeBuilderTests.cpp @@ -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);