diff options
| author | Dan Goodliffe <dan@randomdan.homeip.net> | 2019-02-24 21:29:46 +0000 | 
|---|---|---|
| committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2019-02-24 21:29:46 +0000 | 
| commit | 88e8c184f1af52a6ce99010836f0646b0a73e645 (patch) | |
| tree | a81edeaf25ad5518c07d5b91be6a8f5d3e4e709a | |
| parent | Switch to string_view (diff) | |
| download | icetray-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.cpp | 32 | ||||
| -rw-r--r-- | icetray/icetray/abstractDatabaseClient.h | 31 | ||||
| -rw-r--r-- | 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 <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);  	}  }  | 
