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)
|
if (!m_catalog)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Later afscheiden naar filter functie
|
|
||||||
auto classes = m_catalog->classes();
|
auto classes = m_catalog->classes();
|
||||||
|
|
||||||
std::map<Oid, int> oidIndex;
|
|
||||||
rootNode.reset();
|
rootNode.reset();
|
||||||
|
|
||||||
auto nsfilter = GetNamespaceFilterLambda();
|
auto nsfilter = GetNamespaceFilterLambda();
|
||||||
|
|
@ -70,7 +67,8 @@ void TablesTableModel::refresh()
|
||||||
temp.emplace(e.oid(), e);
|
temp.emplace(e.oid(), e);
|
||||||
|
|
||||||
TableTreeBuilder treeBuilder(temp, *m_catalog->inherits());
|
TableTreeBuilder treeBuilder(temp, *m_catalog->inherits());
|
||||||
rootNode = treeBuilder.Build();
|
auto [rn, oidIndex] = treeBuilder.Build();
|
||||||
|
rootNode = rn;
|
||||||
|
|
||||||
StartLoadTableSizes(std::move(oidIndex));
|
StartLoadTableSizes(std::move(oidIndex));
|
||||||
}
|
}
|
||||||
|
|
@ -189,16 +187,6 @@ QVariant TablesTableModel::getData(const QModelIndex &index) const
|
||||||
return QVariant();
|
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
|
QVariant TablesTableModel::data(const QModelIndex &index, int role) const
|
||||||
{
|
{
|
||||||
if (role == Qt::DisplayRole)
|
if (role == Qt::DisplayRole)
|
||||||
|
|
@ -221,7 +209,7 @@ QVariant TablesTableModel::data(const QModelIndex &index, int role) const
|
||||||
return QVariant();
|
return QVariant();
|
||||||
}
|
}
|
||||||
|
|
||||||
void TablesTableModel::StartLoadTableSizes(std::map<Oid, int> oidIndex)
|
void TablesTableModel::StartLoadTableSizes(OidClassIndex oidIndex)
|
||||||
{
|
{
|
||||||
QPointer p(this);
|
QPointer p(this);
|
||||||
QtConcurrent::run([this]
|
QtConcurrent::run([this]
|
||||||
|
|
@ -231,7 +219,7 @@ void TablesTableModel::StartLoadTableSizes(std::map<Oid, int> oidIndex)
|
||||||
.then(qApp, [p, oidIndex] (TableSizes sizes)
|
.then(qApp, [p, oidIndex] (TableSizes sizes)
|
||||||
{
|
{
|
||||||
if (p)
|
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;
|
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)
|
for (auto s : sizes)
|
||||||
// {
|
{
|
||||||
// auto findIter = oidIndex.find(s.oid);
|
auto findIter = oidIndex.find(s.oid);
|
||||||
// if (findIter != oidIndex.end())
|
if (findIter != oidIndex.end())
|
||||||
// {
|
{
|
||||||
// rootNode->children[findIter->second]->sizes = s;
|
findIter->second->sizes = s;
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
// emit dataChanged(
|
emit dataChanged(
|
||||||
// createIndex(0, TotalSizeCol),
|
index(0, TotalSizeCol),
|
||||||
// createIndex(static_cast<int>(rootNode->children.size()), ToastSizeCol)
|
index(static_cast<int>(rootNode->children.size()), ToastSizeCol)
|
||||||
// );
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
const TableNode* TablesTableModel::nodeFromIndex(const QModelIndex &index)
|
const TableNode* TablesTableModel::nodeFromIndex(const QModelIndex &index)
|
||||||
|
|
|
||||||
|
|
@ -50,12 +50,10 @@ public:
|
||||||
|
|
||||||
QVariant data(const QModelIndex &index, int role) const override;
|
QVariant data(const QModelIndex &index, int role) const override;
|
||||||
|
|
||||||
// PgClass getTable(int row) const;
|
|
||||||
RowItem rowItem(const QModelIndex &index) const
|
RowItem rowItem(const QModelIndex &index) const
|
||||||
{
|
{
|
||||||
return nodeFromIndex(index)->_class;
|
return nodeFromIndex(index)->_class;
|
||||||
}
|
}
|
||||||
// Oid getTableOid(int row) const;
|
|
||||||
|
|
||||||
static const TableNode* nodeFromIndex(const QModelIndex &index);
|
static const TableNode* nodeFromIndex(const QModelIndex &index);
|
||||||
|
|
||||||
|
|
@ -69,7 +67,6 @@ private:
|
||||||
|
|
||||||
std::shared_ptr<const PgDatabaseCatalog> m_catalog;
|
std::shared_ptr<const PgDatabaseCatalog> m_catalog;
|
||||||
NamespaceFilter m_namespaceFilter = NamespaceFilter::User;
|
NamespaceFilter m_namespaceFilter = NamespaceFilter::User;
|
||||||
//t_Tables m_tables;
|
|
||||||
std::shared_ptr<TableNode> rootNode;
|
std::shared_ptr<TableNode> rootNode;
|
||||||
QMetaObject::Connection refreshConnection;
|
QMetaObject::Connection refreshConnection;
|
||||||
std::shared_ptr<OpenDatabase> openDatabase;
|
std::shared_ptr<OpenDatabase> openDatabase;
|
||||||
|
|
@ -78,9 +75,14 @@ private:
|
||||||
Oid getType(int column) const;
|
Oid getType(int column) const;
|
||||||
QVariant getData(const QModelIndex &index) 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;
|
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();
|
std::function<bool(const PgClass&)> GetNamespaceFilterLambda();
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ CatalogTablesPage::CatalogTablesPage(std::shared_ptr<OpenDatabase> opendatabase,
|
||||||
: QSplitter(Qt::Horizontal, parent)
|
: QSplitter(Qt::Horizontal, parent)
|
||||||
, m_tablesTableView(this, new TablesTableModel(opendatabase, this))
|
, m_tablesTableView(this, new TablesTableModel(opendatabase, this))
|
||||||
{
|
{
|
||||||
auto tv = m_tablesTableView.tableView();
|
auto tv = m_tablesTableView.itemView();
|
||||||
tv->setSelectionMode(QAbstractItemView::SingleSelection);
|
tv->setSelectionMode(QAbstractItemView::SingleSelection);
|
||||||
m_detailsTabs = new QTabWidget(this);
|
m_detailsTabs = new QTabWidget(this);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ DatabasesPage::DatabasesPage(std::shared_ptr<OpenDatabase> opendatabase, QWidget
|
||||||
: QSplitter(Qt::Horizontal, parent)
|
: QSplitter(Qt::Horizontal, parent)
|
||||||
, m_databasesTableView(this, new DatabasesTableModel(opendatabase, this))
|
, m_databasesTableView(this, new DatabasesTableModel(opendatabase, this))
|
||||||
{
|
{
|
||||||
auto tv = m_databasesTableView.tableView();
|
auto tv = m_databasesTableView.itemView();
|
||||||
tv->setSelectionMode(QAbstractItemView::SingleSelection);
|
tv->setSelectionMode(QAbstractItemView::SingleSelection);
|
||||||
tv->setContextMenuPolicy(Qt::ActionsContextMenu);
|
tv->setContextMenuPolicy(Qt::ActionsContextMenu);
|
||||||
|
|
||||||
|
|
@ -23,7 +23,7 @@ DatabasesPage::DatabasesPage(std::shared_ptr<OpenDatabase> opendatabase, QWidget
|
||||||
m_tableSql = new SqlCodePreview(this);
|
m_tableSql = new SqlCodePreview(this);
|
||||||
addWidget(m_tableSql);
|
addWidget(m_tableSql);
|
||||||
|
|
||||||
connect(m_databasesTableView.tableView()->selectionModel(), &QItemSelectionModel::currentRowChanged,
|
connect(m_databasesTableView.itemView()->selectionModel(), &QItemSelectionModel::currentRowChanged,
|
||||||
this, &DatabasesPage::databaseSelectionChanged);
|
this, &DatabasesPage::databaseSelectionChanged);
|
||||||
connect(createDbAction, &QAction::triggered,
|
connect(createDbAction, &QAction::triggered,
|
||||||
[this](auto checked)
|
[this](auto checked)
|
||||||
|
|
@ -37,7 +37,7 @@ void DatabasesPage::setCatalog(std::shared_ptr<PgDatabaseCatalog> cat)
|
||||||
{
|
{
|
||||||
m_catalog = cat;
|
m_catalog = cat;
|
||||||
m_databasesTableView.dataModel()->setDatabaseList(cat);
|
m_databasesTableView.dataModel()->setDatabaseList(cat);
|
||||||
m_databasesTableView.tableView()->resizeColumnsToContents();
|
m_databasesTableView.itemView()->resizeColumnsToContents();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DatabasesPage::updateDatabaseDetails(const PgDatabase &db)
|
void DatabasesPage::updateDatabaseDetails(const PgDatabase &db)
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ RolesPage::RolesPage(QWidget * parent)
|
||||||
: QSplitter(Qt::Horizontal, parent)
|
: QSplitter(Qt::Horizontal, parent)
|
||||||
, m_rolesTableView(this)
|
, m_rolesTableView(this)
|
||||||
{
|
{
|
||||||
auto tv = m_rolesTableView.tableView();
|
auto tv = m_rolesTableView.itemView();
|
||||||
tv->setSelectionMode(QAbstractItemView::SingleSelection);
|
tv->setSelectionMode(QAbstractItemView::SingleSelection);
|
||||||
|
|
||||||
m_detailsTabs = new QTabWidget(this);
|
m_detailsTabs = new QTabWidget(this);
|
||||||
|
|
@ -19,5 +19,5 @@ void RolesPage::setCatalog(std::shared_ptr<PgDatabaseCatalog> cat)
|
||||||
{
|
{
|
||||||
m_catalog = cat;
|
m_catalog = cat;
|
||||||
m_rolesTableView.dataModel()->setRoleList(cat->authIds());
|
m_rolesTableView.dataModel()->setRoleList(cat->authIds());
|
||||||
m_rolesTableView.tableView()->resizeColumnsToContents();
|
m_rolesTableView.itemView()->resizeColumnsToContents();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ public:
|
||||||
: PgLabTableViewHelper(parent, new TableModel(parent))
|
: PgLabTableViewHelper(parent, new TableModel(parent))
|
||||||
{}
|
{}
|
||||||
|
|
||||||
ViewType *tableView() const
|
ViewType *itemView() const
|
||||||
{
|
{
|
||||||
return m_tableView;
|
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>();
|
rootNode = std::make_shared<TableNode>();
|
||||||
|
|
||||||
|
|
@ -29,16 +29,9 @@ std::shared_ptr<TableNode> TableTreeBuilder::Build()
|
||||||
addNode(e.second);
|
addNode(e.second);
|
||||||
}
|
}
|
||||||
AssignNodeIndexesAndParents(rootNode);
|
AssignNodeIndexesAndParents(rootNode);
|
||||||
auto ret = rootNode;
|
return { rootNode, std::move(processedNodes) };
|
||||||
resetState();
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TableTreeBuilder::resetState()
|
|
||||||
{
|
|
||||||
rootNode.reset();
|
|
||||||
processedNodes.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
std::shared_ptr<TableNode> TableTreeBuilder::addNode(const PgClass &cls)
|
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);
|
processedNodes.emplace(cls.oid(), node);
|
||||||
std::vector<Oid> parents = inheritance.getParentsOf(cls.oid());
|
std::vector<Oid> parents = inheritance.getParentsOf(cls.oid());
|
||||||
if (parents.empty())
|
if (parents.empty())
|
||||||
addToplevelNode(node);
|
addToToplevel(node);
|
||||||
else
|
else
|
||||||
addToParents(node, parents);
|
addToParents(node, parents);
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TableTreeBuilder::addToplevelNode(std::shared_ptr<TableNode> node)
|
void TableTreeBuilder::addToToplevel(std::shared_ptr<TableNode> node)
|
||||||
{
|
{
|
||||||
rootNode->children.push_back(node);
|
rootNode->children.push_back(node);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ class TableTreeBuilder
|
||||||
public:
|
public:
|
||||||
TableTreeBuilder(const std::map<Oid, PgClass> &source, const IFindParents &inheritance);
|
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:
|
private:
|
||||||
const std::map<Oid, PgClass> &source;
|
const std::map<Oid, PgClass> &source;
|
||||||
|
|
@ -21,10 +21,9 @@ private:
|
||||||
std::map<Oid, std::shared_ptr<TableNode>> processedNodes;
|
std::map<Oid, std::shared_ptr<TableNode>> processedNodes;
|
||||||
std::shared_ptr<TableNode> rootNode;
|
std::shared_ptr<TableNode> rootNode;
|
||||||
|
|
||||||
void resetState();
|
|
||||||
bool hasParent(const PgClass &cls) const;
|
bool hasParent(const PgClass &cls) const;
|
||||||
std::shared_ptr<TableNode> addNode(const PgClass &cls);
|
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);
|
void addToParents(std::shared_ptr<TableNode> node, const std::vector<Oid> &parents);
|
||||||
std::shared_ptr<TableNode> getParent(Oid oid);
|
std::shared_ptr<TableNode> getParent(Oid oid);
|
||||||
void AssignNodeIndexesAndParents(std::shared_ptr<TableNode> parent);
|
void AssignNodeIndexesAndParents(std::shared_ptr<TableNode> parent);
|
||||||
|
|
|
||||||
|
|
@ -25,21 +25,21 @@ namespace Pgsql {
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator==(const ResultConstIterator &rhs)
|
bool operator==(const ResultConstIterator &rhs) const
|
||||||
{
|
{
|
||||||
return m_row == rhs.m_row;
|
return m_row == rhs.m_row;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator!=(const ResultConstIterator &rhs)
|
bool operator!=(const ResultConstIterator &rhs) const
|
||||||
{
|
{
|
||||||
return !operator==(rhs);
|
return !operator==(rhs);
|
||||||
}
|
}
|
||||||
|
|
||||||
const Row& operator*()
|
const Row& operator*() const
|
||||||
{
|
{
|
||||||
return m_row;
|
return m_row;
|
||||||
}
|
}
|
||||||
const Row& operator->()
|
const Row& operator->() const
|
||||||
{
|
{
|
||||||
return m_row;
|
return m_row;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ TEST(TableTreeBuilder, EmptySourceEmptyResult)
|
||||||
PgDatabaseCatalog catalog;
|
PgDatabaseCatalog catalog;
|
||||||
PgInheritsContainer inherited(catalog);
|
PgInheritsContainer inherited(catalog);
|
||||||
TableTreeBuilder builder(source, inherited);
|
TableTreeBuilder builder(source, inherited);
|
||||||
auto result = builder.Build();
|
auto [result, index] = builder.Build();
|
||||||
|
|
||||||
EXPECT_EQ(result->children.size(), 0);
|
EXPECT_EQ(result->children.size(), 0);
|
||||||
}
|
}
|
||||||
|
|
@ -28,7 +28,7 @@ TEST(TableTreeBuilder, TopLevelOnly)
|
||||||
source.emplace(1000, cls1);
|
source.emplace(1000, cls1);
|
||||||
PgInheritsContainer inherited(catalog);
|
PgInheritsContainer inherited(catalog);
|
||||||
TableTreeBuilder builder(source, inherited);
|
TableTreeBuilder builder(source, inherited);
|
||||||
auto result = builder.Build();
|
auto [result, index] = builder.Build();
|
||||||
|
|
||||||
EXPECT_EQ(result->children.size(), 1);
|
EXPECT_EQ(result->children.size(), 1);
|
||||||
}
|
}
|
||||||
|
|
@ -56,7 +56,7 @@ TEST(TableTreeBuilder, WithChild)
|
||||||
source.emplace(1002, cls2);
|
source.emplace(1002, cls2);
|
||||||
PgInheritsContainer inherited(catalog);
|
PgInheritsContainer inherited(catalog);
|
||||||
TableTreeBuilder builder(source, findParents);
|
TableTreeBuilder builder(source, findParents);
|
||||||
auto result = builder.Build();
|
auto [result, index] = builder.Build();
|
||||||
|
|
||||||
EXPECT_EQ(result->children.size(), 1);
|
EXPECT_EQ(result->children.size(), 1);
|
||||||
EXPECT_EQ(result->children[0]->children.size(), 1);
|
EXPECT_EQ(result->children[0]->children.size(), 1);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue