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 if constexpr (
requires {
read(*it, ret); })
32 boost::pfr::for_each_field(ret, [&](
auto& v) {
read(*it++, v); });
33 check(it == std::ranges::end(r),
"out of fields");
41 boost::pfr::names_as_array<std::ranges::range_value_t<
decltype(r)>>() |
42 std::ranges::to<decltype(rowset::columns)>()};
43 for (
auto&& item : r) {
44 auto& row = ret.rows.emplace_back();
45 auto vis = [&](
auto& v) {
write(row.emplace_back(), v); };
46 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:38
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