13 #ifndef PQXX_H_CONNECTION 14 #define PQXX_H_CONNECTION 16 #include "pqxx/compiler-public.hxx" 17 #include "pqxx/internal/compiler-internal-pre.hxx" 25 #include <string_view> 28 #if __has_include(<ranges>) 32 #include "pqxx/errorhandler.hxx" 33 #include "pqxx/except.hxx" 34 #include "pqxx/prepared_statement.hxx" 35 #include "pqxx/strconv.hxx" 36 #include "pqxx/util.hxx" 37 #include "pqxx/zview.hxx" 71 #if defined(PQXX_HAVE_CONCEPTS) 74 concept ZKey_ZValues = std::ranges::input_range<T> and requires()
76 {std::tuple_size<typename std::ranges::iterator_t<T>::value_type>::value};
78 and std::tuple_size_v<typename std::ranges::iterator_t<T>::value_type> == 2 and
82 std::get<0>(*std::cbegin(t))
86 std::get<1>(*std::cbegin(t))
90 #endif // PQXX_HAVE_CONCEPTS 96 class connection_dbtransaction;
97 class connection_errorhandler;
98 class connection_largeobject;
99 class connection_notification_receiver;
100 class connection_pipeline;
101 class connection_sql_cursor;
102 class connection_stream_from;
103 class connection_stream_to;
104 class connection_transaction;
105 class const_connection_largeobject;
112 [[nodiscard]] std::string PQXX_LIBEXPORT
116 [[nodiscard]]
inline std::string
191 connection(connection &&rhs);
193 #if defined(PQXX_HAVE_CONCEPTS) 210 template<
internal::ZKey_ZValues MAPPING>
211 inline connection(MAPPING
const ¶ms);
212 #endif // PQXX_HAVE_CONCEPTS 220 catch (std::exception
const &)
238 [[nodiscard]]
bool PQXX_PURE is_open() const noexcept;
241 void process_notice(
char const[]) noexcept;
243 void process_notice(
std::
string const &msg) noexcept
245 process_notice(
zview{msg});
251 void process_notice(
zview) noexcept;
254 void trace(std::FILE *) noexcept;
266 [[nodiscard]]
char const *dbname()
const;
270 [[nodiscard]]
char const *username()
const;
273 [[nodiscard]]
char const *hostname()
const;
276 [[nodiscard]]
char const *port()
const;
279 [[nodiscard]]
int PQXX_PURE backendpid() const noexcept;
297 [[nodiscard]]
int PQXX_PURE sock() const noexcept;
303 [[nodiscard]]
int PQXX_PURE protocol_version() const noexcept;
318 [[nodiscard]]
int PQXX_PURE server_version() const noexcept;
342 [[nodiscard]]
std::
string get_client_encoding() const;
349 void set_client_encoding(
std::
string const &encoding)
351 set_client_encoding(encoding.c_str());
358 void set_client_encoding(
char const encoding[]);
361 [[nodiscard]]
int PQXX_PRIVATE encoding_id()
const;
381 void set_variable(std::string_view var, std::string_view value);
387 std::string get_variable(std::string_view);
420 int await_notification();
431 int await_notification(std::time_t seconds,
long microseconds);
462 char const user[],
char const password[],
char const *algorithm =
nullptr);
463 [[nodiscard]] std::string
519 void prepare(
char const name[],
char const definition[]);
521 void prepare(std::string
const &name, std::string
const &definition)
523 prepare(name.c_str(), definition.c_str());
539 void prepare(
char const definition[]);
543 void unprepare(std::string_view name);
553 [[nodiscard]] std::string adorn_name(std::string_view);
565 [[nodiscard]] std::string
esc(
char const text[], std::size_t maxlen)
const 567 return esc(std::string_view(text, maxlen));
571 [[nodiscard]] std::string
esc(
char const text[])
const 573 return esc(std::string_view(text));
580 [[nodiscard]] std::string esc(std::string_view text)
const;
585 [[nodiscard]] std::string
586 esc_raw(
unsigned char const bin[], std::size_t len)
const;
589 [[nodiscard]] std::string esc_raw(std::basic_string_view<std::byte>)
const;
595 [[nodiscard]] std::string
unesc_raw(std::string
const &text)
const 597 return unesc_raw(text.c_str());
606 return unesc_raw(text.
c_str());
613 [[nodiscard]] std::string unesc_raw(
char const text[])
const;
618 [[nodiscard]] std::string
619 quote_raw(
unsigned char const bin[], std::size_t len)
const;
622 [[nodiscard]] std::string quote_raw(std::basic_string_view<std::byte>)
const;
625 [[nodiscard]] std::string quote_name(std::string_view identifier)
const;
631 template<
typename T>[[nodiscard]]
inline std::string quote(T
const &t)
const;
634 [[nodiscard]] std::string quote(
binarystring const &)
const;
636 [[nodiscard]] std::string
637 quote(std::basic_string_view<std::byte> bytes)
const;
663 [[nodiscard]] std::string
664 esc_like(std::string_view text,
char escape_char =
'\\')
const;
699 [[nodiscard]] std::vector<errorhandler *> get_errorhandlers()
const;
708 [[nodiscard]] std::string connection_string()
const;
718 void init(
char const options[]);
720 void init(
char const *params[],
char const *values[]);
721 void complete_init();
723 void wait_read()
const;
724 void wait_read(std::time_t seconds,
long microseconds)
const;
727 internal::pq::PGresult *pgr, std::shared_ptr<std::string>
const &query);
729 void PQXX_PRIVATE set_up_state();
731 int PQXX_PRIVATE PQXX_PURE status() const noexcept;
738 std::
size_t esc_to_buf(
std::string_view text,
char *buf) const;
740 friend class internal::gate::const_connection_largeobject;
741 char const *PQXX_PURE err_msg() const noexcept;
743 void PQXX_PRIVATE process_notice_raw(
char const msg[]) noexcept;
745 result exec_prepared(
std::string_view statement, internal::params const &);
748 void check_movable() const;
750 void check_overwritable() const;
752 friend class internal::gate::connection_errorhandler;
753 void PQXX_PRIVATE register_errorhandler(
errorhandler *);
754 void PQXX_PRIVATE unregister_errorhandler(
errorhandler *) noexcept;
756 friend class internal::gate::connection_transaction;
757 result PQXX_PRIVATE exec(
std::string_view);
762 friend class internal::gate::connection_stream_from;
763 std::pair<
std::unique_ptr<
char,
std::function<
void(
char *)>>,
std::
size_t>
764 PQXX_PRIVATE read_copy_line();
766 friend class internal::gate::connection_stream_to;
767 void PQXX_PRIVATE write_copy_line(
std::string_view);
768 void PQXX_PRIVATE end_copy_write();
770 friend class internal::gate::connection_largeobject;
771 internal::pq::PGconn *raw_connection()
const {
return m_conn; }
773 friend class internal::gate::connection_notification_receiver;
777 friend class internal::gate::connection_pipeline;
778 void PQXX_PRIVATE start_exec(
char const query[]);
779 bool PQXX_PRIVATE consume_input() noexcept;
780 bool PQXX_PRIVATE is_busy() const noexcept;
781 internal::pq::PGresult *get_result();
783 friend class internal::gate::connection_dbtransaction;
784 friend class internal::gate::connection_sql_cursor;
786 result exec_params(
std::string_view query, internal::params const &args);
789 internal::pq::PGconn *m_conn =
nullptr;
796 using receiver_list =
799 receiver_list m_receivers;
826 std::string buf{
'\''};
827 buf.resize(2 + 2 * std::size(text) + 1);
828 auto const content_bytes{esc_to_buf(text, buf.data() + 1)};
829 auto const closing_quote{1 + content_bytes};
830 buf[closing_quote] =
'\'';
831 auto const end{closing_quote + 1};
838 #if defined(PQXX_HAVE_CONCEPTS) 839 template<
internal::ZKey_ZValues MAPPING>
844 std::vector<char const *> keys, values;
845 if constexpr (std::ranges::sized_range<MAPPING>)
847 auto const size{std::ranges::size(params) + 1};
849 values.reserve(size);
851 for (
auto const &[key, value] : params)
856 keys.push_back(
nullptr);
857 values.push_back(
nullptr);
858 init(keys.data(), values.data());
860 #endif // PQXX_HAVE_CONCEPTS 866 PQXX_LIBEXPORT
void wait_read(internal::pq::PGconn
const *);
868 internal::pq::PGconn
const *, std::time_t seconds,
long microseconds);
869 PQXX_LIBEXPORT
void wait_write(internal::pq::PGconn
const *);
872 #include "pqxx/internal/compiler-internal-post.hxx" Marker-type wrapper: zero-terminated std::string_view.
Definition: zview.hxx:36
Definition: notification.hxx:55
Interface definition (and common code) for "transaction" classes.
Definition: transaction_base.hxx:67
Definition: connection.hxx:94
void prepare(std::string const &name, std::string const &definition)
Definition: connection.hxx:521
void prepare(zview name, zview definition)
Definition: connection.hxx:526
Connection to a database.
Definition: connection.hxx:164
Binary data corresponding to PostgreSQL's "BYTEA" binary-string type.
Definition: binarystring.hxx:56
void wait_write(internal::pq::PGconn const *)
Definition: connection.cxx:972
constexpr char const * as_c_string(char const str[]) noexcept
Get a raw C string pointer.
Definition: zview.hxx:92
std::string unesc_raw(std::string const &text) const
Unescape binary data, e.g. from a table field or notification payload.
Definition: connection.hxx:595
std::string encrypt_password(zview user, zview password, zview algorithm)
Definition: connection.hxx:464
std::string unesc_raw(zview text) const
Unescape binary data, e.g. from a table field or notification payload.
Definition: connection.hxx:604
std::string to_string(field const &value)
Convert a field to a string.
Definition: result.cxx:498
Traits describing a type's "null value," if any.
Definition: strconv.hxx:86
std::string esc(char const text[], std::size_t maxlen) const
Escape string for use as SQL string literal on this connection.
Definition: connection.hxx:565
void prepare(zview definition)
Definition: connection.hxx:540
void check_version()
Definition: util.hxx:144
Private namespace for libpqxx's internal use; do not access.
Definition: composite.hxx:70
bool is_null(TYPE const &value) noexcept
Is value null?
Definition: strconv.hxx:310
std::string esc(char const text[]) const
Escape string for use as SQL string literal on this connection.
Definition: connection.hxx:571
Base class for error-handler callbacks.
Definition: errorhandler.hxx:52
connection()
Definition: connection.hxx:167
error_verbosity
Error verbosity levels.
Definition: connection.hxx:124
The home of all libpqxx classes, functions, templates, etc.
Definition: array.hxx:25
void wait_read(internal::pq::PGconn const *)
Definition: connection.cxx:953
~connection()
Definition: connection.hxx:214
std::string encrypt_password(char const user[], char const password[])
Encrypt a password.
Definition: connection.cxx:93
connection(zview options)
Definition: connection.hxx:180
connection(char const options[])
Definition: connection.hxx:174
constexpr char const * c_str() const noexcept
Either a null pointer, or a zero-terminated text buffer.
Definition: zview.hxx:68
connection(std::string const &options)
Definition: connection.hxx:169
Result set containing data returned by a query or command.
Definition: result.hxx:70