userver: userver/storages/postgres/detail/connection_ptr.hpp Source File
⚠️ This is the documentation for an old userver version. Click here to switch to the latest version.
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
connection_ptr.hpp
1#pragma once
2
3#include <cstddef>
4#include <memory>
5#include <optional>
6
7#include <userver/dynamic_config/source.hpp>
8
9USERVER_NAMESPACE_BEGIN
10
11namespace storages::postgres::detail {
12
13class Connection;
14class ConnectionPool;
15class StatementTimingsStorage;
16
17/// Pointer-like class that controls lifetime of a parent pool by keeping smart
18/// pointer to it.
19class ConnectionPtr {
20 public:
21 explicit ConnectionPtr(std::unique_ptr<Connection>&& conn);
22 ConnectionPtr(Connection* conn, std::shared_ptr<ConnectionPool>&& pool);
23 ~ConnectionPtr();
24
25 ConnectionPtr(ConnectionPtr&&) noexcept;
26 ConnectionPtr& operator=(ConnectionPtr&&) noexcept;
27
28 explicit operator bool() const noexcept;
29 Connection* get() const noexcept;
30
31 Connection& operator*() const;
32 Connection* operator->() const noexcept;
33
34 const StatementTimingsStorage* GetStatementTimingsStorage() const;
35 std::optional<dynamic_config::Source> GetConfigSource() const;
36
37 private:
38 void Reset(std::unique_ptr<Connection> conn,
39 std::shared_ptr<ConnectionPool> pool);
40 void Release();
41
42 std::shared_ptr<ConnectionPool> pool_;
43 std::unique_ptr<Connection> conn_;
44};
45
46} // namespace storages::postgres::detail
47
48USERVER_NAMESPACE_END