aboutsummaryrefslogtreecommitdiff
path: root/3rdparty/sqlitecpp/source/SQLiteCpp/Transaction.h
diff options
context:
space:
mode:
authorrtk0c <[email protected]>2022-05-22 14:54:06 -0700
committerrtk0c <[email protected]>2022-05-22 14:54:06 -0700
commit55c4420b69fa172ac7b6b3523597b9a46a5d1bcd (patch)
tree407fbd2fd7911b8bfa8567502d7493708036be2f /3rdparty/sqlitecpp/source/SQLiteCpp/Transaction.h
parent195e30b1e39fa4dc535172ba248f0c18733dcb3c (diff)
Vendor SQLiteCpp completely for internal patching
Diffstat (limited to '3rdparty/sqlitecpp/source/SQLiteCpp/Transaction.h')
-rw-r--r--3rdparty/sqlitecpp/source/SQLiteCpp/Transaction.h95
1 files changed, 95 insertions, 0 deletions
diff --git a/3rdparty/sqlitecpp/source/SQLiteCpp/Transaction.h b/3rdparty/sqlitecpp/source/SQLiteCpp/Transaction.h
new file mode 100644
index 0000000..d7f26ca
--- /dev/null
+++ b/3rdparty/sqlitecpp/source/SQLiteCpp/Transaction.h
@@ -0,0 +1,95 @@
+/**
+ * @file Transaction.h
+ * @ingroup SQLiteCpp
+ * @brief A Transaction is way to group multiple SQL statements into an atomic secured operation.
+ *
+ * Copyright (c) 2012-2021 Sebastien Rombauts ([email protected])
+ *
+ * Distributed under the MIT License (MIT) (See accompanying file LICENSE.txt
+ * or copy at http://opensource.org/licenses/MIT)
+ */
+#pragma once
+
+#include <SQLiteCpp/Exception.h>
+
+
+namespace SQLite
+{
+
+
+// Forward declaration
+class Database;
+
+/**
+ * @brief Transaction behaviors when opening an SQLite transaction.
+ * Names correspond directly to the behavior.
+ */
+enum class TransactionBehavior {
+ DEFERRED,
+ IMMEDIATE,
+ EXCLUSIVE,
+};
+
+/**
+ * @brief RAII encapsulation of a SQLite Transaction.
+ *
+ * A Transaction is a way to group multiple SQL statements into an atomic secured operation;
+ * either it succeeds, with all the changes committed to the database file,
+ * or if it fails, all the changes are rolled back to the initial state.
+ *
+ * Resource Acquisition Is Initialization (RAII) means that the Transaction
+ * begins in the constructor and is rollbacked in the destructor, so that there is
+ * no need to worry about memory management or the validity of the underlying SQLite Connection.
+ *
+ * This method also offers big performances improvements compared to individually executed statements.
+ *
+ * Thread-safety: a Transaction object shall not be shared by multiple threads, because :
+ * 1) in the SQLite "Thread Safe" mode, "SQLite can be safely used by multiple threads
+ * provided that no single database connection is used simultaneously in two or more threads."
+ * 2) the SQLite "Serialized" mode is not supported by SQLiteC++,
+ * because of the way it shares the underling SQLite precompiled statement
+ * in a custom shared pointer (See the inner class "Statement::Ptr").
+ */
+class Transaction
+{
+public:
+ /**
+ * @brief Begins the SQLite transaction using the default transaction behavior.
+ *
+ * @param[in] aDatabase the SQLite Database Connection
+ *
+ * Exception is thrown in case of error, then the Transaction is NOT initiated.
+ */
+ explicit Transaction(Database& aDatabase);
+
+ /**
+ * @brief Begins the SQLite transaction with the specified behavior.
+ *
+ * @param[in] aDatabase the SQLite Database Connection
+ * @param[in] behavior the requested transaction behavior
+ *
+ * Exception is thrown in case of error, then the Transaction is NOT initiated.
+ */
+ explicit Transaction(Database& aDatabase, TransactionBehavior behavior);
+
+ // Transaction is non-copyable
+ Transaction(const Transaction&) = delete;
+ Transaction& operator=(const Transaction&) = delete;
+
+ /**
+ * @brief Safely rollback the transaction if it has not been committed.
+ */
+ ~Transaction();
+
+ /**
+ * @brief Commit the transaction.
+ */
+ void commit();
+
+private:
+ Database& mDatabase; ///< Reference to the SQLite Database Connection
+ bool mbCommited; ///< True when commit has been called
+};
+
+
+} // namespace SQLite