OZO 「お象」
Boost.Asio and libpq based asynchronous PostgreSQL unofficial header-only C++17 client library.
connection_info.h
1 #pragma once
2 
3 #include <ozo/connector.h>
4 #include <ozo/connection.h>
5 #include <ozo/impl/async_connect.h>
6 #include <ozo/ext/std/shared_ptr.h>
7 
8 #include <chrono>
9 
10 namespace ozo {
11 
25 template <
26  typename OidMap = empty_oid_map,
27  typename Statistics = no_statistics>
29  std::string conn_str;
30  Statistics statistics;
31 
32 public:
33  using connection_type = std::shared_ptr<ozo::connection<OidMap, Statistics>>;
34 
43  connection_info(std::string conn_str, const OidMap& = OidMap{}, Statistics statistics = Statistics{})
44  : conn_str(std::move(conn_str)), statistics(std::move(statistics)) {
45  }
46 
59  template <typename TimeConstraint, typename Handler>
60  void operator ()(io_context& io, TimeConstraint t, Handler&& handler) const {
61  static_assert(ozo::TimeConstraint<TimeConstraint>, "should model TimeConstraint concept");
62  auto allocator = asio::get_associated_allocator(handler);
63  impl::async_connect(conn_str, t, std::allocate_shared<ozo::connection<OidMap, Statistics>>(allocator, io, statistics),
64  std::forward<Handler>(handler));
65  }
66 
67  auto operator [](io_context& io) const & {
68  return connection_provider(*this, io);
69  }
70 
71  auto operator [](io_context& io) && {
72  return connection_provider(std::move(*this), io);
73  }
74 };
75 
76 template<typename OidMap, typename Statistics>
77 connection_info(std::string, const OidMap&, Statistics statistics) -> connection_info<OidMap, Statistics>;
78 
79 //[[DEPRECATED]] for backward compatibility only
80 template <typename ...Ts>
81 [[deprecated]] auto make_connector(const connection_info<Ts...>& source, io_context& io, time_traits::duration timeout) {
82  return bind_get_connection_timeout(source[io], timeout);
83 }
84 
85 //[[DEPRECATED]] for backward compatibility only
86 template <typename ...Ts>
87 [[deprecated]] auto make_connector(connection_info<Ts...>& source, io_context& io, time_traits::duration timeout) {
88  return bind_get_connection_timeout(source[io], timeout);
89 }
90 
91 //[[DEPRECATED]] for backward compatibility only
92 template <typename ...Ts>
93 [[deprecated]] auto make_connector(connection_info<Ts...>&& source, io_context& io, time_traits::duration timeout) {
94  return bind_get_connection_timeout(source[io], timeout);
95 }
96 
97 //[[DEPRECATED]] for backward compatibility only
98 template <typename ...Ts>
99 [[deprecated]] auto make_connector(const connection_info<Ts...>& source, io_context& io) { return source[io];}
100 
101 //[[DEPRECATED]] for backward compatibility only
102 template <typename ...Ts>
103 [[deprecated]] auto make_connector(connection_info<Ts...>& source, io_context& io) { return source[io];}
104 
105 //[[DEPRECATED]] for backward compatibility only
106 template <typename ...Ts>
107 [[deprecated]] auto make_connector(connection_info<Ts...>&& source, io_context& io) { return source[io];}
108 
119 template <typename OidMap = empty_oid_map, typename Statistics = no_statistics>
120 inline auto make_connection_info(std::string conn_str, const OidMap& oid_map = OidMap{},
121  Statistics statistics = Statistics{}) {
122  return connection_info{std::move(conn_str), oid_map, statistics};
123 }
124 
125 static_assert(ConnectionProvider<decltype(std::declval<connection_info<>>()[std::declval<io_context&>()])>, "is not a ConnectionProvider");
126 
127 } // namespace ozo
ozo::connection_provider
Default model for the ConnectionProvider concept.
Definition: connector.h:66
ozo::OidMap
constexpr auto OidMap
Map of C++ types to corresponding PostgreSQL types OIDs.
Definition: type_traits.h:534
ConnectionProvider
Connection provider concept
ozo::connection
Default model for Connection concept.
Definition: connection.h:93
ozo::connection_info
Connection source to a single host.
Definition: connection_info.h:28
ozo::time_traits::duration
std::chrono::steady_clock::duration duration
Time duration type of the library.
Definition: time_traits.h:13
ozo::connection_info::operator()
void operator()(io_context &io, TimeConstraint t, Handler &&handler) const
Provides connection is binded to the given io_context
Definition: connection_info.h:60
ozo::empty_oid_map
std::decay_t< decltype(register_types<>())> empty_oid_map
Type alias for empty #OidMap.
Definition: type_traits.h:570
Handler
Handler concept.
ozo::connection_info::make_connection_info
auto make_connection_info(std::string conn_str, const OidMap &oid_map=OidMap{}, Statistics statistics=Statistics{})
Constructs ozo::connection_info ConnectionSource.
Definition: connection_info.h:120
ozo::connection_info::connection_info
connection_info(std::string conn_str, const OidMap &=OidMap{}, Statistics statistics=Statistics{})
Construct a new connection information object.
Definition: connection_info.h:43
ozo::connection_info::connection_type
std::shared_ptr< ozo::connection< OidMap, Statistics > > connection_type
Type of connection which is produced by the source.
Definition: connection_info.h:33