11 #ifndef PQXX_H_PREPARED_STATEMENT
12 #define PQXX_H_PREPARED_STATEMENT
14 #include "pqxx/compiler-public.hxx"
15 #include "pqxx/internal/compiler-internal-pre.hxx"
17 #include "pqxx/internal/statement_parameters.hxx"
18 #include "pqxx/types.hxx"
43 [[deprecated(
"Use params instead.")]] constexpr
inline auto
46 return pqxx::internal::dynamic_params(begin, end);
70 using IT =
typename C::const_iterator;
71 return pqxx::internal::dynamic_params<IT>{container};
93 template<
typename C,
typename ACCESSOR>
94 [[nodiscard]] constexpr
inline auto
97 using IT = decltype(std::begin(container));
98 return pqxx::internal::dynamic_params<IT, ACCESSOR>{container, accessor};
127 template<
typename... Args> constexpr
params(Args &&...args)
129 reserve(
sizeof...(args));
130 append_pack(std::forward<Args>(args)...);
133 void reserve(std::size_t);
134 auto size()
const {
return std::size(m_params); }
150 void append(std::string
const &);
153 void append(std::string &&);
159 void append(std::basic_string_view<std::byte>);
166 void append(std::basic_string<std::byte>
const &);
169 void append(std::basic_string<std::byte> &&);
178 template<
typename IT,
typename ACCESSOR>
179 void append(pqxx::internal::dynamic_params<IT, ACCESSOR>
const &value)
181 for (
auto ¶m : value) append(value.access(param));
184 void append(
params const &value);
186 void append(
params &&value);
189 template<
typename TYPE>
void append(TYPE
const &value)
195 m_params.emplace_back();
199 m_params.emplace_back();
203 m_params.emplace_back(entry{
to_string(value)});
211 for (
auto &value : range) append(value);
223 pqxx::internal::c_params make_c_params()
const;
227 template<
typename Arg,
typename... More>
228 void append_pack(Arg &&arg, More &&...args)
230 this->append(std::forward<Arg>(arg));
232 append_pack(std::forward<More>(args)...);
236 void append_pack() {}
240 using entry = std::variant<
241 std::nullptr_t, zview, std::string, std::basic_string_view<std::byte>,
242 std::basic_string<std::byte>>;
243 std::vector<entry> m_params;
245 static constexpr std::string_view s_overflow{
246 "Statement parameter length overflow."sv};
250 #include "pqxx/internal/compiler-internal-post.hxx"
The home of all libpqxx classes, functions, templates, etc.
Definition: array.hxx:26
void ignore_unused(T &&...)
Suppress compiler warning about an unused item.
Definition: util.hxx:71
std::remove_cv_t< std::remove_reference_t< TYPE > > strip_t
Remove any constness, volatile, and reference-ness from a type.
Definition: util.hxx:147
std::string to_string(field const &value)
Convert a field to a string.
Definition: result.cxx:503
bool is_null(TYPE const &value) noexcept
Is value null?
Definition: strconv.hxx:353
auto ssize(T const &c)
Transitional: std::ssize(), or custom implementation if not available.
Definition: util.hxx:312
Dedicated namespace for helper types related to prepared statements.
Definition: prepared_statement.hxx:23
constexpr auto make_dynamic_params(IT begin, IT end)
Pass a number of statement parameters only known at runtime.
Definition: prepared_statement.hxx:44
Binary data corresponding to PostgreSQL's "BYTEA" binary-string type.
Definition: binarystring.hxx:57
Build a parameter list for a parameterised or prepared statement.
Definition: prepared_statement.hxx:122
void append_multi(RANGE &range)
Append all elements of range as parameters.
Definition: prepared_statement.hxx:208
void append(TYPE const &value)
Append a non-null parameter, converting it to its string representation.
Definition: prepared_statement.hxx:189
auto size() const
Definition: prepared_statement.hxx:134
auto ssize() const
Definition: prepared_statement.hxx:135
constexpr params(Args &&...args)
Create a params pre-populated with args. Feel free to add more later.
Definition: prepared_statement.hxx:127
void append(pqxx::internal::dynamic_params< IT, ACCESSOR > const &value)
Append all parameters from value.
Definition: prepared_statement.hxx:179
Traits describing a type's "null value," if any.
Definition: strconv.hxx:87
Marker-type wrapper: zero-terminated std::string_view.
Definition: zview.hxx:38