diff options
Diffstat (limited to 'src/ingestor.cpp')
| -rw-r--r-- | src/ingestor.cpp | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/ingestor.cpp b/src/ingestor.cpp index 971cc29..3e36d85 100644 --- a/src/ingestor.cpp +++ b/src/ingestor.cpp @@ -9,6 +9,7 @@ #include <ranges> #include <scn/scan.h> #include <selectcommand.h> +#include <selectcommandUtil.impl.h> #include <syslog.h> #include <utility> #include <zlib.h> @@ -102,6 +103,21 @@ namespace WebStat { } throw DB::NoRowsAffected {}; } + + template<typename... Fields, typename... Binds> + requires(sizeof...(Fields) > 1) + std::tuple<Fields...> + insert(auto && dbconn, const std::string & sql, const DB::CommandOptionsPtr & opts, Binds &&... binds) + { + DB::SelectCommandPtr ins = dbconn->select(sql, opts); + bindMany(ins, 0, std::forward<Binds>(binds)...); + for (auto row : ins->template as<Fields...>()) { + return [&row]<std::unsigned_integral T, T... N>(std::integer_sequence<T, N...>) { + return std::make_tuple(row.template get<N>()...); + }(std::make_integer_sequence<unsigned int, sizeof...(Fields)> {}); + } + throw DB::NoRowsAffected {}; + } } Ingestor * Ingestor::currentIngestor = nullptr; |
