text: #include "duckdb/common/exception.hpp"
  #include "duckdb/common/types.hpp"
  #include "fmt/format.h"
  #include "fmt/printf.h"
  
  namespace duckdb {
  
  template <>
  ExceptionFormatValue ExceptionFormatValue::CreateFormatValue(PhysicalType value) {
  	return ExceptionFormatValue(TypeIdToString(value));
  }
  template <>
  ExceptionFormatValue ExceptionFormatValue::CreateFormatValue(LogicalType value) {
  	return ExceptionFormatValue(value.ToString());
  }
  template <>
  ExceptionFormatValue ExceptionFormatValue::CreateFormatValue(float value) {
  	return ExceptionFormatValue(double(value));
  }
  template <>
  ExceptionFormatValue ExceptionFormatValue::CreateFormatValue(double value) {
  	return ExceptionFormatValue(double(value));
  }
  template <>
  ExceptionFormatValue ExceptionFormatValue::CreateFormatValue(string value) {
  	return ExceptionFormatValue(string(value));
  }
  template <>
  ExceptionFormatValue ExceptionFormatValue::CreateFormatValue(const char *value) {
  	return ExceptionFormatValue(string(value));
  }
  template <>
  ExceptionFormatValue ExceptionFormatValue::CreateFormatValue(char *value) {
  	return ExceptionFormatValue(string(value));
  }
  
  string ExceptionFormatValue::Format(string msg, vector<ExceptionFormatValue> &values) {
  	std::vector<duckdb_fmt::basic_format_arg<duckdb_fmt::printf_context>> format_args;
  	for (auto &val : values) {
  		switch (val.type) {
  		case ExceptionFormatValueType::FORMAT_VALUE_TYPE_DOUBLE:
  			format_args.push_back(duckdb_fmt::internal::make_arg<duckdb_fmt::printf_context>(val.dbl_val));
  			break;
  		case ExceptionFormatValueType::FORMAT_VALUE_TYPE_INTEGER:
  			format_args.push_back(duckdb_fmt::internal::make_arg<duckdb_fmt::printf_context>(val.int_val));
  			break;
  		case ExceptionFormatValueType::FORMAT_VALUE_TYPE_STRING:
  			format_args.push_back(duckdb_fmt::internal::make_arg<duckdb_fmt::printf_context>(val.str_val));
  			break;
  		}
  	}
  	return duckdb_fmt::vsprintf(msg, duckdb_fmt::basic_format_args<duckdb_fmt::printf_context>(
  	                                     format_args.data(), static_cast<int>(format_args.size())));
  }
  
  } // namespace duckdb
  