//===----------------------------------------------------------------------===// // DuckDB // // duckdb/common/types/null_value.hpp // // //===----------------------------------------------------------------------===// #pragma once #include "duckdb/common/common.hpp" #include "duckdb/common/types/string_type.hpp" #include "duckdb/common/types.hpp" #include "duckdb/common/types/interval.hpp" #include "duckdb/common/limits.hpp" #include "duckdb/common/windows_undefs.hpp" #include #include #include namespace duckdb { //! Placeholder to insert in Vectors or to use for hashing NULLs template inline T NullValue() { return std::numeric_limits::min(); } constexpr const char str_nil[2] = {'\200', '\0'}; template <> inline const char *NullValue() { D_ASSERT(str_nil[0] == '\200' && str_nil[1] == '\0'); return str_nil; } template <> inline string_t NullValue() { return string_t(NullValue()); } template <> inline char *NullValue() { return (char *)NullValue(); // NOLINT } template <> inline string NullValue() { return string(NullValue()); } template <> inline interval_t NullValue() { interval_t null_value; null_value.days = NullValue(); null_value.months = NullValue(); null_value.micros = NullValue(); return null_value; } template <> inline hugeint_t NullValue() { hugeint_t min; min.lower = 0; min.upper = std::numeric_limits::min(); return min; } template <> inline float NullValue() { return NAN; } template <> inline double NullValue() { return NAN; } } // namespace duckdb