14#if !defined(PQXX_HEADER_PRE)
15# error "Include libpqxx headers as <pqxx/header>, not <pqxx/header.hxx>."
20#include "pqxx/internal/concat.hxx"
21#include "pqxx/internal/statement_parameters.hxx"
22#include "pqxx/types.hxx"
53 reserve(
sizeof...(
args));
54 append_pack(std::forward<Args>(
args)...);
64 void reserve(std::size_t
n) &;
92 void append(std::string
const &) &;
95 void append(std::string &&) &;
107 void append(
bytes const &) &;
109#if defined(PQXX_HAVE_CONCEPTS)
114 template<binary DATA>
void append(
DATA const &data) &
116 append(
bytes_view{std::data(data), std::size(data)});
121 void append(
bytes &&) &;
127 void append(binarystring
const &value) &;
130 template<
typename IT,
typename ACCESSOR>
131 void append(pqxx::internal::dynamic_params<IT, ACCESSOR>
const &value) &
133 for (
auto &
param : value) append(value.access(
param));
136 void append(
params const &value) &;
138 void append(
params &&value) &;
148 m_params.emplace_back();
152 m_params.emplace_back();
156 m_params.emplace_back(entry{
to_string(value)});
163#if defined(PQXX_HAVE_CONCEPTS)
164 if constexpr (std::ranges::sized_range<RANGE>)
165 reserve(std::size(*
this) + std::size(
range));
167 for (
auto &value :
range) append(value);
180 pqxx::internal::c_params make_c_params()
const;
184 template<
typename Arg,
typename...
More>
187 this->append(std::forward<Arg>(
arg));
189 append_pack(std::forward<More>(
args)...);
193 constexpr void append_pack()
noexcept {}
199 std::variant<std::nullptr_t, zview, std::string, bytes_view, bytes>;
200 std::vector<entry> m_params;
202 static constexpr std::string_view s_overflow{
203 "Statement parameter length overflow."sv};
223 (std::numeric_limits<COUNTER>::max)()};
237 return zview{std::data(m_buf), m_len};
246 std::string
get()
const {
return std::string(std::data(m_buf), m_len); }
253 "Too many parameters in one statement: limit is ",
max_params,
".")};
255 if (m_current % 10 == 0)
260 char *
const data{std::data(m_buf)};
262 data + 1, data + std::size(m_buf), m_current)};
292 std::array<char, std::numeric_limits<COUNTER>::digits10 + 3> m_buf;
319[[deprecated(
"Use the params class instead.")]]
constexpr inline auto
322 return pqxx::internal::dynamic_params(begin, end);
344[[deprecated(
"Use the params class instead.")]]
constexpr inline auto
347 using IT =
typename C::const_iterator;
348#include "pqxx/internal/ignore-deprecated-pre.hxx"
349 return pqxx::internal::dynamic_params<IT>{
container};
350#include "pqxx/internal/ignore-deprecated-post.hxx"
372template<
typename C,
typename ACCESSOR>
373[[deprecated(
"Use the params class instead.")]]
constexpr inline auto
377#include "pqxx/internal/ignore-deprecated-pre.hxx"
379#include "pqxx/internal/ignore-deprecated-post.hxx"
The home of all libpqxx classes, functions, templates, etc.
Definition array.hxx:33
constexpr char array_separator
Element separator between SQL array elements of this type.
Definition strconv.hxx:557
std::conditional< has_generic_bytes_char_traits, std::basic_string_view< std::byte >, std::basic_string_view< std::byte, byte_char_traits > >::type bytes_view
Type alias for a view of bytes.
Definition util.hxx:381
std::conditional< has_generic_bytes_char_traits, std::basic_string< std::byte >, std::basic_string< std::byte, byte_char_traits > >::type bytes
Type alias for a container containing bytes.
Definition util.hxx:371
constexpr void ignore_unused(T &&...) noexcept
Suppress compiler warning about an unused item.
Definition util.hxx:142
constexpr bool is_null(TYPE const &value) noexcept
Is value null?
Definition strconv.hxx:513
std::string to_string(field const &value)
Convert a field to a string.
Definition result.cxx:566
auto ssize(T const &c)
Transitional: std::ssize(), or custom implementation if not available.
Definition util.hxx:553
Definition params.hxx:299
constexpr auto make_dynamic_params(IT begin, IT end)
Pass a number of statement parameters only known at runtime.
Definition params.hxx:320
Something is out of range, similar to std::out_of_range.
Definition except.hxx:326
Build a parameter list for a parameterised or prepared statement.
Definition params.hxx:46
auto size() const noexcept
Get the number of parameters currently in this params.
Definition params.hxx:68
void append_multi(RANGE const &range) &
Append all elements of range as parameters.
Definition params.hxx:161
void append(TYPE const &value) &
Definition params.hxx:142
auto ssize() const
Get the number of parameters (signed).
Definition params.hxx:77
void append(pqxx::internal::dynamic_params< IT, ACCESSOR > const &value) &
Append all parameters from value.
Definition params.hxx:131
constexpr params(Args &&...args)
Pre-populate a params with args. Feel free to add more later.
Definition params.hxx:51
Generate parameter placeholders for use in an SQL statement.
Definition params.hxx:219
static constexpr unsigned int max_params
Maximum number of parameters we support.
Definition params.hxx:222
COUNTER count() const noexcept
Return the current placeholder number. The initial placeholder is 1.
Definition params.hxx:275
std::string get() const
Read the current placeholder text, as a std::string.
Definition params.hxx:246
placeholders()
Definition params.hxx:225
constexpr zview view() const &noexcept
Read an ephemeral version of the current placeholder text.
Definition params.hxx:235
void next() &
Move on to the next parameter.
Definition params.hxx:249
A C++ equivalent to PostgreSQL's range types.
Definition range.hxx:240
Traits describing a type's "null value," if any.
Definition strconv.hxx:91
static char * into_buf(char *begin, char *end, TYPE const &value)
Write value's string representation into buffer at begin.
Marker-type wrapper: zero-terminated std::string_view.
Definition zview.hxx:38