summaryrefslogtreecommitdiff
path: root/3rdparty/sqlitecpp/source/SQLiteCpp/ExecuteMany.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/ExecuteMany.h
parent195e30b1e39fa4dc535172ba248f0c18733dcb3c (diff)
Vendor SQLiteCpp completely for internal patching
Diffstat (limited to '3rdparty/sqlitecpp/source/SQLiteCpp/ExecuteMany.h')
-rw-r--r--3rdparty/sqlitecpp/source/SQLiteCpp/ExecuteMany.h90
1 files changed, 90 insertions, 0 deletions
diff --git a/3rdparty/sqlitecpp/source/SQLiteCpp/ExecuteMany.h b/3rdparty/sqlitecpp/source/SQLiteCpp/ExecuteMany.h
new file mode 100644
index 0000000..4e7dac9
--- /dev/null
+++ b/3rdparty/sqlitecpp/source/SQLiteCpp/ExecuteMany.h
@@ -0,0 +1,90 @@
+/**
+ * @file ExecuteMany.h
+ * @ingroup SQLiteCpp
+ * @brief Convenience function to execute a Statement with multiple Parameter sets
+ *
+ * Copyright (c) 2019 Maximilian Bachmann ([email protected])
+ * Copyright (c) 2019-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
+
+#if (__cplusplus >= 201402L) || ( defined(_MSC_VER) && (_MSC_VER >= 1900) ) // c++14: Visual Studio 2015
+
+#include <SQLiteCpp/Statement.h>
+#include <SQLiteCpp/VariadicBind.h>
+
+/// @cond
+#include <tuple>
+#include <utility>
+#include <initializer_list>
+
+namespace SQLite
+{
+/// @endcond
+
+/**
+ * \brief Convenience function to execute a Statement with multiple Parameter sets once for each parameter set given.
+ *
+ *
+ * This feature requires a c++14 capable compiler.
+ *
+ * \code{.cpp}
+ * execute_many(db, "INSERT INTO test VALUES (?, ?)",
+ * 1,
+ * std::make_tuple(2),
+ * std::make_tuple(3, "three")
+ * );
+ * \endcode
+ * @param aDatabase Database to use
+ * @param apQuery Query to use with all parameter sets
+ * @param aArg first tuple with parameters
+ * @param aParams the following tuples with parameters
+ */
+template <typename Arg, typename... Types>
+void execute_many(Database& aDatabase, const char* apQuery, Arg&& aArg, Types&&... aParams)
+{
+ SQLite::Statement query(aDatabase, apQuery);
+ bind_exec(query, std::forward<Arg>(aArg));
+ (void)std::initializer_list<int>
+ {
+ ((void)reset_bind_exec(query, std::forward<Types>(aParams)), 0)...
+ };
+}
+
+/**
+ * \brief Convenience function to reset a statement and call bind_exec to
+ * bind new values to the statement and execute it
+ *
+ * This feature requires a c++14 capable compiler.
+ *
+ * @param apQuery Query to use
+ * @param aTuple Tuple to bind
+ */
+template <typename TupleT>
+void reset_bind_exec(Statement& apQuery, TupleT&& aTuple)
+{
+ apQuery.reset();
+ bind_exec(apQuery, std::forward<TupleT>(aTuple));
+}
+
+/**
+ * \brief Convenience function to bind values a the statement and execute it
+ *
+ * This feature requires a c++14 capable compiler.
+ *
+ * @param apQuery Query to use
+ * @param aTuple Tuple to bind
+ */
+template <typename TupleT>
+void bind_exec(Statement& apQuery, TupleT&& aTuple)
+{
+ SQLite::bind(apQuery, std::forward<TupleT>(aTuple));
+ while (apQuery.executeStep()) {}
+}
+
+} // namespace SQLite
+
+#endif // c++14