/** * @file VariadicBind.h * @ingroup SQLiteCpp * @brief Convenience function for Statement::bind(...) * * Copyright (c) 2016 Paul Dreik (github@pauldreik.se) * Copyright (c) 2016-2023 Sebastien Rombauts (sebastien.rombauts@gmail.com) * Copyright (c) 2019 Maximilian Bachmann (contact@maxbachmann.de) * * Distributed under the MIT License (MIT) (See accompanying file LICENSE.txt * or copy at http://opensource.org/licenses/MIT) */ #pragma once #include #if (__cplusplus >= 201402L) || ( defined(_MSC_VER) && (_MSC_VER >= 1900) ) // c++14: Visual Studio 2015 #include #endif // c++14 /// @cond #include #include namespace SQLite { /// @endcond /** * \brief Convenience function for calling Statement::bind(...) once for each argument given. * * This takes care of incrementing the index between each calls to bind. * * This feature requires a c++11 capable compiler. * * \code{.cpp} * SQLite::Statement stm("SELECT * FROM MyTable WHERE colA>? && colB=? && colC void bind(SQLite::Statement& query, const Args& ... args) { int pos = 0; (void)std::initializer_list{ ((void)query.bind(++pos, std::forward(args)), 0)... }; } #if (__cplusplus >= 201402L) || ( defined(_MSC_VER) && (_MSC_VER >= 1900) ) // c++14: Visual Studio 2015 /** * \brief Convenience function for calling Statement::bind(...) once for each parameter of a tuple, * by forwarding them to the variadic template * * This feature requires a c++14 capable compiler. * * \code{.cpp} * SQLite::Statement stm("SELECT * FROM MyTable WHERE colA>? && colB=? && colC void bind(SQLite::Statement& query, const std::tuple &tuple) { bind(query, tuple, std::index_sequence_for()); } /** * \brief Convenience function for calling Statement::bind(...) once for each parameter of a tuple, * by forwarding them to the variadic template. This function is just needed to convert the tuples * to parameter packs * * This feature requires a c++14 capable compiler. * * @param query statement * @param tuple tuple with values to bind */ template void bind(SQLite::Statement& query, const std::tuple &tuple, std::index_sequence) { bind(query, std::get(tuple)...); } #endif // c++14 } // namespace SQLite