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

Method codegenCompare

bolt/exec/RowContainer.cpp:1319–1370  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1317#ifdef ENABLE_BOLT_JIT
1318
1319std::tuple<bytedance::bolt::jit::CompiledModuleSP, std::string>
1320RowContainer::codegenCompare(
1321 const std::vector<TypePtr>& keyTypes,
1322 const std::vector<CompareFlags>& compareFlags,
1323 bytedance::bolt::jit::CmpType cmpType,
1324 bool hasNullKeys,
1325 const std::vector<column_index_t>& sortKeyIndexs) {
1326 // Setup the CodeGenerator
1327 bytedance::bolt::jit::RowContainerCodeGenerator codeGenerator;
1328 {
1329 std::vector<TypePtr> keyTypesCopy;
1330 std::vector<bytedance::bolt::jit::CompareFlags> flags;
1331 std::vector<int32_t> nullByteOffsets;
1332 std::vector<int8_t> nullByteMasks;
1333 std::vector<int32_t> keyOffsets;
1334 if (FOLLY_LIKELY(sortKeyIndexs.size() == 0)) {
1335 for (auto i = 0; i < keyTypes.size(); ++i) {
1336 keyTypesCopy.emplace_back(keyTypes[i]);
1337 if (cmpType != bytedance::bolt::jit::CmpType::EQUAL) {
1338 flags.emplace_back<bytedance::bolt::jit::CompareFlags>(
1339 {compareFlags[i].nullsFirst, compareFlags[i].ascending});
1340 }
1341 auto col = this->columnAt(i);
1342 keyOffsets.emplace_back(col.offset());
1343 nullByteOffsets.emplace_back(col.nullByte());
1344 nullByteMasks.emplace_back(col.nullMask());
1345 }
1346 } else {
1347 for (auto i = 0; i < keyTypes.size(); ++i) {
1348 keyTypesCopy.emplace_back(keyTypes[i]);
1349 if (cmpType != bytedance::bolt::jit::CmpType::EQUAL) {
1350 flags.emplace_back<bytedance::bolt::jit::CompareFlags>(
1351 {compareFlags[i].nullsFirst, compareFlags[i].ascending});
1352 }
1353 auto col = this->columnAt(sortKeyIndexs[i]);
1354 keyOffsets.emplace_back(col.offset());
1355 nullByteOffsets.emplace_back(col.nullByte());
1356 nullByteMasks.emplace_back(col.nullMask());
1357 }
1358 }
1359 codeGenerator.setKeyTypes(std::move(keyTypesCopy))
1360 .setCompareFlags(std::move(flags))
1361 .setKeyOffsets(std::move(keyOffsets))
1362 .setNullByteOffsets(std::move(nullByteOffsets))
1363 .setNullMasks(std::move(nullByteMasks))
1364 .setHasNullKeys(hasNullKeys)
1365 .setOpType(cmpType);
1366 }
1367 auto fnName = codeGenerator.GetCmpFuncName();
1368 auto moduleSP = codeGenerator.codegen();
1369 return {std::move(moduleSP), std::move(fnName)};
1370}
1371
1372std::tuple<bytedance::bolt::jit::CompiledModuleSP, std::string>
1373RowContainer::codegenRowEqVectors(

Callers 9

sortPartitionsMethod · 0.80
ensureSortedMethod · 0.80
noMoreInputMethod · 0.80
HashTableMethod · 0.80
runOnceMethod · 0.80
prepareMethod · 0.80

Calls 7

columnAtMethod · 0.95
codegenMethod · 0.80
sizeMethod · 0.45
offsetMethod · 0.45
nullByteMethod · 0.45
nullMaskMethod · 0.45
GetCmpFuncNameMethod · 0.45

Tested by 2

runOnceMethod · 0.64
prepareMethod · 0.64