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

Function compileExprToJitVectorFunc

bolt/jit/expression/ExprJitCompiler.cpp:401–448  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

399};
400
401JitBoltVectorFunction compileExprToJitVectorFunc(const exec::Expr* expr) {
402 JitBoltVectorFunction result;
403 ExprConverter converter;
404
405 try {
406 auto jitExpr = converter.convertExprToJitExpr(expr);
407 bool compilable = thrust::jit::compilableExpr(jitExpr.get());
408 if (!compilable) {
409 return result;
410 }
411
412 auto fields = expr->distinctFields();
413 std::vector<thrust::jit::ColumnDataMeta> jitMetas;
414
415 for (auto&& f : fields) {
416 auto jitType = converter.convertType(f->type());
417 // TODO complex type
418 // if (f->inputs().size() > 0) {
419 // }
420
421 thrust::jit::ColumnDataMeta jitMeta;
422 jitMeta.type = jitType->kind;
423 jitMeta.nullable = true; // presto
424 jitMeta.name = f->name();
425 jitMetas.emplace_back(std::move(jitMeta));
426 }
427
428 auto jitResourceHolder =
429 thrust::jit::compileExprForVector(jitExpr.get(), jitMetas);
430
431 result.jitFunc = (JitBoltVectorFunction::JitedFuncAddress)
432 jitResourceHolder->getFunction();
433
434 // std::function<void(const std::vector<VectorPtr>& args, VectorPtr*
435 // result)> func;
436 FunctionResourceWrapper wrapper;
437 wrapper.jitHolder = jitResourceHolder;
438 result.func = std::bind(
439 bolt_call_function_wrapper,
440 wrapper,
441 std::placeholders::_1,
442 std::placeholders::_2);
443
444 } catch (std::exception& e) {
445 // log
446 }
447 return result;
448}
449
450} // namespace bytedance::bolt::jit
451#endif

Callers 1

Calls 5

convertExprToJitExprMethod · 0.80
getMethod · 0.45
convertTypeMethod · 0.45
typeMethod · 0.45
nameMethod · 0.45

Tested by

no test coverage detected