OZO 「お象」
Boost.Asio and libpq based asynchronous PostgreSQL unofficial header-only C++17 client library.
|
|
3 #include <ozo/core/options.h>
4 #include <ozo/detail/begin_statement_builder.h>
5 #include <ozo/transaction_status.h>
44 template <
typename Connection,
typename Options>
47 static_assert(ozo::Connection<Connection>,
"Connection should model Connection concept");
79 std::is_nothrow_move_constructible_v<Connection>
80 && std::is_nothrow_move_constructible_v<Options>)
106 template <
typename Key,
typename Value>
107 void update_statistics(
const Key& key, Value&& v) noexcept {
108 lowest_layer().update_statistics(key, std::forward<Value>(v));
110 decltype(
auto) statistics() const noexcept {
162 return std::move(x.impl_);
175 template <
typename WaitHandler>
177 lowest_layer().async_wait_write(std::forward<WaitHandler>(handler));
190 template <
typename WaitHandler>
192 lowest_layer().async_wait_read(std::forward<WaitHandler>(handler));
240 operator bool () const noexcept {
return !(is_null() ||
is_bad());}
273 bool is_null() const noexcept {
return ozo::is_null(impl_); }
280 template <
typename ...Ts>
281 struct is_connection<transaction<Ts...>> : std::true_type {};
285 template <
typename ...Ts>
290 struct initiate_async_start_transaction {
291 template <
typename Handler,
typename ...Args>
292 constexpr
void operator()(
Handler&& h, Args&& ...args)
const;
296 #ifdef OZO_DOCUMENTATION
330 template <
typename ConnectionProv
ider,
typename TimeConstra
int,
typename CompletionToken>
350 template <
typename Initiator,
typename Options = decltype(make_options())>
353 using base =
typename begin_op::base;
356 constexpr
explicit begin_op(Initiator initiator = {}, Options options = {}) : base(initiator), options_(options) {}
358 template <
typename T,
typename TimeConstra
int,
typename CompletionToken>
359 auto operator() (T&& provider, TimeConstraint t,
CompletionToken&& token)
const {
361 static_assert(ozo::TimeConstraint<TimeConstraint>,
"should model TimeConstraint concept");
362 using namespace ozo::literals;
363 return async_initiate<CompletionToken, handler_signature<transaction<connection_type<T>, Options>>>(
365 std::forward<T>(provider), options_, detail::begin_statement_builder::build(options_), t);
368 template <
typename T,
typename CompletionToken>
371 std::forward<T>(provider),
373 std::forward<CompletionToken>(token)
377 template <
typename OtherOptions>
378 constexpr
auto with_transaction_options(
const OtherOptions& options)
const {
382 template <
typename OtherInitiator>
383 constexpr
auto rebind_initiator(
const OtherInitiator& other)
const {
384 return begin_op<OtherInitiator, Options>{other, options_};
388 inline constexpr begin_op<detail::initiate_async_start_transaction>
begin;
393 struct initiate_async_end_transaction {
394 template <
typename Handler,
typename ...Args>
395 constexpr
void operator()(
Handler&& h, Args&& ...args)
const;
399 #ifdef OZO_DOCUMENTATION
424 template <
typename T,
typename Options,
typename TimeConstra
int,
typename CompletionToken>
446 template <
typename T,
typename Options,
typename TimeConstra
int,
typename CompletionToken>
448 static_assert(ozo::TimeConstraint<TimeConstraint>,
"should model TimeConstraint concept");
449 using namespace ozo::literals;
450 return async_initiate<CompletionToken, handler_signature<typename ozo::transaction<T, Options>::handle_type>>(
451 detail::initiate_async_end_transaction{}, token,
460 std::forward<CompletionToken>(token)
465 inline constexpr commit_op
commit;
469 #ifdef OZO_DOCUMENTATION
496 template <
typename T,
typename Options,
typename TimeConstra
int,
typename CompletionToken>
518 template <
typename T,
typename Options,
typename TimeConstra
int,
typename CompletionToken>
520 static_assert(ozo::TimeConstraint<TimeConstraint>,
"should model TimeConstraint concept");
521 using namespace ozo::literals;
522 return async_initiate<CompletionToken, handler_signature<typename ozo::transaction<T, Options>::handle_type>>(
523 detail::initiate_async_end_transaction{}, token,
532 std::forward<CompletionToken>(token)
537 inline constexpr rollback_op
rollback;
552 template<
typename... Ts>
568 template<
typename... Ts>
585 template<
typename... Ts>
592 #include <ozo/impl/transaction.h>
void async_wait_read(WaitHandler &&handler)
Definition: transaction.h:191
decltype(auto) begin(ConnectionProvider &&provider, CompletionToken &&token)
Start new transaction.
constexpr decltype(auto) unwrap(T &&v) noexcept(noexcept(unwrap_impl< std::decay_t< T >>::apply(std::forward< T >(v))))
Unwraps argument underlying value or forwards the argument.
Definition: unwrap.h:57
const error_context_type & get_error_context() const noexcept
Definition: transaction.h:121
boost::system::error_code error_code
Error code representation of the library.
Definition: error.h:38
unwrap_type< handle_type > lowest_layer_type
Lowest level Connection model type - fully unwrapped type.
Definition: transaction.h:50
std::decay_t< Options > options_type
The type of options specified for the transaction.
Definition: transaction.h:55
Transaction Connection model.
Definition: transaction.h:45
decltype(auto) commit(ConnectionProvider &&provider, CompletionToken &&token)
Commits a transaction.
typename lowest_layer_type::oid_map_type oid_map_type
Oid map of types that are used with the connection.
Definition: transaction.h:52
executor_type get_executor() const noexcept
Definition: transaction.h:143
friend handle_type release_connection(transaction &&x) noexcept
Definition: transaction.h:161
bool is_bad() const noexcept
Definition: transaction.h:229
decltype(auto) rollback(ConnectionProvider &&provider, CompletionToken &&token)
Commits a transaction.
typename lowest_layer_type::error_context_type error_context_type
Additional error context which could provide context depended information for errors.
Definition: transaction.h:53
constexpr auto get_transaction_mode(const transaction< Ts... > &transaction)
Retrieve's a transactions transaction mode.
Definition: transaction.h:569
lowest_layer_type & lowest_layer() noexcept
Definition: transaction.h:263
error_code close() noexcept
Definition: transaction.h:207
Connection provider concept
constexpr auto get_transaction_isolation_level(const transaction< Ts... > &transaction)
Retrieve's a transactions isolation level.
Definition: transaction.h:553
constexpr auto none
None object.
Definition: none.h:27
constexpr auto get_transaction_deferrability(const transaction< Ts... > &transaction)
Retrieve's a transactions deferrability.
Definition: transaction.h:586
transaction(Connection &&connection, Options options) noexcept(std::is_nothrow_move_constructible_v< Connection > &&std::is_nothrow_move_constructible_v< Options >)
Definition: transaction.h:78
native_handle_type native_handle() const noexcept
Definition: transaction.h:93
constexpr static option< class isolation_level_tag > isolation_level
Transaction isolation level, see ozo::isolation_level.
Definition: transaction_options.h:66
Default model for Connection concept.
Definition: connection.h:93
constexpr const options_type & options() const noexcept
Definition: transaction.h:256
constexpr auto get_operation_initiator(const Operation &op)
Get asynchronous operation initiator.
Definition: asio.h:166
Completion token concept.
void cancel() noexcept
Definition: transaction.h:217
constexpr static option< class mode_tag > mode
Transaction mode, see ozo::transaction_mode.
Definition: transaction_options.h:67
typename get_unwrapped_type< T >::type unwrap_type
Shortcut for ozo::get_unwrapped_type.
Definition: unwrap.h:107
typename lowest_layer_type::native_handle_type native_handle_type
Native connection handle type.
Definition: transaction.h:51
typename lowest_layer_type::executor_type executor_type
The type of the executor associated with the object.
Definition: transaction.h:54
void async_wait_write(WaitHandler &&handler)
Definition: transaction.h:176
const oid_map_type & oid_map() const noexcept
Definition: transaction.h:104
constexpr decltype(auto) get_option(Map &&map, ozo::option< Key > op)
Get the option object from Hana.Map.
Definition: options.h:52
const lowest_layer_type & lowest_layer() const noexcept
Definition: transaction.h:270
constexpr decltype(auto) is_null(const T &v) noexcept(noexcept(is_null_impl< T >::apply(v)))
Indicates if value is in null state.
Definition: nullable.h:85
Database connection concept.
void set_error_context(error_context_type v=error_context_type{})
Definition: transaction.h:132
Base class for async operations.
Definition: asio.h:236
constexpr static option< class deferrability_tag > deferrability
Transaction deferrability, see ozo::deferrable_mode.
Definition: transaction_options.h:68
bool is_open() const noexcept
Definition: transaction.h:249