MCPcopy Create free account
hub / github.com/bytedance/bolt / apply

Method apply

bolt/functions/prestosql/ArrayConstructor.cpp:43–126  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

41 }
42
43 void apply(
44 const SelectivityVector& rows,
45 std::vector<VectorPtr>& args,
46 const TypePtr& outputType,
47 exec::EvalCtx& context,
48 VectorPtr& result) const override {
49 auto numArgs = args.size();
50
51 context.ensureWritable(rows, outputType, result);
52 result->clearNulls(rows);
53 auto arrayResult = result->as<ArrayVector>();
54 auto sizes = arrayResult->mutableSizes(rows.end());
55 auto rawSizes = sizes->asMutable<int32_t>();
56 auto offsets = arrayResult->mutableOffsets(rows.end());
57 auto rawOffsets = offsets->asMutable<int32_t>();
58
59 auto elementsResult = arrayResult->elements();
60
61 // append to the end of the "elements" vector
62 auto baseOffset = elementsResult->size();
63
64 if (args.empty()) {
65 rows.applyToSelected([&](vector_size_t row) {
66 rawSizes[row] = 0;
67 rawOffsets[row] = baseOffset;
68 });
69 } else {
70 elementsResult->resize(baseOffset + numArgs * rows.countSelected());
71
72 if (shouldCopyRanges(elementsResult->type())) {
73 std::vector<BaseVector::CopyRange> ranges;
74 ranges.reserve(rows.end());
75
76 vector_size_t offset = baseOffset;
77 rows.applyToSelected([&](vector_size_t row) {
78 rawSizes[row] = numArgs;
79 rawOffsets[row] = offset;
80 ranges.push_back({row, offset, 1});
81 offset += numArgs;
82 });
83
84 elementsResult->copyRanges(args[0].get(), ranges);
85
86 for (int i = 1; i < numArgs; i++) {
87 for (auto& range : ranges) {
88 ++range.targetIndex;
89 }
90 elementsResult->copyRanges(args[i].get(), ranges);
91 }
92 } else {
93 SelectivityVector targetRows(elementsResult->size(), false);
94 std::vector<vector_size_t> toSourceRow(elementsResult->size());
95
96 vector_size_t offset = baseOffset;
97 rows.applyToSelected([&](vector_size_t row) {
98 rawSizes[row] = numArgs;
99 rawOffsets[row] = offset;
100

Callers

nothing calls this directly

Calls 15

mutableSizesMethod · 0.80
mutableOffsetsMethod · 0.80
applyToSelectedMethod · 0.80
countSelectedMethod · 0.80
setValidMethod · 0.80
updateBoundsMethod · 0.80
sizeMethod · 0.45
ensureWritableMethod · 0.45
clearNullsMethod · 0.45
endMethod · 0.45
emptyMethod · 0.45
resizeMethod · 0.45

Tested by

no test coverage detected