Populate table sizes
This commit is contained in:
parent
39dbab4d36
commit
abc0dd892f
10 changed files with 47 additions and 62 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ public:
|
|||
: PgLabTableViewHelper(parent, new TableModel(parent))
|
||||
{}
|
||||
|
||||
ViewType *tableView() const
|
||||
ViewType *itemView() const
|
||||
{
|
||||
return m_tableView;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue