From e7cd1ed2b4b13076073538d72d2338e978dda743 Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Sat, 30 Apr 2016 00:41:36 +0100 Subject: Tidy up and provide improved variable/SQL binding --- icetray/icetray/abstractDatabaseClient.cpp | 39 +++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/icetray/icetray/abstractDatabaseClient.cpp b/icetray/icetray/abstractDatabaseClient.cpp index e5e3026..e18045b 100644 --- a/icetray/icetray/abstractDatabaseClient.cpp +++ b/icetray/icetray/abstractDatabaseClient.cpp @@ -1,4 +1,6 @@ #include "abstractDatabaseClient.h" +#include "Ice/Config.h" +#include "IceUtil/Optional.h" namespace IceTray { AbstractDatabaseClient::AbstractDatabaseClient(DatabasePoolPtr d) : @@ -6,19 +8,32 @@ namespace IceTray { { } - template<> - void - AbstractDatabaseClient::bind1(int o, DB::Command * cmd, const std::string & p) - { - cmd->bindParamS(o, p); - } - - template<> - void - AbstractDatabaseClient::bind1(int o, DB::Command * cmd, const int & p) - { - cmd->bindParamI(o, p); +#define PARAMBINDER(T, bindFunc) \ + template<> \ + void \ + AbstractDatabaseClient::bind1(int o, DB::Command * cmd, const T & p) \ + { \ + cmd->bindFunc(o, p); \ + } \ + template<> \ + void \ + AbstractDatabaseClient::bind1(int o, DB::Command * cmd, const IceUtil::Optional & p) \ + { \ + if (p) { \ + cmd->bindFunc(o, *p); \ + } \ + else { \ + cmd->bindNull(o); \ + } \ } + PARAMBINDER(std::string, bindParamS); + PARAMBINDER(Ice::Byte, bindParamI); + PARAMBINDER(Ice::Short, bindParamI); + PARAMBINDER(Ice::Int, bindParamI); + PARAMBINDER(Ice::Long, bindParamI); + PARAMBINDER(Ice::Float, bindParamF); + PARAMBINDER(Ice::Double, bindParamF); + PARAMBINDER(bool, bindParamB); void AbstractDatabaseClient::bind(int, DB::Command *) -- cgit v1.2.3