Autonomy Software C++ 24.5.1
Welcome to the Autonomy Software repository of the Mars Rover Design Team (MRDT) at Missouri University of Science and Technology (Missouri S&T)! API reference contains the source code and other resources for the development of the autonomy software for our Mars rover. The Autonomy Software project aims to compete in the University Rover Challenge (URC) by demonstrating advanced autonomous capabilities and robust navigation algorithms.
Loading...
Searching...
No Matches
duckdb::UDFWrapper Struct Reference

Classes

struct  UnaryUDFExecutor
 

Static Public Member Functions

template<typename TR , typename... ARGS>
static scalar_function_t CreateScalarFunction (const string &name, TR(*udf_func)(ARGS...))
 
template<typename TR , typename... ARGS>
static scalar_function_t CreateScalarFunction (const string &name, const vector< LogicalType > &args, const LogicalType &ret_type, TR(*udf_func)(ARGS...))
 
template<typename TR , typename... ARGS>
static void RegisterFunction (const string &name, scalar_function_t udf_function, ClientContext &context, LogicalType varargs=LogicalType(LogicalTypeId::INVALID))
 
static void RegisterFunction (string name, vector< LogicalType > args, LogicalType ret_type, scalar_function_t udf_function, ClientContext &context, LogicalType varargs=LogicalType(LogicalTypeId::INVALID))
 
template<typename UDF_OP , typename STATE , typename TR , typename TA >
static AggregateFunction CreateAggregateFunction (const string &name)
 
template<typename UDF_OP , typename STATE , typename TR , typename TA , typename TB >
static AggregateFunction CreateAggregateFunction (const string &name)
 
template<typename UDF_OP , typename STATE , typename TR , typename TA >
static AggregateFunction CreateAggregateFunction (const string &name, const LogicalType &ret_type, const LogicalType &input_type)
 
template<typename UDF_OP , typename STATE , typename TR , typename TA , typename TB >
static AggregateFunction CreateAggregateFunction (const string &name, const LogicalType &ret_type, const LogicalType &input_type_a, const LogicalType &input_type_b)
 
static AggregateFunction CreateAggregateFunction (const string &name, const vector< LogicalType > &arguments, const LogicalType &return_type, aggregate_size_t state_size, aggregate_initialize_t initialize, aggregate_update_t update, aggregate_combine_t combine, aggregate_finalize_t finalize, aggregate_simple_update_t simple_update=nullptr, bind_aggregate_function_t bind=nullptr, aggregate_destructor_t destructor=nullptr)
 A generic CreateAggregateFunction ------------------------------------------------------------------------—//.
 
static void RegisterAggrFunction (AggregateFunction aggr_function, ClientContext &context, LogicalType varargs=LogicalType(LogicalTypeId::INVALID))
 

Static Private Member Functions

template<typename TR , typename TA >
static scalar_function_t CreateUnaryFunction (const string &name, TR(*udf_func)(TA))
 
template<typename TR , typename TA , typename TB >
static scalar_function_t CreateBinaryFunction (const string &name, TR(*udf_func)(TA, TB))
 
template<typename TR , typename TA , typename TB , typename TC >
static scalar_function_t CreateTernaryFunction (const string &name, TR(*udf_func)(TA, TB, TC))
 
template<typename TR , typename... ARGS>
static scalar_function_t CreateUnaryFunction (const string &name, TR(*udf_func)(ARGS...))
 
template<typename TR , typename... ARGS>
static scalar_function_t CreateBinaryFunction (const string &name, TR(*udf_func)(ARGS...))
 
template<typename TR , typename... ARGS>
static scalar_function_t CreateTernaryFunction (const string &name, TR(*udf_func)(ARGS...))
 
template<typename T >
static LogicalType GetArgumentType ()
 
template<typename TA , typename TB , typename... ARGS>
static void GetArgumentTypesRecursive (vector< LogicalType > &arguments)
 
template<typename TA >
static void GetArgumentTypesRecursive (vector< LogicalType > &arguments)
 
template<typename TR , typename... ARGS>
static scalar_function_t CreateUnaryFunction (const string &name, const vector< LogicalType > &args, const LogicalType &ret_type, TR(*udf_func)(ARGS...))
 
template<typename TR , typename TA >
static scalar_function_t CreateUnaryFunction (const string &name, const vector< LogicalType > &args, const LogicalType &ret_type, TR(*udf_func)(TA))
 
template<typename TR , typename... ARGS>
static scalar_function_t CreateBinaryFunction (const string &name, const vector< LogicalType > &args, const LogicalType &ret_type, TR(*udf_func)(ARGS...))
 
template<typename TR , typename TA , typename TB >
static scalar_function_t CreateBinaryFunction (const string &name, const vector< LogicalType > &args, const LogicalType &ret_type, TR(*udf_func)(TA, TB))
 
template<typename TR , typename... ARGS>
static scalar_function_t CreateTernaryFunction (const string &name, const vector< LogicalType > &args, const LogicalType &ret_type, TR(*udf_func)(ARGS...))
 
template<typename TR , typename TA , typename TB , typename TC >
static scalar_function_t CreateTernaryFunction (const string &name, const vector< LogicalType > &args, const LogicalType &ret_type, TR(*udf_func)(TA, TB, TC))
 
template<typename T >
static bool TypesMatch (const LogicalType &sql_type)
 
template<typename UDF_OP , typename STATE , typename TR , typename TA >
static AggregateFunction CreateUnaryAggregateFunction (const string &name)
 
template<typename UDF_OP , typename STATE , typename TR , typename TA >
static AggregateFunction CreateUnaryAggregateFunction (const string &name, const LogicalType &ret_type, const LogicalType &input_type)
 
template<typename UDF_OP , typename STATE , typename TR , typename TA , typename TB >
static AggregateFunction CreateBinaryAggregateFunction (const string &name)
 
template<typename UDF_OP , typename STATE , typename TR , typename TA , typename TB >
static AggregateFunction CreateBinaryAggregateFunction (const string &name, const LogicalType &ret_type, const LogicalType &input_type_a, const LogicalType &input_type_b)
 

Member Function Documentation

◆ CreateScalarFunction() [1/2]

template<typename TR , typename... ARGS>
static scalar_function_t duckdb::UDFWrapper::CreateScalarFunction ( const string &  name,
TR(*)(ARGS...)  udf_func 
)
inlinestatic
18383 {
18384 const std::size_t num_template_argc = sizeof...(ARGS);
18385 switch (num_template_argc) {
18386 case 1:
18387 return CreateUnaryFunction<TR, ARGS...>(name, udf_func);
18388 case 2:
18389 return CreateBinaryFunction<TR, ARGS...>(name, udf_func);
18390 case 3:
18391 return CreateTernaryFunction<TR, ARGS...>(name, udf_func);
18392 default: // LCOV_EXCL_START
18393 throw std::runtime_error("UDF function only supported until ternary!");
18394 } // LCOV_EXCL_STOP
18395 }

◆ CreateScalarFunction() [2/2]

template<typename TR , typename... ARGS>
static scalar_function_t duckdb::UDFWrapper::CreateScalarFunction ( const string &  name,
const vector< LogicalType > &  args,
const LogicalType ret_type,
TR(*)(ARGS...)  udf_func 
)
inlinestatic
18399 {
18400 if (!TypesMatch<TR>(ret_type)) { // LCOV_EXCL_START
18401 throw std::runtime_error("Return type doesn't match with the first template type.");
18402 } // LCOV_EXCL_STOP
18403
18404 const std::size_t num_template_types = sizeof...(ARGS);
18405 if (num_template_types != args.size()) { // LCOV_EXCL_START
18406 throw std::runtime_error(
18407 "The number of templated types should be the same quantity of the LogicalType arguments.");
18408 } // LCOV_EXCL_STOP
18409
18410 switch (num_template_types) {
18411 case 1:
18412 return CreateUnaryFunction<TR, ARGS...>(name, args, ret_type, udf_func);
18413 case 2:
18414 return CreateBinaryFunction<TR, ARGS...>(name, args, ret_type, udf_func);
18415 case 3:
18416 return CreateTernaryFunction<TR, ARGS...>(name, args, ret_type, udf_func);
18417 default: // LCOV_EXCL_START
18418 throw std::runtime_error("UDF function only supported until ternary!");
18419 } // LCOV_EXCL_STOP
18420 }

◆ RegisterFunction()

template<typename TR , typename... ARGS>
static void duckdb::UDFWrapper::RegisterFunction ( const string &  name,
scalar_function_t  udf_function,
ClientContext context,
LogicalType  varargs = LogicalType(LogicalTypeId::INVALID) 
)
inlinestatic
18424 {
18425 vector<LogicalType> arguments;
18426 GetArgumentTypesRecursive<ARGS...>(arguments);
18427
18428 LogicalType ret_type = GetArgumentType<TR>();
18429
18430 RegisterFunction(name, arguments, ret_type, std::move(udf_function), context, std::move(varargs));
18431 }

◆ CreateAggregateFunction() [1/5]

static AggregateFunction duckdb::UDFWrapper::CreateAggregateFunction ( const string &  name)
inlinestatic
18439 {
18440 return CreateUnaryAggregateFunction<UDF_OP, STATE, TR, TA>(name);
18441 }

◆ CreateAggregateFunction() [2/5]

static AggregateFunction duckdb::UDFWrapper::CreateAggregateFunction ( const string &  name)
inlinestatic
18444 {
18445 return CreateBinaryAggregateFunction<UDF_OP, STATE, TR, TA, TB>(name);
18446 }

◆ CreateAggregateFunction() [3/5]

static AggregateFunction duckdb::UDFWrapper::CreateAggregateFunction ( const string &  name,
const LogicalType ret_type,
const LogicalType input_type 
)
inlinestatic
18450 {
18451 if (!TypesMatch<TR>(ret_type)) { // LCOV_EXCL_START
18452 throw std::runtime_error("The return argument don't match!");
18453 } // LCOV_EXCL_STOP
18454
18455 if (!TypesMatch<TA>(input_type)) { // LCOV_EXCL_START
18456 throw std::runtime_error("The input argument don't match!");
18457 } // LCOV_EXCL_STOP
18458
18459 return CreateUnaryAggregateFunction<UDF_OP, STATE, TR, TA>(name, ret_type, input_type);
18460 }

◆ CreateAggregateFunction() [4/5]

static AggregateFunction duckdb::UDFWrapper::CreateAggregateFunction ( const string &  name,
const LogicalType ret_type,
const LogicalType input_type_a,
const LogicalType input_type_b 
)
inlinestatic
18465 {
18466 if (!TypesMatch<TR>(ret_type)) { // LCOV_EXCL_START
18467 throw std::runtime_error("The return argument don't match!");
18468 }
18469
18470 if (!TypesMatch<TA>(input_type_a)) {
18471 throw std::runtime_error("The first input argument don't match!");
18472 }
18473
18474 if (!TypesMatch<TB>(input_type_b)) {
18475 throw std::runtime_error("The second input argument don't match!");
18476 } // LCOV_EXCL_STOP
18477
18478 return CreateBinaryAggregateFunction<UDF_OP, STATE, TR, TA, TB>(name, ret_type, input_type_a, input_type_b);
18479 }

◆ CreateAggregateFunction() [5/5]

static AggregateFunction duckdb::UDFWrapper::CreateAggregateFunction ( const string &  name,
const vector< LogicalType > &  arguments,
const LogicalType return_type,
aggregate_size_t  state_size,
aggregate_initialize_t  initialize,
aggregate_update_t  update,
aggregate_combine_t  combine,
aggregate_finalize_t  finalize,
aggregate_simple_update_t  simple_update = nullptr,
bind_aggregate_function_t  bind = nullptr,
aggregate_destructor_t  destructor = nullptr 
)
inlinestatic

A generic CreateAggregateFunction ------------------------------------------------------------------------—//.

18487 {
18488 AggregateFunction aggr_function(name, arguments, return_type, state_size, initialize, update, combine, finalize,
18489 simple_update, bind, destructor);
18490 aggr_function.SetNullHandling(FunctionNullHandling::SPECIAL_HANDLING);
18491 return aggr_function;
18492 }
Here is the call graph for this function:

◆ CreateUnaryFunction() [1/4]

template<typename TR , typename TA >
static scalar_function_t duckdb::UDFWrapper::CreateUnaryFunction ( const string &  name,
TR(*)(TA udf_func 
)
inlinestaticprivate
18509 {
18510 scalar_function_t udf_function = [=](DataChunk &input, ExpressionState &state, Vector &result) -> void {
18511 UnaryExecutor::GenericExecute<TA, TR, UnaryUDFExecutor>(input.data[0], result, input.size(),
18512 (void *)udf_func);
18513 };
18514 return udf_function;
18515 }
std::function< void(DataChunk &, ExpressionState &, Vector &)> scalar_function_t
The scalar function type.
Definition duckdb.hpp:16489

◆ CreateBinaryFunction() [1/4]

template<typename TR , typename TA , typename TB >
static scalar_function_t duckdb::UDFWrapper::CreateBinaryFunction ( const string &  name,
TR(*)(TA, TB udf_func 
)
inlinestaticprivate
18518 {
18519 scalar_function_t udf_function = [=](DataChunk &input, ExpressionState &state, Vector &result) -> void {
18520 BinaryExecutor::Execute<TA, TB, TR>(input.data[0], input.data[1], result, input.size(), udf_func);
18521 };
18522 return udf_function;
18523 }

◆ CreateTernaryFunction() [1/4]

static scalar_function_t duckdb::UDFWrapper::CreateTernaryFunction ( const string &  name,
TR(*)(TA, TB, TC udf_func 
)
inlinestaticprivate
18526 {
18527 scalar_function_t udf_function = [=](DataChunk &input, ExpressionState &state, Vector &result) -> void {
18528 TernaryExecutor::Execute<TA, TB, TC, TR>(input.data[0], input.data[1], input.data[2], result, input.size(),
18529 udf_func);
18530 };
18531 return udf_function;
18532 }

◆ CreateUnaryFunction() [2/4]

template<typename TR , typename... ARGS>
static scalar_function_t duckdb::UDFWrapper::CreateUnaryFunction ( const string &  name,
TR(*)(ARGS...)  udf_func 
)
inlinestaticprivate
18536 { // LCOV_EXCL_START
18537 throw std::runtime_error("Incorrect number of arguments for unary function");
18538 } // LCOV_EXCL_STOP

◆ CreateBinaryFunction() [2/4]

template<typename TR , typename... ARGS>
static scalar_function_t duckdb::UDFWrapper::CreateBinaryFunction ( const string &  name,
TR(*)(ARGS...)  udf_func 
)
inlinestaticprivate
18542 { // LCOV_EXCL_START
18543 throw std::runtime_error("Incorrect number of arguments for binary function");
18544 } // LCOV_EXCL_STOP

◆ CreateTernaryFunction() [2/4]

template<typename TR , typename... ARGS>
static scalar_function_t duckdb::UDFWrapper::CreateTernaryFunction ( const string &  name,
TR(*)(ARGS...)  udf_func 
)
inlinestaticprivate
18548 { // LCOV_EXCL_START
18549 throw std::runtime_error("Incorrect number of arguments for ternary function");
18550 } // LCOV_EXCL_STOP

◆ GetArgumentType()

template<typename T >
static LogicalType duckdb::UDFWrapper::GetArgumentType ( )
inlinestaticprivate
18553 {
18554 if (std::is_same<T, bool>()) {
18555 return LogicalType(LogicalTypeId::BOOLEAN);
18556 } else if (std::is_same<T, int8_t>()) {
18557 return LogicalType(LogicalTypeId::TINYINT);
18558 } else if (std::is_same<T, int16_t>()) {
18559 return LogicalType(LogicalTypeId::SMALLINT);
18560 } else if (std::is_same<T, int32_t>()) {
18561 return LogicalType(LogicalTypeId::INTEGER);
18562 } else if (std::is_same<T, int64_t>()) {
18563 return LogicalType(LogicalTypeId::BIGINT);
18564 } else if (std::is_same<T, float>()) {
18565 return LogicalType(LogicalTypeId::FLOAT);
18566 } else if (std::is_same<T, double>()) {
18567 return LogicalType(LogicalTypeId::DOUBLE);
18568 } else if (std::is_same<T, string_t>()) {
18569 return LogicalType(LogicalTypeId::VARCHAR);
18570 } else { // LCOV_EXCL_START
18571 throw std::runtime_error("Unrecognized type!");
18572 } // LCOV_EXCL_STOP
18573 }

◆ GetArgumentTypesRecursive() [1/2]

template<typename TA , typename TB , typename... ARGS>
static void duckdb::UDFWrapper::GetArgumentTypesRecursive ( vector< LogicalType > &  arguments)
inlinestaticprivate
18576 {
18577 arguments.push_back(GetArgumentType<TA>());
18578 GetArgumentTypesRecursive<TB, ARGS...>(arguments);
18579 }

◆ GetArgumentTypesRecursive() [2/2]

template<typename TA >
static void duckdb::UDFWrapper::GetArgumentTypesRecursive ( vector< LogicalType > &  arguments)
inlinestaticprivate
18582 {
18583 arguments.push_back(GetArgumentType<TA>());
18584 }

◆ CreateUnaryFunction() [3/4]

template<typename TR , typename... ARGS>
static scalar_function_t duckdb::UDFWrapper::CreateUnaryFunction ( const string &  name,
const vector< LogicalType > &  args,
const LogicalType ret_type,
TR(*)(ARGS...)  udf_func 
)
inlinestaticprivate
18592 { // LCOV_EXCL_START
18593 throw std::runtime_error("Incorrect number of arguments for unary function");
18594 } // LCOV_EXCL_STOP

◆ CreateUnaryFunction() [4/4]

template<typename TR , typename TA >
static scalar_function_t duckdb::UDFWrapper::CreateUnaryFunction ( const string &  name,
const vector< LogicalType > &  args,
const LogicalType ret_type,
TR(*)(TA udf_func 
)
inlinestaticprivate
18598 {
18599 if (args.size() != 1) { // LCOV_EXCL_START
18600 throw std::runtime_error("The number of LogicalType arguments (\"args\") should be 1!");
18601 }
18602 if (!TypesMatch<TA>(args[0])) {
18603 throw std::runtime_error("The first arguments don't match!");
18604 } // LCOV_EXCL_STOP
18605
18606 scalar_function_t udf_function = [=](DataChunk &input, ExpressionState &state, Vector &result) -> void {
18607 UnaryExecutor::GenericExecute<TA, TR, UnaryUDFExecutor>(input.data[0], result, input.size(),
18608 (void *)udf_func);
18609 };
18610 return udf_function;
18611 }

◆ CreateBinaryFunction() [3/4]

template<typename TR , typename... ARGS>
static scalar_function_t duckdb::UDFWrapper::CreateBinaryFunction ( const string &  name,
const vector< LogicalType > &  args,
const LogicalType ret_type,
TR(*)(ARGS...)  udf_func 
)
inlinestaticprivate
18616 { // LCOV_EXCL_START
18617 throw std::runtime_error("Incorrect number of arguments for binary function");
18618 } // LCOV_EXCL_STOP

◆ CreateBinaryFunction() [4/4]

template<typename TR , typename TA , typename TB >
static scalar_function_t duckdb::UDFWrapper::CreateBinaryFunction ( const string &  name,
const vector< LogicalType > &  args,
const LogicalType ret_type,
TR(*)(TA, TB udf_func 
)
inlinestaticprivate
18622 {
18623 if (args.size() != 2) { // LCOV_EXCL_START
18624 throw std::runtime_error("The number of LogicalType arguments (\"args\") should be 2!");
18625 }
18626 if (!TypesMatch<TA>(args[0])) {
18627 throw std::runtime_error("The first arguments don't match!");
18628 }
18629 if (!TypesMatch<TB>(args[1])) {
18630 throw std::runtime_error("The second arguments don't match!");
18631 } // LCOV_EXCL_STOP
18632
18633 scalar_function_t udf_function = [=](DataChunk &input, ExpressionState &state, Vector &result) {
18634 BinaryExecutor::Execute<TA, TB, TR>(input.data[0], input.data[1], result, input.size(), udf_func);
18635 };
18636 return udf_function;
18637 }

◆ CreateTernaryFunction() [3/4]

template<typename TR , typename... ARGS>
static scalar_function_t duckdb::UDFWrapper::CreateTernaryFunction ( const string &  name,
const vector< LogicalType > &  args,
const LogicalType ret_type,
TR(*)(ARGS...)  udf_func 
)
inlinestaticprivate
18642 { // LCOV_EXCL_START
18643 throw std::runtime_error("Incorrect number of arguments for ternary function");
18644 } // LCOV_EXCL_STOP

◆ CreateTernaryFunction() [4/4]

static scalar_function_t duckdb::UDFWrapper::CreateTernaryFunction ( const string &  name,
const vector< LogicalType > &  args,
const LogicalType ret_type,
TR(*)(TA, TB, TC udf_func 
)
inlinestaticprivate
18648 {
18649 if (args.size() != 3) { // LCOV_EXCL_START
18650 throw std::runtime_error("The number of LogicalType arguments (\"args\") should be 3!");
18651 }
18652 if (!TypesMatch<TA>(args[0])) {
18653 throw std::runtime_error("The first arguments don't match!");
18654 }
18655 if (!TypesMatch<TB>(args[1])) {
18656 throw std::runtime_error("The second arguments don't match!");
18657 }
18658 if (!TypesMatch<TC>(args[2])) {
18659 throw std::runtime_error("The second arguments don't match!");
18660 } // LCOV_EXCL_STOP
18661
18662 scalar_function_t udf_function = [=](DataChunk &input, ExpressionState &state, Vector &result) -> void {
18663 TernaryExecutor::Execute<TA, TB, TC, TR>(input.data[0], input.data[1], input.data[2], result, input.size(),
18664 udf_func);
18665 };
18666 return udf_function;
18667 }

◆ TypesMatch()

template<typename T >
static bool duckdb::UDFWrapper::TypesMatch ( const LogicalType sql_type)
inlinestaticprivate
18670 {
18671 switch (sql_type.id()) {
18672 case LogicalTypeId::BOOLEAN:
18673 return std::is_same<T, bool>();
18674 case LogicalTypeId::TINYINT:
18675 return std::is_same<T, int8_t>();
18676 case LogicalTypeId::SMALLINT:
18677 return std::is_same<T, int16_t>();
18678 case LogicalTypeId::INTEGER:
18679 return std::is_same<T, int32_t>();
18680 case LogicalTypeId::BIGINT:
18681 return std::is_same<T, int64_t>();
18682 case LogicalTypeId::DATE:
18683 return std::is_same<T, date_t>();
18684 case LogicalTypeId::TIME:
18685 return std::is_same<T, dtime_t>();
18686 case LogicalTypeId::TIME_NS:
18687 return std::is_same<T, dtime_ns_t>();
18688 case LogicalTypeId::TIME_TZ:
18689 return std::is_same<T, dtime_tz_t>();
18690 case LogicalTypeId::TIMESTAMP:
18691 case LogicalTypeId::TIMESTAMP_MS:
18693 case LogicalTypeId::TIMESTAMP_SEC:
18694 case LogicalTypeId::TIMESTAMP_TZ:
18695 return std::is_same<T, timestamp_t>();
18696 case LogicalTypeId::FLOAT:
18697 return std::is_same<T, float>();
18698 case LogicalTypeId::DOUBLE:
18699 return std::is_same<T, double>();
18700 case LogicalTypeId::VARCHAR:
18701 case LogicalTypeId::CHAR:
18702 case LogicalTypeId::BLOB:
18703 return std::is_same<T, string_t>();
18704 default: // LCOV_EXCL_START
18705 throw std::runtime_error("Type is not supported!");
18706 } // LCOV_EXCL_STOP
18707 }

◆ CreateUnaryAggregateFunction() [1/2]

static AggregateFunction duckdb::UDFWrapper::CreateUnaryAggregateFunction ( const string &  name)
inlinestaticprivate
18712 {
18713 LogicalType return_type = GetArgumentType<TR>();
18714 LogicalType input_type = GetArgumentType<TA>();
18715 return CreateUnaryAggregateFunction<UDF_OP, STATE, TR, TA>(name, return_type, input_type);
18716 }

◆ CreateUnaryAggregateFunction() [2/2]

static AggregateFunction duckdb::UDFWrapper::CreateUnaryAggregateFunction ( const string &  name,
const LogicalType ret_type,
const LogicalType input_type 
)
inlinestaticprivate
18720 {
18721 AggregateFunction aggr_function =
18722 AggregateFunction::UnaryAggregate<STATE, TR, TA, UDF_OP>(input_type, ret_type);
18723 aggr_function.name = name;
18724 return aggr_function;
18725 }

◆ CreateBinaryAggregateFunction() [1/2]

static AggregateFunction duckdb::UDFWrapper::CreateBinaryAggregateFunction ( const string &  name)
inlinestaticprivate
18728 {
18729 LogicalType return_type = GetArgumentType<TR>();
18730 LogicalType input_type_a = GetArgumentType<TA>();
18731 LogicalType input_type_b = GetArgumentType<TB>();
18732 return CreateBinaryAggregateFunction<UDF_OP, STATE, TR, TA, TB>(name, return_type, input_type_a, input_type_b);
18733 }

◆ CreateBinaryAggregateFunction() [2/2]

static AggregateFunction duckdb::UDFWrapper::CreateBinaryAggregateFunction ( const string &  name,
const LogicalType ret_type,
const LogicalType input_type_a,
const LogicalType input_type_b 
)
inlinestaticprivate
18738 {
18739 AggregateFunction aggr_function =
18740 AggregateFunction::BinaryAggregate<STATE, TA, TB, TR, UDF_OP>(input_type_a, input_type_b, ret_type);
18741 aggr_function.name = name;
18742 return aggr_function;
18743 }

The documentation for this struct was generated from the following file: