11#ifndef PQXX_H_SEPARATED_LIST
12#define PQXX_H_SEPARATED_LIST
14#if !defined(PQXX_HEADER_PRE)
15# error "Include libpqxx headers as <pqxx/header>, not <pqxx/header.hxx>."
21#include "pqxx/strconv.hxx"
44template<
typename ITER,
typename ACCESS>
53 return to_string(access(begin));
56 using elt_type =
strip_t<
decltype(access(begin))>;
61 budget += traits::size_buffer(access(
cnt));
63 static_cast<std::size_t
>(std::distance(begin, end)) * std::size(
sep);
68 char *
const data{
result.data()};
72 for (++begin; begin != end; ++begin)
77 result.resize(
static_cast<std::size_t
>(
here - data));
83template<
typename ITER>
93template<
typename CONTAINER>
101 ->
typename std::enable_if<
102 (
not std::is_void<
decltype(std::begin(
c))>::value
and
103 not std::is_void<
decltype(std::end(
c))>::value),
113 typename std::enable_if<
114 (
INDEX == std::tuple_size<TUPLE>::value - 1),
int>
::type = 0>
116 std::string_view ,
TUPLE const &
t,
ACCESS const &access)
118 return to_string(access(&std::get<INDEX>(
t)));
123 typename std::enable_if<
128 std::string
out{to_string(access(&std::get<INDEX>(
t)))};
136 typename std::enable_if<
Result set containing data returned by a query or command.
Definition result.hxx:92
The home of all libpqxx classes, functions, templates, etc.
Definition array.cxx:27
std::string separated_list(std::string_view sep, ITER begin, ITER end, ACCESS access)
Represent sequence of values as a string, joined by a given separator.
Definition separated_list.hxx:46
constexpr char array_separator
Element separator between SQL array elements of this type.
Definition strconv.hxx:559
std::remove_cv_t< std::remove_reference_t< TYPE > > strip_t
Remove any constness, volatile, and reference-ness from a type.
Definition types.hxx:80
Traits class for use in string conversions.
Definition strconv.hxx:154