MCPcopy Create free account
hub / github.com/LadybugDB/ladybug / constructNodeScan

Method constructNodeScan

src/planner/join_order/join_tree_constructor.cpp:134–159  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

132}
133
134JoinTreeConstructor::IntermediateResult JoinTreeConstructor::constructNodeScan(
135 std::shared_ptr<Expression> expr) {
136 auto& node = expr->constCast<NodeExpression>();
137 auto nodeIdx = queryGraph.getQueryNodeIdx(node.getUniqueName());
138 auto emptySubgraph = SubqueryGraph(queryGraph);
139 auto newSubgraph = SubqueryGraph(queryGraph);
140 newSubgraph.addQueryNode(nodeIdx);
141 auto extraInfo = std::make_unique<ExtraScanTreeNodeInfo>();
142 // See Planner::planBaseTableScans for how we plan unnest correlated subqueries.
143 if (planningInfo.subqueryType == SubqueryPlanningType::UNNEST_CORRELATED &&
144 planningInfo.containsCorrExpr(*node.getInternalID())) {
145 extraInfo->nodeInfo = std::make_unique<NodeRelScanInfo>(expr, expression_vector{});
146 ;
147 auto treeNode =
148 std::make_shared<JoinTreeNode>(TreeNodeType::NODE_SCAN, std::move(extraInfo));
149 return {treeNode, newSubgraph};
150 }
151 auto properties = propertyCollection.getProperties(*expr);
152 auto predicates =
153 Planner::getNewlyMatchedExprs(emptySubgraph, newSubgraph, queryGraphPredicates);
154 auto nodeScanInfo = std::make_unique<NodeRelScanInfo>(expr, properties);
155 nodeScanInfo->predicates = predicates;
156 extraInfo->nodeInfo = std::move(nodeScanInfo);
157 auto treeNode = std::make_shared<JoinTreeNode>(TreeNodeType::NODE_SCAN, std::move(extraInfo));
158 return {treeNode, newSubgraph};
159}
160
161JoinTreeConstructor::IntermediateResult JoinTreeConstructor::constructRelScan(
162 std::shared_ptr<binder::Expression> expr) {

Callers

nothing calls this directly

Calls 6

SubqueryGraphClass · 0.85
getQueryNodeIdxMethod · 0.80
containsCorrExprMethod · 0.80
getUniqueNameMethod · 0.45
addQueryNodeMethod · 0.45
getPropertiesMethod · 0.45

Tested by

no test coverage detected