3#ifndef BOAT_DB_VARIANT_HPP
4#define BOAT_DB_VARIANT_HPP
11using null = std::monostate;
12using variant_base = std::variant<null, int64_t, double, std::string, blob>;
15 using variant_base::variant_base;
16 explicit variant(std::string_view v) { emplace<std::string>(v); }
17 explicit operator bool()
const {
return has_value(); }
18 bool has_value()
const {
return !std::holds_alternative<null>(*
this); }
19 void reset() { emplace<null>(); }
24template <std::convertible_to<variant_base> T>
27 auto vis = overloaded{
28 [&](
null) { out = {}; },
29 [&](std::convertible_to<T>
auto& v) { out =
static_cast<T
>(v); },
30 [](...) {
throw std::bad_variant_access{}; }};
34void write(
variant& out, std::convertible_to<variant_base>
auto const& in)
41 requires requires(T val) {
read(var, val); }
60template <std::
integral T>
62 static constexpr auto value =
"int";
65template <std::
floating_po
int T>
67 static constexpr auto value =
"float";
72 static constexpr auto value =
"varchar";
77 static constexpr auto value =
"blob";
Definition geometry.hpp:9
void write(variant &out, geometry::ogc99 auto const &in)
Serializes an OGC geometry as WKB in a blob.
Definition geometry.hpp:21
std::variant< null, int64_t, double, std::string, blob > variant_base
Definition variant.hpp:12
void read(variant const &in, geometry::ogc99 auto &out)
Reads WKB from a blob; NULL produces a default-constructed geometry.
Definition geometry.hpp:12
std::monostate null
Definition variant.hpp:11
variant to_variant(auto const &val)
Definition variant.hpp:48
T get(variant const &var)
Definition variant.hpp:40
static constexpr auto value
Definition variant.hpp:77
static constexpr auto value
Definition variant.hpp:72
Maps a C++ type to the database-neutral type name used by boat.
Definition variant.hpp:58
Definition variant.hpp:14
void reset()
Definition variant.hpp:19
variant(std::string_view v)
Definition variant.hpp:16
bool has_value() const
Definition variant.hpp:18