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

Method init

src/expression_evaluator/path_evaluator.cpp:30–80  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

28}
29
30void PathExpressionEvaluator::init(const processor::ResultSet& resultSet,
31 main::ClientContext* clientContext) {
32 ExpressionEvaluator::init(resultSet, clientContext);
33 auto resultNodesIdx = StructType::getFieldIdx(resultVector->dataType, InternalKeyword::NODES);
34 resultNodesVector = StructVector::getFieldVector(resultVector.get(), resultNodesIdx).get();
35 auto resultNodesDataVector = ListVector::getDataVector(resultNodesVector);
36 for (auto& fieldVector : StructVector::getFieldVectors(resultNodesDataVector)) {
37 resultNodesFieldVectors.push_back(fieldVector.get());
38 }
39 auto resultRelsIdx = StructType::getFieldIdx(resultVector->dataType, InternalKeyword::RELS);
40 resultRelsVector = StructVector::getFieldVector(resultVector.get(), resultRelsIdx).get();
41 auto resultRelsDataVector = ListVector::getDataVector(resultRelsVector);
42 for (auto& fieldVector : StructVector::getFieldVectors(resultRelsDataVector)) {
43 resultRelsFieldVectors.push_back(fieldVector.get());
44 }
45 auto pathExpression = (PathExpression*)expression.get();
46 for (auto i = 0u; i < expression->getNumChildren(); ++i) {
47 auto child = expression->getChild(i).get();
48 auto vectors = std::make_unique<InputVectors>();
49 vectors->input = children[i]->resultVector.get();
50 switch (child->dataType.getLogicalTypeID()) {
51 case LogicalTypeID::NODE: {
52 vectors->nodeFieldVectors =
53 getFieldVectors(child->dataType, pathExpression->getNodeType(), vectors->input);
54 } break;
55 case LogicalTypeID::REL: {
56 vectors->relFieldVectors =
57 getFieldVectors(child->dataType, pathExpression->getRelType(), vectors->input);
58 } break;
59 case LogicalTypeID::RECURSIVE_REL: {
60 auto rel = (RelExpression*)child;
61 auto recursiveNode = rel->getRecursiveInfo()->node;
62 auto recursiveRel = rel->getRecursiveInfo()->rel;
63 auto nodeFieldIdx = StructType::getFieldIdx(child->dataType, InternalKeyword::NODES);
64 vectors->nodesInput = StructVector::getFieldVector(vectors->input, nodeFieldIdx).get();
65 vectors->nodesDataInput = ListVector::getDataVector(vectors->nodesInput);
66 vectors->nodeFieldVectors = getFieldVectors(recursiveNode->dataType,
67 pathExpression->getNodeType(), vectors->nodesDataInput);
68 auto relFieldIdx =
69 StructType::getFieldIdx(vectors->input->dataType, InternalKeyword::RELS);
70 vectors->relsInput = StructVector::getFieldVector(vectors->input, relFieldIdx).get();
71 vectors->relsDataInput = ListVector::getDataVector(vectors->relsInput);
72 vectors->relFieldVectors = getFieldVectors(recursiveRel->dataType,
73 pathExpression->getRelType(), vectors->relsDataInput);
74 } break;
75 default:
76 UNREACHABLE_CODE;
77 }
78 inputVectorsPerChild.push_back(std::move(vectors));
79 }
80}
81
82void PathExpressionEvaluator::evaluate() {
83 resultVector->resetAuxiliaryBuffer();

Callers 2

initFurtherMethod · 0.45

Calls 9

getFieldVectorsFunction · 0.85
getNumChildrenMethod · 0.80
getLogicalTypeIDMethod · 0.80
getRelTypeMethod · 0.80
getRecursiveInfoMethod · 0.80
getDataVectorFunction · 0.50
getMethod · 0.45
push_backMethod · 0.45
getChildMethod · 0.45

Tested by

no test coverage detected