1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- /** Definition of the pqxx::nontransaction class.
- *
- * pqxx::nontransaction provides nontransactional database access
- *
- * DO NOT INCLUDE THIS FILE DIRECTLY; include pqxx/nontransaction instead.
- *
- * Copyright (c) 2000-2019, Jeroen T. Vermeulen.
- *
- * See COPYING for copyright license. If you did not receive a file called
- * COPYING with this source code, please notify the distributor of this mistake,
- * or contact the author.
- */
- #ifndef PQXX_H_NONTRANSACTION
- #define PQXX_H_NONTRANSACTION
- #include "pqxx/compiler-public.hxx"
- #include "pqxx/compiler-internal-pre.hxx"
- #include "pqxx/connection_base.hxx"
- #include "pqxx/result.hxx"
- #include "pqxx/transaction_base.hxx"
- // Methods tested in eg. test module test01 are marked with "//[t01]".
- namespace pqxx
- {
- /// Simple "transaction" class offering no transactional integrity.
- /**
- * @ingroup transaction
- *
- * nontransaction, like transaction or any other transaction_base-derived class,
- * provides access to a database through a connection. Unlike its siblings,
- * however, nontransaction does not maintain any kind of transactional
- * integrity. This may be useful eg. for read-only access to the database that
- * does not require a consistent, atomic view on its data; or for operations
- * that are not allowed within a backend transaction, such as creating tables.
- *
- * For queries that update the database, however, a real transaction is likely
- * to be faster unless the transaction consists of only a single record update.
- *
- * Also, you can keep a nontransaction open for as long as you like. Actual
- * back-end transactions are limited in lifespan, and will sometimes fail just
- * because they took too long to execute or were left idle for too long. This
- * will not happen with a nontransaction (although the connection may still time
- * out, e.g. when the network is unavailable for a very long time).
- *
- * Any query executed in a nontransaction is committed immediately, and neither
- * commit() nor abort() has any effect.
- *
- * Database features that require a backend transaction, such as cursors or
- * large objects, will not work in a nontransaction.
- */
- class PQXX_LIBEXPORT nontransaction : public transaction_base
- {
- public:
- /// Constructor.
- /** Create a "dummy" transaction.
- * @param C Connection that this "transaction" will operate on.
- * @param Name Optional name for the transaction, beginning with a letter
- * and containing only letters and digits.
- */
- explicit nontransaction( //[t14]
- connection_base &C,
- const std::string &Name=std::string{}) :
- namedclass{"nontransaction", Name}, transaction_base{C} { Begin(); }
- virtual ~nontransaction(); //[t14]
- private:
- virtual void do_begin() override {} //[t14]
- virtual result do_exec(const char C[]) override; //[t14]
- virtual void do_commit() override {} //[t14]
- virtual void do_abort() override {} //[t14]
- };
- } // namespace pqxx
- #include "pqxx/compiler-internal-post.hxx"
- #endif
|