3#ifndef BOAT_DB_ROWSET_HPP
4#define BOAT_DB_ROWSET_HPP
7#include <boost/pfr.hpp>
14 std::vector<std::vector<variant>>
rows;
26constexpr auto view = std::views::transform([](range_of<variant>
auto&& r) {
28 auto it = std::ranges::begin(r);
29 auto vis = [&](
auto& v) {
30 check(it != std::ranges::end(r),
"out of fields");
33 if constexpr (
requires {
read(*it, ret); })
36 boost::pfr::for_each_field(ret, vis);
37 check(it == std::ranges::end(r),
"out of fields");
45 boost::pfr::names_as_array<std::ranges::range_value_t<
decltype(r)>>() |
46 std::ranges::to<decltype(rowset::columns)>()};
47 for (
auto&& item : r) {
48 auto& row = ret.rows.emplace_back();
49 auto vis = [&](
auto& v) {
write(row.emplace_back(), v); };
50 boost::pfr::for_each_field(item, vis);
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
void read(variant const &in, geometry::ogc99 auto &out)
Reads WKB from a blob; NULL produces a default-constructed geometry.
Definition geometry.hpp:12
constexpr auto view
Converts a rowset row to a structure.
Definition rowset.hpp:26
rowset to_rowset(std::ranges::input_range auto &&r)
Converts a range of structures to a rowset.
Definition rowset.hpp:42
auto end() const
Definition rowset.hpp:18
bool empty() const
Definition rowset.hpp:16
auto begin() const
Definition rowset.hpp:17
variant const & value() const
First cell; throws std::out_of_range when absent.
Definition rowset.hpp:21
std::vector< std::string > columns
Definition rowset.hpp:13
std::vector< std::vector< variant > > rows
Definition rowset.hpp:14
Definition variant.hpp:14