17173 {
17174 if (input.GetVectorType() == VectorType::CONSTANT_VECTOR &&
17175 states.GetVectorType() == VectorType::CONSTANT_VECTOR) {
17176 if (OP::IgnoreNull() && ConstantVector::IsNull(input)) {
17177
17178 return;
17179 }
17180
17181 auto idata = ConstantVector::GetData<INPUT_TYPE>(input);
17182 auto sdata = ConstantVector::GetData<STATE_TYPE *>(states);
17183 AggregateUnaryInput input_data(aggr_input_data, ConstantVector::Validity(input));
17184 OP::template ConstantOperation<INPUT_TYPE, STATE_TYPE, OP>(**sdata, *idata, input_data, count);
17185#ifndef DUCKDB_SMALLER_BINARY
17186 } else if (input.GetVectorType() == VectorType::FLAT_VECTOR &&
17187 states.GetVectorType() == VectorType::FLAT_VECTOR) {
17188 auto idata = FlatVector::GetData<INPUT_TYPE>(input);
17189 auto sdata = FlatVector::GetData<STATE_TYPE *>(states);
17190 UnaryFlatLoop<STATE_TYPE, INPUT_TYPE, OP>(idata, aggr_input_data, sdata, FlatVector::Validity(input),
17191 count);
17192#endif
17193 } else {
17194 UnifiedVectorFormat idata, sdata;
17195 input.ToUnifiedFormat(count, idata);
17196 states.ToUnifiedFormat(count, sdata);
17197#ifdef DUCKDB_SMALLER_BINARY
17198 UnaryScatterLoop<STATE_TYPE, INPUT_TYPE, OP>(UnifiedVectorFormat::GetData<INPUT_TYPE>(idata),
17199 aggr_input_data, (STATE_TYPE **)sdata.data, *idata.sel,
17200 *sdata.sel, idata.validity, count);
17201#else
17202 if (idata.sel->IsSet()) {
17203 if (sdata.sel->IsSet()) {
17204 UnaryScatterLoop<STATE_TYPE, INPUT_TYPE, OP, true, true>(
17205 UnifiedVectorFormat::GetData<INPUT_TYPE>(idata), aggr_input_data, (STATE_TYPE **)sdata.data,
17206 *idata.sel, *sdata.sel, idata.validity, count);
17207 } else {
17208 UnaryScatterLoop<STATE_TYPE, INPUT_TYPE, OP, true, false>(
17209 UnifiedVectorFormat::GetData<INPUT_TYPE>(idata), aggr_input_data, (STATE_TYPE **)sdata.data,
17210 *idata.sel, *sdata.sel, idata.validity, count);
17211 }
17212 } else {
17213 if (sdata.sel->IsSet()) {
17214 UnaryScatterLoop<STATE_TYPE, INPUT_TYPE, OP, false, true>(
17215 UnifiedVectorFormat::GetData<INPUT_TYPE>(idata), aggr_input_data, (STATE_TYPE **)sdata.data,
17216 *idata.sel, *sdata.sel, idata.validity, count);
17217 } else {
17218 UnaryScatterLoop<STATE_TYPE, INPUT_TYPE, OP, false, false>(
17219 UnifiedVectorFormat::GetData<INPUT_TYPE>(idata), aggr_input_data, (STATE_TYPE **)sdata.data,
17220 *idata.sel, *sdata.sel, idata.validity, count);
17221 }
17222 }
17223
17224#endif
17225 }
17226 }