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

Method next

src/graph/on_disk_graph.cpp:247–289  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

245}
246
247bool OnDiskGraphNbrScanState::InnerIterator::next(evaluator::ExpressionEvaluator* predicate,
248 SemiMask* nbrNodeMask_, NodeTable* nbrNodeTable_) {
249 bool hasAtLeastOneSelectedValue = false;
250 do {
251 restoreSelVector(*tableScanState->outState);
252 if (!relTable->scan(transaction::Transaction::Get(*context), *tableScanState)) {
253 return false;
254 }
255 saveSelVector(*tableScanState->outState);
256 hasAtLeastOneSelectedValue = tableScanState->outState->getSelVector().getSelSize() > 0;
257 if (predicate != nullptr) {
258 hasAtLeastOneSelectedValue =
259 predicate->select(tableScanState->outState->getSelVectorUnsafe(),
260 !tableScanState->outState->isFlat());
261 }
262 if (nbrNodeMask_ != nullptr) {
263 auto selectedSize = 0u;
264 auto buffer = tableScanState->outState->getSelVectorUnsafe().getMutableBuffer();
265 for (auto i = 0u; i < tableScanState->outState->getSelSize(); ++i) {
266 auto pos = tableScanState->outState->getSelVector()[i];
267 buffer[selectedSize] = pos;
268 auto nbrNodeID = tableScanState->outputVectors[0]->getValue<nodeID_t>(pos);
269 selectedSize += nbrNodeMask_->isMasked(nbrNodeID.offset);
270 }
271 tableScanState->outState->getSelVectorUnsafe().setToFiltered(selectedSize);
272 hasAtLeastOneSelectedValue = selectedSize > 0;
273 }
274 if (nbrNodeTable_ != nullptr) {
275 auto selectedSize = 0u;
276 auto buffer = tableScanState->outState->getSelVectorUnsafe().getMutableBuffer();
277 auto transaction = transaction::Transaction::Get(*context);
278 for (auto i = 0u; i < tableScanState->outState->getSelSize(); ++i) {
279 auto pos = tableScanState->outState->getSelVector()[i];
280 buffer[selectedSize] = pos;
281 auto nbrNodeID = tableScanState->outputVectors[0]->getValue<nodeID_t>(pos);
282 selectedSize += nbrNodeTable_->isVisible(transaction, nbrNodeID.offset);
283 }
284 tableScanState->outState->getSelVectorUnsafe().setToFiltered(selectedSize);
285 hasAtLeastOneSelectedValue = selectedSize > 0;
286 }
287 } while (!hasAtLeastOneSelectedValue);
288 return true;
289}
290
291OnDiskGraphNbrScanState::InnerIterator::InnerIterator(const ClientContext* context,
292 RelTable* relTable, std::unique_ptr<RelTableScanState> tableScanState)

Callers

nothing calls this directly

Calls 10

getSelSizeMethod · 0.80
getMutableBufferMethod · 0.80
setToFilteredMethod · 0.80
scanMethod · 0.45
selectMethod · 0.45
isFlatMethod · 0.45
isMaskedMethod · 0.45
isVisibleMethod · 0.45
getMethod · 0.45
scanNextMethod · 0.45

Tested by

no test coverage detected