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

Method copyRels

src/expression_evaluator/path_evaluator.cpp:151–195  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

149}
150
151uint64_t PathExpressionEvaluator::copyRels(sel_t resultPos) {
152 auto listSize = 0u;
153 // Calculate list size.
154 for (auto i = 0u; i < expression->getNumChildren(); ++i) {
155 auto child = expression->getChild(i).get();
156 switch (child->dataType.getLogicalTypeID()) {
157 case LogicalTypeID::REL: {
158 listSize++;
159 } break;
160 case LogicalTypeID::RECURSIVE_REL: {
161 auto vectors = inputVectorsPerChild[i].get();
162 auto inputPos = getCurrentPos(vectors->input, resultPos);
163 listSize += vectors->relsInput->getValue<list_entry_t>(inputPos).size;
164 } break;
165 default:
166 break;
167 }
168 }
169 // Add list entry.
170 auto entry = ListVector::addList(resultRelsVector, listSize);
171 resultRelsVector->setValue(resultPos, entry);
172 // Copy field vectors
173 offset_t resultDataPos = entry.offset;
174 for (auto i = 0u; i < expression->getNumChildren(); ++i) {
175 auto child = expression->getChild(i).get();
176 auto vectors = inputVectorsPerChild[i].get();
177 auto inputPos = getCurrentPos(vectors->input, resultPos);
178 switch (child->dataType.getLogicalTypeID()) {
179 case LogicalTypeID::REL: {
180 copyFieldVectors(inputPos, vectors->relFieldVectors, resultDataPos,
181 resultRelsFieldVectors);
182 } break;
183 case LogicalTypeID::RECURSIVE_REL: {
184 auto& listEntry = vectors->relsInput->getValue<list_entry_t>(inputPos);
185 for (auto j = 0u; j < listEntry.size; ++j) {
186 copyFieldVectors(listEntry.offset + j, vectors->relFieldVectors, resultDataPos,
187 resultRelsFieldVectors);
188 }
189 } break;
190 default:
191 break;
192 }
193 }
194 return listSize;
195}
196
197void PathExpressionEvaluator::copyFieldVectors(offset_t inputVectorPos,
198 const std::vector<ValueVector*>& inputFieldVectors, offset_t& resultVectorPos,

Callers

nothing calls this directly

Calls 7

getCurrentPosFunction · 0.85
addListFunction · 0.85
getNumChildrenMethod · 0.80
getLogicalTypeIDMethod · 0.80
getMethod · 0.45
getChildMethod · 0.45
setValueMethod · 0.45

Tested by

no test coverage detected