niyue commented on code in PR #38632:
URL: https://github.com/apache/arrow/pull/38632#discussion_r1387912117


##########
cpp/src/gandiva/tests/test_util.cc:
##########
@@ -42,11 +46,129 @@ NativeFunction GetTestExternalFunction() {
   return multiply_by_two_func;
 }
 
-std::shared_ptr<Configuration> TestConfigurationWithFunctionRegistry(
+static NativeFunction GetTestExternalCInterfaceFunction() {
+  NativeFunction multiply_by_three_func(
+      "multiply_by_three", {}, {arrow::int32()}, arrow::int64(),
+      ResultNullableType::kResultNullIfNull, "multiply_by_three_int32");
+  return multiply_by_three_func;
+}
+
+static NativeFunction GetTestFunctionWithFunctionHolder() {
+  // the 2nd parameter is expected to be an int32 literal
+  NativeFunction multiply_by_n_func("multiply_by_n", {}, {arrow::int32(), 
arrow::int32()},
+                                    arrow::int64(), 
ResultNullableType::kResultNullIfNull,
+                                    "multiply_by_n_int32_int32",
+                                    NativeFunction::kNeedsFunctionHolder);
+  return multiply_by_n_func;
+}
+
+static NativeFunction GetTestFunctionWithContext() {
+  NativeFunction multiply_by_two_formula(
+      "multiply_by_two_formula", {}, {arrow::utf8()}, arrow::utf8(),
+      ResultNullableType::kResultNullIfNull, "multiply_by_two_formula_utf8",
+      NativeFunction::kNeedsContext);
+  return multiply_by_two_formula;
+}
+
+static std::shared_ptr<Configuration> BuildConfigurationWithRegistry(
+    std::shared_ptr<FunctionRegistry> registry,
+    const std::function<arrow::Status(std::shared_ptr<FunctionRegistry>)>&
+        register_func) {
+  ARROW_EXPECT_OK(register_func(registry));
+  return ConfigurationBuilder().build(std::move(registry));
+}
+
+std::shared_ptr<Configuration> TestConfigWithFunctionRegistry(
+    std::shared_ptr<FunctionRegistry> registry) {
+  return BuildConfigurationWithRegistry(std::move(registry), [](auto reg) {
+    return reg->Register({GetTestExternalFunction()}, 
GetTestFunctionLLVMIRPath());
+  });
+}
+
+class MultiplyHolder : public FunctionHolder {
+ public:
+  explicit MultiplyHolder(int32_t num) : num_(num) {}
+
+  static Status Make(const FunctionNode& node, 
std::shared_ptr<MultiplyHolder>* holder) {

Review Comment:
   I used this style for consistency with existing holder function makers. But 
actually I do feel it is simpler to return 
`Result<std::shared_ptr<MultiplyHolder>>`. Now I change it to return 
`arrow::Result`



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to