19 #ifndef PQXX_H_CONNECTION_BASE
20 #define PQXX_H_CONNECTION_BASE
22 #include "pqxx/compiler-public.hxx"
23 #include "pqxx/compiler-internal-pre.hxx"
30 #include "pqxx/errorhandler"
31 #include "pqxx/except"
32 #include "pqxx/prepared_statement"
33 #include "pqxx/strconv"
49 class connectionpolicy;
50 class notification_receiver;
52 class transaction_base;
64 void add(
int n) PQXX_NOEXCEPT { m_counter += n; }
65 void clear() PQXX_NOEXCEPT { m_counter = 0; }
66 int get()
const PQXX_NOEXCEPT {
return m_counter; }
93 const std::string &user,
94 const std::string &password);
101 class connection_dbtransaction;
102 class connection_errorhandler;
103 class connection_largeobject;
104 class connection_notification_receiver;
105 class connection_parameterized_invocation;
106 class connection_pipeline;
107 class connection_prepare_invocation;
108 class connection_reactivation_avoidance_exemption;
109 class connection_sql_cursor;
110 class connection_transaction;
153 void disconnect() PQXX_NOEXCEPT;
160 bool PQXX_PURE is_open()
const PQXX_NOEXCEPT;
242 { m_inhibit_reactivation=inhibit; }
250 void simulate_failure();
254 void process_notice(
const char[]) PQXX_NOEXCEPT;
256 void process_notice(const std::
string &) PQXX_NOEXCEPT;
259 void trace(std::FILE *) PQXX_NOEXCEPT;
273 const
char *dbname();
279 const
char *username();
285 const
char *hostname();
303 int PQXX_PURE backendpid() const PQXX_NOEXCEPT;
320 int PQXX_PURE sock() const PQXX_NOEXCEPT;
410 {
return m_caps.test(c); }
421 int PQXX_PURE protocol_version() const PQXX_NOEXCEPT;
436 int PQXX_PURE server_version() const PQXX_NOEXCEPT;
446 void set_client_encoding(const std::
string &Encoding)
447 { set_variable(
"CLIENT_ENCODING", Encoding); }
466 void set_variable(
const std::string &Var,
467 const std::string &Value);
477 std::string get_variable(
const std::string &);
508 int await_notification();
517 int await_notification(
long seconds,
long microseconds);
591 void prepare(
const std::string &name,
const std::string &definition);
600 void prepare(
const std::string &definition);
603 void unprepare(
const std::string &name);
616 void prepare_now(
const std::string &name);
656 template<
typename TRANSACTOR>
657 void perform(
const TRANSACTOR &T,
int Attempts);
663 template<
typename TRANSACTOR>
674 std::string adorn_name(
const std::string &);
744 std::string esc(
const char str[]);
748 std::string esc(
const char str[],
size_t maxlen);
751 std::string esc(
const std::string &str);
754 std::string esc_raw(
const unsigned char str[],
size_t len);
761 {
return unesc_raw(text.c_str()); }
767 std::string unesc_raw(
const char *text);
770 std::string quote_raw(
const unsigned char str[],
size_t len);
773 std::string quote_name(
const std::string &identifier);
781 return "'" + this->esc(
to_string(t)) +
"'";
808 void set_verbosity(error_verbosity verbosity) PQXX_NOEXCEPT;
825 std::vector<errorhandler *> get_errorhandlers()
const;
831 void close() PQXX_NOEXCEPT;
832 void wait_read() const;
833 void wait_read(
long seconds,
long microseconds) const;
834 void wait_write() const;
838 result make_result(internal::pq::PGresult *rhs, const std::
string &query);
840 void PQXX_PRIVATE clearcaps() PQXX_NOEXCEPT;
841 void PQXX_PRIVATE SetupState();
842 void PQXX_PRIVATE check_result(const
result &);
844 void PQXX_PRIVATE InternalSetTrace() PQXX_NOEXCEPT;
845 int PQXX_PRIVATE PQXX_PURE Status() const PQXX_NOEXCEPT;
846 const
char * PQXX_PURE ErrMsg() const PQXX_NOEXCEPT;
847 void PQXX_PRIVATE Reset();
848 void PQXX_PRIVATE RestoreVars();
849 std::
string PQXX_PRIVATE RawGetVar(const std::
string &);
850 void PQXX_PRIVATE process_notice_raw(const
char msg[]) PQXX_NOEXCEPT;
852 void read_capabilities();
854 prepare::internal::prepared_def &find_prepared(const std::
string &);
856 prepare::internal::prepared_def ®ister_prepared(const std::
string &);
858 friend class internal::gate::connection_prepare_invocation;
859 result prepared_exec(const std::
string &,
864 bool prepared_exists(const std::
string &) const;
867 internal::pq::PGconn *m_Conn;
882 receiver_list m_receivers;
885 std::map<std::
string, std::
string> m_Vars;
887 typedef std::map<std::
string, prepare::internal::prepared_def> PSMap;
896 internal::reactivation_avoidance_counter m_reactivation_avoidance;
905 bool m_inhibit_reactivation;
908 std::bitset<cap_end> m_caps;
913 friend class internal::gate::connection_errorhandler;
914 void PQXX_PRIVATE register_errorhandler(
errorhandler *);
915 void PQXX_PRIVATE unregister_errorhandler(errorhandler *) PQXX_NOEXCEPT;
917 friend class internal::gate::connection_transaction;
918 result PQXX_PRIVATE Exec(const
char[],
int Retries);
920 void PQXX_PRIVATE UnregisterTransaction(transaction_base *) PQXX_NOEXCEPT;
921 bool PQXX_PRIVATE ReadCopyLine(std::
string &);
922 void PQXX_PRIVATE WriteCopyLine(const std::
string &);
923 void PQXX_PRIVATE EndCopyWrite();
924 void PQXX_PRIVATE RawSetVar(const std::
string &, const std::
string &);
925 void PQXX_PRIVATE AddVariables(const std::map<std::
string, std::
string> &);
927 friend class internal::gate::connection_largeobject;
928 internal::pq::PGconn *RawConnection()
const {
return m_Conn; }
930 friend class internal::gate::connection_notification_receiver;
934 friend class internal::gate::connection_pipeline;
935 void PQXX_PRIVATE start_exec(const std::
string &);
936 bool PQXX_PRIVATE consume_input() PQXX_NOEXCEPT;
937 bool PQXX_PRIVATE is_busy() const PQXX_NOEXCEPT;
938 int PQXX_PRIVATE encoding_code();
939 internal::pq::PGresult *get_result();
941 friend class internal::gate::connection_dbtransaction;
943 friend class internal::gate::connection_sql_cursor;
944 void add_reactivation_avoidance_count(
int);
946 friend class internal::gate::connection_reactivation_avoidance_exemption;
948 friend class internal::gate::connection_parameterized_invocation;
949 result parameterized_exec(
950 const std::
string &query,
951 const
char *const params[],
952 const
int paramlengths[],
953 const
int binaries[],
981 void wait_read(
const internal::pq::PGconn *);
982 void wait_read(
const internal::pq::PGconn *,
long seconds,
long microseconds);
983 void wait_write(
const internal::pq::PGconn *);
989 #include "pqxx/compiler-internal-post.hxx"
connection_base abstract base class; represents a connection to a database.
Definition: connection_base.hxx:149
std::string encrypt_password(const std::string &user, const std::string &password)
Encrypt password for given user.
Definition: connection_base.cxx:116
void perform(const TRANSACTOR &T)
Perform the transaction defined by a transactor-based object.
Definition: connection_base.hxx:664
Definition: connection_base.hxx:345
std::string unesc_raw(const std::string &text)
Unescape binary data, e.g. from a table field or notification payload.
Definition: connection_base.hxx:760
Definition: connection_base.hxx:349
capability
Session capabilities.
Definition: connection_base.hxx:332
Definition: connection_base.hxx:341
Definition: connection_base.hxx:377
Definition: connection_base.hxx:353
Definition: connection_base.hxx:59
error_verbosity
Error verbosity levels.
Definition: connection_base.hxx:791
void inhibit_reactivation(bool inhibit)
Disallow (or permit) connection recovery.
Definition: connection_base.hxx:241
Definition: connection_base.hxx:369
error_verbosity get_verbosity() const PQXX_NOEXCEPT
Retrieve current error verbosity.
Definition: connection_base.hxx:810
void add(int n) PQXX_NOEXCEPT
Definition: connection_base.hxx:64
Definition: notification.hxx:59
Definition: connection_base.hxx:365
Definition: connection_base.hxx:373
Cursor with SQL positioning semantics.
Definition: cursor.hxx:183
Definition: binarystring.hxx:59
Base class for error-handler callbacks.
Definition: errorhandler.hxx:57
Definition: connectionpolicy.hxx:39
Definition: connection_base.hxx:337
Definition: connection_base.hxx:381
Definition: connection_base.hxx:357
reactivation_avoidance_counter()
Definition: connection_base.hxx:62
Traits class for use in string conversions.
Definition: strconv.hxx:46
bool supports(capability c) const PQXX_NOEXCEPT
Does this connection seem to support the given capability?
Definition: connection_base.hxx:409
Definition: connection_base.hxx:361
void close_connection() PQXX_NOEXCEPT
Definition: connection_base.hxx:972
Scoped exemption to reactivation avoidance.
Definition: connection_base.hxx:966
std::string quote(const T &t)
Represent object as SQL string, including quoting & escaping.
Definition: connection_base.hxx:778
Result set containing data returned by a query or command.
Definition: result.hxx:78
Definition: transaction_base.hxx:133
Definition: connection_base.hxx:385
void clear() PQXX_NOEXCEPT
Definition: connection_base.hxx:65
std::string to_string(const field &Obj)
Convert a field to a string.
Definition: result.hxx:464