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

@ -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);