From 88e8c184f1af52a6ce99010836f0646b0a73e645 Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Sun, 24 Feb 2019 21:29:46 +0000 Subject: Switch messy macro binding out Instead use traits based binder in DB::Command and specialize as required. --- icetray/icetray/abstractDatabaseClient.cpp | 32 ++++-------------------------- icetray/icetray/abstractDatabaseClient.h | 31 +++++++++-------------------- icetray/unittests/testIceTrayServiceI.cpp | 6 +++--- 3 files changed, 16 insertions(+), 53 deletions(-) diff --git a/icetray/icetray/abstractDatabaseClient.cpp b/icetray/icetray/abstractDatabaseClient.cpp index 4c9ea32..3e16ba7 100644 --- a/icetray/icetray/abstractDatabaseClient.cpp +++ b/icetray/icetray/abstractDatabaseClient.cpp @@ -1,43 +1,19 @@ #include "abstractDatabaseClient.h" #include "Ice/Config.h" #include "IceUtil/Optional.h" -#include namespace IceTray { AbstractDatabaseClient::AbstractDatabaseClient(const DB::ConnectionPoolPtr & d) : db(d) { } +} -#define PARAMBINDER(T, bindFunc) \ - template<> \ - void \ - AbstractDatabaseClient::bind1(int o, DB::Command * cmd, const T & p) \ - { \ - cmd->bindFunc(o, p); \ - } - PARAMBINDER(Glib::ustring, bindParamS); - PARAMBINDER(std::string_view, bindParamS); - PARAMBINDER(std::string, bindParamS); - PARAMBINDER(Ice::Byte, bindParamI); - PARAMBINDER(Ice::Short, bindParamI); - PARAMBINDER(Ice::Int, bindParamI); - PARAMBINDER(Ice::Long, bindParamI); - PARAMBINDER(unsigned long, bindParamI); - PARAMBINDER(Ice::Float, bindParamF); - PARAMBINDER(Ice::Double, bindParamF); - PARAMBINDER(bool, bindParamB); - PARAMBINDER(Ice::ByteSeq, bindParamBLOB); +namespace DB { template<> - void - AbstractDatabaseClient::bind1(int o, DB::Command * cmd, const std::nullptr_t &) \ - { - cmd->bindNull(o); - } - - void - AbstractDatabaseClient::bind(int, DB::Command *) + void Command::bindParam(unsigned int offset, const Ice::ByteSeq & p) { + this->bindParamBLOB(offset, p); } } diff --git a/icetray/icetray/abstractDatabaseClient.h b/icetray/icetray/abstractDatabaseClient.h index c719902..81eb4bc 100644 --- a/icetray/icetray/abstractDatabaseClient.h +++ b/icetray/icetray/abstractDatabaseClient.h @@ -6,6 +6,7 @@ #include #include #include +#include namespace IceTray { class DLL_PUBLIC AbstractDatabaseClient { @@ -48,36 +49,22 @@ namespace IceTray { } template - static void inline bind(int offset, DB::Command * cmd, const Param & p, const Params & ... params) + static void inline bind(unsigned int offset, DB::Command * cmd, const Param & p, const Params & ... params) { - bind1(offset, cmd, p); + cmd->bindParam(offset, p); bind(offset + 1, cmd, params...); } - static void bind(int offset, DB::Command * cmd); - - template - static void bind1(int offset, DB::Command * cmd, const Param & p); - -#define BIND1OPTIONAL(T) \ - template \ - static void bind1(int offset, DB::Command * cmd, const T & p) \ - { \ - if (p) { \ - bind1(offset, cmd, *p); \ - } \ - else { \ - cmd->bindNull(offset); \ - } \ - } - - BIND1OPTIONAL(Ice::optional); - BIND1OPTIONAL(std::optional); -#undef BIND1OPTIONAL + static void inline bind(int, DB::Command *) { } const DB::ConnectionPoolPtr db; }; } +namespace DB { + template<> + void Command::bindParam(unsigned int offset, const Ice::ByteSeq & p); +} + #endif diff --git a/icetray/unittests/testIceTrayServiceI.cpp b/icetray/unittests/testIceTrayServiceI.cpp index 1baa781..c4b8331 100644 --- a/icetray/unittests/testIceTrayServiceI.cpp +++ b/icetray/unittests/testIceTrayServiceI.cpp @@ -11,12 +11,12 @@ class Foo { }; -namespace IceTray { +namespace DB { template<> void - AbstractDatabaseClient::bind1(int o, DB::Command * cmd, const Foo &) + Command::bindParam(unsigned int o, const Foo &) { - cmd->bindNull(o); + bindNull(o); } } -- cgit v1.2.3