11 #ifndef PQXX_H_BINARYSTRING 12 #define PQXX_H_BINARYSTRING 14 #if !defined(PQXX_HEADER_PRE) 15 # error "Include libpqxx headers as <pqxx/header>, not <pqxx/header.hxx>." 20 #include <string_view> 22 #include "pqxx/result.hxx" 23 #include "pqxx/strconv.hxx" 28 template<>
struct string_traits<binarystring>;
62 using value_type = std::char_traits<char_type>::char_type;
70 [[deprecated(
"Use std::byte for binary data.")]]
binarystring(
78 [[deprecated(
"Use std::byte for binary data.")]]
explicit binarystring(
85 [[deprecated(
"Use std::byte for binary data.")]]
explicit binarystring(
89 [[deprecated(
"Use std::byte for binary data.")]]
binarystring(
90 void const *, std::size_t);
94 std::shared_ptr<value_type> ptr,
size_type size) :
95 m_buf{std::move(ptr)}, m_size{size}
102 [[nodiscard]]
bool empty() const noexcept {
return size() == 0; }
112 return *(data() + m_size - 1);
134 [[nodiscard]] PQXX_PURE
bool operator==(
binarystring const &)
const noexcept;
137 return not operator==(rhs);
143 const_reference at(size_type)
const;
152 [[nodiscard]]
char const *
get()
const noexcept
154 return reinterpret_cast<char const *
>(m_buf.get());
158 [[nodiscard]] std::string_view
view() const noexcept
160 return std::string_view(
get(), size());
169 [[nodiscard]] std::string str()
const;
172 [[nodiscard]] std::byte
const *
bytes()
const 174 return reinterpret_cast<std::byte
const *
>(
get());
178 [[nodiscard]] std::basic_string_view<std::byte>
bytes_view()
const 180 return std::basic_string_view<std::byte>{bytes(), size()};
184 std::shared_ptr<value_type> m_buf;
218 "Not enough buffer space to escape binary data."};
219 std::string_view
text{value.
view()};
221 return begin + budget;
227 std::shared_ptr<unsigned char> buf{
228 new unsigned char[size], [](
unsigned char const *x) {
delete[] x; }};
230 #include "pqxx/internal/ignore-deprecated-pre.hxx" 232 #include "pqxx/internal/ignore-deprecated-post.hxx" const_reverse_iterator rbegin() const
Definition: binarystring.hxx:115
Binary data corresponding to PostgreSQL's "BYTEA" binary-string type.
Definition: binarystring.hxx:58
void esc_bin(std::basic_string_view< std::byte > binary_data, char buffer[]) noexcept
Hex-escape binary data into a buffer.
Definition: util.cxx:126
const_pointer const_iterator
Definition: binarystring.hxx:67
std::size_t size_type
Definition: binarystring.hxx:63
value_type const * data() const noexcept
Unescaped field contents.
Definition: binarystring.hxx:127
size_type length() const noexcept
Size of converted string in bytes.
Definition: binarystring.hxx:101
std::reverse_iterator< const_iterator > const_reverse_iterator
Definition: binarystring.hxx:68
bool empty() const noexcept
Definition: binarystring.hxx:102
constexpr std::size_t size_unesc_bin(std::size_t escaped_bytes) noexcept
Compute binary size from the size of its escaped version.
Definition: util.hxx:422
zview generic_to_buf(char *begin, char *end, TYPE const &value)
Implement string_traits<TYPE>::to_buf by calling into_buf.
Definition: strconv.hxx:442
static char * into_buf(char *begin, char *end, binarystring const &value)
Definition: binarystring.hxx:213
const_iterator begin() const noexcept
Definition: binarystring.hxx:104
Traits describing a type's "null value," if any.
Definition: strconv.hxx:92
The home of all libpqxx classes, functions, templates, etc.
Definition: array.hxx:26
const_reference operator[](size_type i) const noexcept
Definition: binarystring.hxx:129
static std::size_t size_buffer(TYPE const &value) noexcept
Estimate how much buffer space is needed to represent value.
Traits class for use in string conversions.
Definition: strconv.hxx:154
Reference to a field in a result set.
Definition: field.hxx:34
std::char_traits< char_type >::char_type value_type
Definition: binarystring.hxx:62
const_reference front() const noexcept
Definition: binarystring.hxx:109
const_reference back() const noexcept
Definition: binarystring.hxx:110
std::basic_string_view< std::byte > binary_cast(TYPE const &data)
Cast binary data to a type that libpqxx will recognise as binary.
Definition: util.hxx:306
long difference_type
Definition: binarystring.hxx:64
Nullness traits describing a type which does not have a null value.
Definition: strconv.hxx:114
const_iterator cend() const noexcept
Definition: binarystring.hxx:107
Marker-type wrapper: zero-terminated std::string_view.
Definition: zview.hxx:37
std::basic_string_view< std::byte > bytes_view() const
Read data as a std::basic_string_view<std::byte>.
Definition: binarystring.hxx:178
void unesc_bin(std::string_view escaped_data, std::byte buffer[])
Reconstitute binary data from its escaped version.
Definition: util.cxx:158
static zview to_buf(char *begin, char *end, binarystring const &value)
Definition: binarystring.hxx:208
binarystring(std::shared_ptr< value_type > ptr, size_type size)
Efficiently wrap a buffer of binary data in a binarystring.
Definition: binarystring.hxx:93
std::byte const * bytes() const
Access data as a pointer to std::byte.
Definition: binarystring.hxx:172
size_type size() const noexcept
Size of converted string in bytes.
Definition: binarystring.hxx:99
constexpr bool cmp_less(LEFT lhs, RIGHT rhs) noexcept
Same as std::cmp_less, or a workaround where that's not available.
Definition: util.hxx:66
constexpr std::size_t size_esc_bin(std::size_t binary_bytes) noexcept
Compute buffer size needed to escape binary data for use as a BYTEA.
Definition: util.hxx:413
std::string_view view() const noexcept
Read contents as a std::string_view.
Definition: binarystring.hxx:158
Could not convert value to string: not enough buffer space.
Definition: except.hxx:194
const_reverse_iterator crend() const
Definition: binarystring.hxx:124
bool operator!=(binarystring const &rhs) const noexcept
Definition: binarystring.hxx:135
unsigned char char_type
Definition: binarystring.hxx:61
const_reverse_iterator rend() const
Definition: binarystring.hxx:120
const_reverse_iterator crbegin() const
Definition: binarystring.hxx:119
value_type const * const_pointer
Definition: binarystring.hxx:66
const_iterator end() const noexcept
Definition: binarystring.hxx:106
static binarystring from_string(std::string_view text)
Definition: binarystring.hxx:224
const_iterator cbegin() const noexcept
Definition: binarystring.hxx:105
static std::size_t size_buffer(binarystring const &value) noexcept
Definition: binarystring.hxx:203
value_type const & const_reference
Definition: binarystring.hxx:65