| 451 | // FirstLast implementation |
| 452 | |
| 453 | Result<std::unique_ptr<KernelState>> FirstLastInit(KernelContext* ctx, |
| 454 | const KernelInitArgs& args) { |
| 455 | ARROW_ASSIGN_OR_RAISE(TypeHolder out_type, |
| 456 | args.kernel->signature->out_type().Resolve(ctx, args.inputs)); |
| 457 | |
| 458 | FirstLastInitState visitor(ctx, *args.inputs[0], out_type.GetSharedPtr(), |
| 459 | static_cast<const ScalarAggregateOptions&>(*args.options)); |
| 460 | return visitor.Create(); |
| 461 | } |
| 462 | |
| 463 | // For "first" and "last" functions: override finalize and return the actual value |
| 464 | template <FirstOrLast first_or_last> |