Michael Ho has posted comments on this change. Change subject: IMPALA-1430: enable codegen for native UDAs ......................................................................
Patch Set 6: (7 comments) http://gerrit.cloudera.org:8080/#/c/5161/6/be/src/exprs/agg-fn-evaluator.cc File be/src/exprs/agg-fn-evaluator.cc: PS6, Line 542: Expr::InlineConstants(AnyValUtil::ColumnTypeToTypeDesc(intermediate_type()), : AnyValUtil::ColumnTypesToTypeDescs(arg_types), codegen, *uda_fn); I am not sure I understand the intention of this. The Update() / Merge() functions of UDA are assumed to have the signature void Update(FunctionContext*, ArgType1* arg1, ArgType2* arg2, ...., ResultType* result); If so, shouldn't the code which calls Expr::GetConstantInt(Expr::RETURN_TYPE_SIZE); expect to get the size of void (if it's defined at all) back ? I can see replacement of Expr::RETURN_TYPE_SIZE happening due to inlining of other functions in the Update()/Merge() functins but that doesn't seem to be correct all the time to replace the return type with intermediate type. For example, one can call DecimalOperators::CastToDecimalVal() on one of the input argument to the UDA's Update() function. Replacing the return type of CastToDecimalVal() with the intermediate type of the AggFnEvaluator may not be correct. http://gerrit.cloudera.org:8080/#/c/5161/6/be/src/exprs/scalar-fn-call.cc File be/src/exprs/scalar-fn-call.cc: PS6, Line 327: !udf->isDeclaration() May help to add a comment on why this can be a declaration only (i.e. no function body). PS6, Line 328: InlineConstants(AnyValUtil::ColumnTypeToTypeDesc(type_), : AnyValUtil::ColumnTypesToTypeDescs(arg_types), codegen, udf); Please see comments in AggFnEvaluator. It seems that we should be able to keep InlineConstants() in GetUdf() like before. Of course, I could have misunderstood the purpose of the change in AggFnEvaluator(). PS6, Line 449: DCHECK(has_varargs || arg_types.size() == num_fixed_args); : DCHECK(!has_varargs || arg_types.size() > num_fixed_args); DCHECK(arg_types.size() == num_fixed_args || (has_var_args && arg_types.size() > num_fixed_args)); ? PS6, Line 478: codegen->void_type() : : CodegenAnyVal::GetLoweredType(codegen, *return_type); nit: one line ? http://gerrit.cloudera.org:8080/#/c/5161/6/be/src/exprs/scalar-fn-call.h File be/src/exprs/scalar-fn-call.h: PS6, Line 59: 'cache_entry' May help to have a comment about what 'cache_entry' is. Something like the following, preferably shorter. 'cache_entry' is the entry of the shared library cache owned by the caller. Loading the UDF will increment the use count. Caller is expected to decrement the use count when they are done with the UDF (e.g. in Expr::Close()). Line 60: /// updated to point to the library (or its use count is incremented if already loaded). Please add a comment that the caller is expected to call FinalizeFunction() on 'udf' to verify it; -- To view, visit http://gerrit.cloudera.org:8080/5161 To unsubscribe, visit http://gerrit.cloudera.org:8080/settings Gerrit-MessageType: comment Gerrit-Change-Id: Id1708eaa96eb76fb9bec5eeabf209f81c88eec2f Gerrit-PatchSet: 6 Gerrit-Project: Impala-ASF Gerrit-Branch: master Gerrit-Owner: Tim Armstrong <[email protected]> Gerrit-Reviewer: Marcel Kornacker <[email protected]> Gerrit-Reviewer: Michael Ho Gerrit-Reviewer: Michael Ho <[email protected]> Gerrit-Reviewer: Tim Armstrong <[email protected]> Gerrit-HasComments: Yes
