@@ -413,6 +413,29 @@ std::shared_ptr<IContextColumn> string_to_list(
413413 return builder.finish ();
414414}
415415
416+ template <typename T>
417+ std::shared_ptr<IContextColumn> scalar_to_list (
418+ const Var& var, const std::vector<std::vector<size_t >>& to_aggregate) {
419+ ListValueColumnBuilder<T> builder;
420+ size_t col_size = to_aggregate.size ();
421+ builder.reserve (col_size);
422+ std::vector<std::shared_ptr<ListImplBase>> impls;
423+ for (size_t k = 0 ; k < col_size; ++k) {
424+ auto & vec = to_aggregate[k];
425+
426+ std::vector<T> elem;
427+ for (auto idx : vec) {
428+ elem.push_back (TypedConverter<T>::to_typed (var.get (idx)));
429+ }
430+ auto impl = ListImpl<T>::make_list_impl (std::move (elem));
431+ auto list = List::make_list (impl);
432+ impls.emplace_back (impl);
433+ builder.push_back_opt (list);
434+ }
435+ builder.set_list_impls (impls);
436+ return builder.finish ();
437+ }
438+
416439bl::result<std::shared_ptr<IContextColumn>> apply_reduce (
417440 const AggFunc& func, const std::vector<std::vector<size_t >>& to_aggregate) {
418441 if (func.aggregate == AggrKind::kSum ) {
@@ -497,6 +520,14 @@ bl::result<std::shared_ptr<IContextColumn>> apply_reduce(
497520 return tuple_to_list (var, to_aggregate);
498521 } else if (var.type () == RTAnyType::kStringValue ) {
499522 return string_to_list (var, to_aggregate);
523+ } else if (var.type () == RTAnyType::kI32Value ) {
524+ return scalar_to_list<int32_t >(var, to_aggregate);
525+ } else if (var.type () == RTAnyType::kI64Value ) {
526+ return scalar_to_list<int64_t >(var, to_aggregate);
527+ } else if (var.type () == RTAnyType::kU64Value ) {
528+ return scalar_to_list<uint64_t >(var, to_aggregate);
529+ } else if (var.type () == RTAnyType::kF64Value ) {
530+ return scalar_to_list<double >(var, to_aggregate);
500531 } else {
501532 LOG (FATAL) << " not support" << static_cast <int >(var.type ().type_enum_ );
502533 }
0 commit comments