| 1317 | #ifdef ENABLE_BOLT_JIT |
| 1318 | |
| 1319 | std::tuple<bytedance::bolt::jit::CompiledModuleSP, std::string> |
| 1320 | RowContainer::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 | |
| 1372 | std::tuple<bytedance::bolt::jit::CompiledModuleSP, std::string> |
| 1373 | RowContainer::codegenRowEqVectors( |