in cpp/src/arrow/compute/kernels/hash_aggregate.cc [2329:2475]
void RegisterHashAggregateBasic(FunctionRegistry* registry) {
static const auto default_count_options = CountOptions::Defaults();
static const auto default_scalar_aggregate_options = ScalarAggregateOptions::Defaults();
static const auto default_tdigest_options = TDigestOptions::Defaults();
static const auto default_variance_options = VarianceOptions::Defaults();
static const auto default_skew_options = SkewOptions::Defaults();
{
auto func = std::make_shared<HashAggregateFunction>(
"hash_count", Arity::Binary(), hash_count_doc, &default_count_options);
DCHECK_OK(func->AddKernel(
MakeKernel(InputType::Any(), HashAggregateInit<GroupedCountImpl>)));
DCHECK_OK(registry->AddFunction(std::move(func)));
}
{
auto func = std::make_shared<HashAggregateFunction>("hash_count_all", Arity::Unary(),
hash_count_all_doc, NULLPTR);
DCHECK_OK(func->AddKernel(MakeUnaryKernel(HashAggregateInit<GroupedCountAllImpl>)));
auto status = registry->AddFunction(std::move(func));
DCHECK_OK(status);
}
HashAggregateFunction* first_last_func = nullptr;
{
auto func = std::make_shared<HashAggregateFunction>(
"hash_first_last", Arity::Binary(), hash_first_last_doc,
&default_scalar_aggregate_options);
DCHECK_OK(
AddHashAggKernels(NumericTypes(), GroupedFirstLastFactory::Make, func.get()));
DCHECK_OK(
AddHashAggKernels(TemporalTypes(), GroupedFirstLastFactory::Make, func.get()));
DCHECK_OK(
AddHashAggKernels(BaseBinaryTypes(), GroupedFirstLastFactory::Make, func.get()));
DCHECK_OK(AddHashAggKernels({boolean(), fixed_size_binary(1)},
GroupedFirstLastFactory::Make, func.get()));
first_last_func = func.get();
DCHECK_OK(registry->AddFunction(std::move(func)));
}
{
auto func = std::make_shared<HashAggregateFunction>(
"hash_first", Arity::Binary(), hash_first_doc, &default_scalar_aggregate_options);
DCHECK_OK(
func->AddKernel(MakeFirstOrLastKernel<FirstOrLast::First>(first_last_func)));
DCHECK_OK(registry->AddFunction(std::move(func)));
}
{
auto func = std::make_shared<HashAggregateFunction>(
"hash_last", Arity::Binary(), hash_last_doc, &default_scalar_aggregate_options);
DCHECK_OK(func->AddKernel(MakeFirstOrLastKernel<FirstOrLast::Last>(first_last_func)));
DCHECK_OK(registry->AddFunction(std::move(func)));
}
HashAggregateFunction* min_max_func = nullptr;
{
auto func = std::make_shared<HashAggregateFunction>(
"hash_min_max", Arity::Binary(), hash_min_max_doc,
&default_scalar_aggregate_options);
DCHECK_OK(AddHashAggKernels(NumericTypes(), GroupedMinMaxFactory::Make, func.get()));
DCHECK_OK(AddHashAggKernels(TemporalTypes(), GroupedMinMaxFactory::Make, func.get()));
DCHECK_OK(
AddHashAggKernels(BaseBinaryTypes(), GroupedMinMaxFactory::Make, func.get()));
// Type parameters are ignored
DCHECK_OK(AddHashAggKernels({null(), boolean(), decimal128(1, 1), decimal256(1, 1),
month_interval(), fixed_size_binary(1)},
GroupedMinMaxFactory::Make, func.get()));
min_max_func = func.get();
DCHECK_OK(registry->AddFunction(std::move(func)));
}
{
auto func = std::make_shared<HashAggregateFunction>(
"hash_min", Arity::Binary(), hash_min_or_max_doc,
&default_scalar_aggregate_options);
DCHECK_OK(func->AddKernel(MakeMinOrMaxKernel<MinOrMax::Min>(min_max_func)));
DCHECK_OK(registry->AddFunction(std::move(func)));
}
{
auto func = std::make_shared<HashAggregateFunction>(
"hash_max", Arity::Binary(), hash_min_or_max_doc,
&default_scalar_aggregate_options);
DCHECK_OK(func->AddKernel(MakeMinOrMaxKernel<MinOrMax::Max>(min_max_func)));
DCHECK_OK(registry->AddFunction(std::move(func)));
}
{
auto func = std::make_shared<HashAggregateFunction>(
"hash_any", Arity::Binary(), hash_any_doc, &default_scalar_aggregate_options);
DCHECK_OK(func->AddKernel(MakeKernel(boolean(), HashAggregateInit<GroupedAnyImpl>)));
DCHECK_OK(registry->AddFunction(std::move(func)));
}
{
auto func = std::make_shared<HashAggregateFunction>(
"hash_all", Arity::Binary(), hash_all_doc, &default_scalar_aggregate_options);
DCHECK_OK(func->AddKernel(MakeKernel(boolean(), HashAggregateInit<GroupedAllImpl>)));
DCHECK_OK(registry->AddFunction(std::move(func)));
}
{
auto func = std::make_shared<HashAggregateFunction>(
"hash_count_distinct", Arity::Binary(), hash_count_distinct_doc,
&default_count_options);
DCHECK_OK(func->AddKernel(
MakeKernel(InputType::Any(), GroupedDistinctInit<GroupedCountDistinctImpl>)));
DCHECK_OK(registry->AddFunction(std::move(func)));
}
{
auto func = std::make_shared<HashAggregateFunction>(
"hash_distinct", Arity::Binary(), hash_distinct_doc, &default_count_options);
DCHECK_OK(func->AddKernel(
MakeKernel(InputType::Any(), GroupedDistinctInit<GroupedDistinctImpl>)));
DCHECK_OK(registry->AddFunction(std::move(func)));
}
{
auto func = std::make_shared<HashAggregateFunction>("hash_one", Arity::Binary(),
hash_one_doc);
DCHECK_OK(AddHashAggKernels(NumericTypes(), GroupedOneFactory::Make, func.get()));
DCHECK_OK(AddHashAggKernels(TemporalTypes(), GroupedOneFactory::Make, func.get()));
DCHECK_OK(AddHashAggKernels(BaseBinaryTypes(), GroupedOneFactory::Make, func.get()));
DCHECK_OK(AddHashAggKernels({null(), boolean(), decimal128(1, 1), decimal256(1, 1),
month_interval(), fixed_size_binary(1)},
GroupedOneFactory::Make, func.get()));
DCHECK_OK(registry->AddFunction(std::move(func)));
}
{
auto func = std::make_shared<HashAggregateFunction>("hash_list", Arity::Binary(),
hash_list_doc);
DCHECK_OK(AddHashAggKernels(NumericTypes(), GroupedListFactory::Make, func.get()));
DCHECK_OK(AddHashAggKernels(TemporalTypes(), GroupedListFactory::Make, func.get()));
DCHECK_OK(AddHashAggKernels(BaseBinaryTypes(), GroupedListFactory::Make, func.get()));
DCHECK_OK(AddHashAggKernels({null(), boolean(), decimal128(1, 1), decimal256(1, 1),
month_interval(), fixed_size_binary(1)},
GroupedListFactory::Make, func.get()));
DCHECK_OK(registry->AddFunction(std::move(func)));
}
}