summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Goodliffe <dan@randomdan.homeip.net>2019-02-24 21:29:46 +0000
committerDan Goodliffe <dan@randomdan.homeip.net>2019-02-24 21:29:46 +0000
commit88e8c184f1af52a6ce99010836f0646b0a73e645 (patch)
treea81edeaf25ad5518c07d5b91be6a8f5d3e4e709a
parentSwitch to string_view (diff)
downloadicetray-88e8c184f1af52a6ce99010836f0646b0a73e645.tar.bz2
icetray-88e8c184f1af52a6ce99010836f0646b0a73e645.tar.xz
icetray-88e8c184f1af52a6ce99010836f0646b0a73e645.zip
Switch messy macro binding out
Instead use traits based binder in DB::Command and specialize as required.
-rw-r--r--icetray/icetray/abstractDatabaseClient.cpp32
-rw-r--r--icetray/icetray/abstractDatabaseClient.h31
-rw-r--r--icetray/unittests/testIceTrayServiceI.cpp6
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 <Ice/BuiltinSequences.h>
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 <db/sqlSelectDeserializer.h>
#include <slicer/slicer.h>
#include <visibility.h>
+#include <Ice/BuiltinSequences.h>
namespace IceTray {
class DLL_PUBLIC AbstractDatabaseClient {
@@ -48,36 +49,22 @@ namespace IceTray {
}
template<typename Param, typename ... Params>
- 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<typename Param>
- static void bind1(int offset, DB::Command * cmd, const Param & p);
-
-#define BIND1OPTIONAL(T) \
- template<typename Param> \
- static void bind1(int offset, DB::Command * cmd, const T<Param> & 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);
}
}