12673 {
12674 switch (input.GetVectorType()) {
12675 case VectorType::CONSTANT_VECTOR: {
12676 result.SetVectorType(VectorType::CONSTANT_VECTOR);
12677 auto result_data = ConstantVector::GetData<RESULT_TYPE>(result);
12678 auto ldata = ConstantVector::GetData<INPUT_TYPE>(input);
12679
12680 if (ConstantVector::IsNull(input)) {
12681 ConstantVector::SetNull(result, true);
12682 } else {
12683 ConstantVector::SetNull(result, false);
12684 *result_data = OPWRAPPER::template Operation<OP, INPUT_TYPE, RESULT_TYPE>(
12685 *ldata, ConstantVector::Validity(result), 0, dataptr);
12686 }
12687 break;
12688 }
12689#ifndef DUCKDB_SMALLER_BINARY
12690 case VectorType::FLAT_VECTOR: {
12691 result.SetVectorType(VectorType::FLAT_VECTOR);
12692 auto result_data = FlatVector::GetData<RESULT_TYPE>(result);
12693 auto ldata = FlatVector::GetData<INPUT_TYPE>(input);
12694
12695 ExecuteFlat<INPUT_TYPE, RESULT_TYPE, OPWRAPPER, OP>(ldata, result_data, count, FlatVector::Validity(input),
12696 FlatVector::Validity(result), dataptr, adds_nulls);
12697 break;
12698 }
12699 case VectorType::DICTIONARY_VECTOR: {
12700
12701
12702
12703
12704 if (errors == FunctionErrors::CANNOT_ERROR) {
12705 static constexpr idx_t DICTIONARY_THRESHOLD = 2;
12706 auto dict_size = DictionaryVector::DictionarySize(input);
12707 if (dict_size.IsValid() && dict_size.GetIndex() * DICTIONARY_THRESHOLD <= count) {
12708
12709
12710 auto &dictionary_values = DictionaryVector::Child(input);
12711 if (dictionary_values.GetVectorType() == VectorType::FLAT_VECTOR) {
12712
12713 auto result_data = FlatVector::GetData<RESULT_TYPE>(result);
12714 auto ldata = FlatVector::GetData<INPUT_TYPE>(dictionary_values);
12715 ExecuteFlat<INPUT_TYPE, RESULT_TYPE, OPWRAPPER, OP>(
12716 ldata, result_data, dict_size.GetIndex(), FlatVector::Validity(dictionary_values),
12717 FlatVector::Validity(result), dataptr, adds_nulls);
12718
12719 auto &offsets = DictionaryVector::SelVector(input);
12720 result.Dictionary(result, dict_size.GetIndex(), offsets, count);
12721 break;
12722 }
12723 }
12724 }
12725 DUCKDB_EXPLICIT_FALLTHROUGH;
12726 }
12727#endif
12728 default: {
12729 UnifiedVectorFormat vdata;
12730 input.ToUnifiedFormat(count, vdata);
12731
12732 result.SetVectorType(VectorType::FLAT_VECTOR);
12733 auto result_data = FlatVector::GetData<RESULT_TYPE>(result);
12734 auto ldata = UnifiedVectorFormat::GetData<INPUT_TYPE>(vdata);
12735
12736 ExecuteLoop<INPUT_TYPE, RESULT_TYPE, OPWRAPPER, OP>(ldata, result_data, count, vdata.sel, vdata.validity,
12737 FlatVector::Validity(result), dataptr, adds_nulls);
12738 break;
12739 }
12740 }
12741 }