summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Goodliffe <dan@randomdan.homeip.net>2022-03-04 18:02:40 +0000
committerDan Goodliffe <dan@randomdan.homeip.net>2022-03-04 18:02:40 +0000
commitfe8d59232101842c06b87c801a6c393a550625d2 (patch)
treebff30162bb45d6c95d280514f1f43bbdea30696b
parentMake the database clients free to be used as variables, not just inheritted (diff)
downloadicetray-fe8d59232101842c06b87c801a6c393a550625d2.tar.bz2
icetray-fe8d59232101842c06b87c801a6c393a550625d2.tar.xz
icetray-fe8d59232101842c06b87c801a6c393a550625d2.zip
Add modify support to db client
-rw-r--r--icetray/icetray/abstractDatabaseClient.h18
-rw-r--r--icetray/unittests/Jamfile.jam2
-rw-r--r--icetray/unittests/testIceTray.cpp1
-rw-r--r--icetray/unittests/testIceTrayReplace.cpp5
-rw-r--r--icetray/unittests/testIceTrayService.ice1
-rw-r--r--icetray/unittests/testIceTrayServiceI.cpp7
-rw-r--r--icetray/unittests/testIceTrayServiceI.h1
-rw-r--r--icetray/unittests/testIceTrayServiceTestSqlUpdate.sql1
8 files changed, 36 insertions, 0 deletions
diff --git a/icetray/icetray/abstractDatabaseClient.h b/icetray/icetray/abstractDatabaseClient.h
index 047eaee..cc81251 100644
--- a/icetray/icetray/abstractDatabaseClient.h
+++ b/icetray/icetray/abstractDatabaseClient.h
@@ -7,6 +7,7 @@
#include <connectionPool.h>
#include <db/sqlSelectDeserializer.h> // IWYU pragma: keep
#include <memory>
+#include <modifycommand.h> // IWYU pragma: keep
#include <optional>
#include <resourcePool.impl.h>
#include <selectcommand.h> // IWYU pragma: keep
@@ -54,6 +55,23 @@ namespace IceTray {
return Slicer::DeserializeAny<Slicer::SqlSelectDeserializer, Domain>(s.get(), typeIdCol);
}
+ template<typename... Params>
+ inline auto
+ modify(const SqlSource & sql, const Params &... params)
+ {
+ auto c = db->get();
+ return modify(c.get(), sql, params...);
+ }
+
+ template<typename... Params>
+ inline auto
+ modify(DB::Connection * c, const SqlSource & sql, const Params &... params)
+ {
+ auto s = sql.modify(c);
+ bind(0, s.get(), params...);
+ return s->execute();
+ }
+
protected:
template<typename Param, typename... Params>
static void inline bind(unsigned int offset, DB::Command * cmd, const Param & p, const Params &... params)
diff --git a/icetray/unittests/Jamfile.jam b/icetray/unittests/Jamfile.jam
index f324bbd..8677793 100644
--- a/icetray/unittests/Jamfile.jam
+++ b/icetray/unittests/Jamfile.jam
@@ -53,6 +53,7 @@ run
testIceTrayService
testIceTrayServiceI.cpp
testIceTrayServiceTestSql.sql
+ testIceTrayServiceTestSqlUpdate.sql
subdir/some.sql
subdir/a/more.sql
: : :
@@ -77,6 +78,7 @@ run
testIceTrayService
testIceTrayServiceI.cpp
testIceTrayServiceTestSql.sql
+ testIceTrayServiceTestSqlUpdate.sql
subdir/some.sql
subdir/a/more.sql
: : :
diff --git a/icetray/unittests/testIceTray.cpp b/icetray/unittests/testIceTray.cpp
index 8277adb..b704864 100644
--- a/icetray/unittests/testIceTray.cpp
+++ b/icetray/unittests/testIceTray.cpp
@@ -39,6 +39,7 @@ BOOST_AUTO_TEST_CASE(services)
p->ice_ping();
p->method1();
p->method2(1, "test");
+ p->method3();
}
BOOST_AUTO_TEST_CASE(cube_services_proxy)
diff --git a/icetray/unittests/testIceTrayReplace.cpp b/icetray/unittests/testIceTrayReplace.cpp
index a56e89d..36b764b 100644
--- a/icetray/unittests/testIceTrayReplace.cpp
+++ b/icetray/unittests/testIceTrayReplace.cpp
@@ -23,6 +23,11 @@ namespace TestIceTray {
method2(Ice::Int, std::string, const Ice::Current &) override
{
}
+ Ice::Int
+ method3(const Ice::Current &) override
+ {
+ return 0;
+ }
};
}
diff --git a/icetray/unittests/testIceTrayService.ice b/icetray/unittests/testIceTrayService.ice
index fc0caf4..323967a 100644
--- a/icetray/unittests/testIceTrayService.ice
+++ b/icetray/unittests/testIceTrayService.ice
@@ -2,6 +2,7 @@ module TestIceTray {
interface TestIceTrayService {
void method1();
void method2(int id, string name);
+ int method3();
};
local interface TestCube {
diff --git a/icetray/unittests/testIceTrayServiceI.cpp b/icetray/unittests/testIceTrayServiceI.cpp
index 7e79359..fce0992 100644
--- a/icetray/unittests/testIceTrayServiceI.cpp
+++ b/icetray/unittests/testIceTrayServiceI.cpp
@@ -18,6 +18,7 @@
#include <subdir/a/more.sql.h>
#include <subdir/some.sql.h>
#include <testIceTrayServiceTestSql.sql.h>
+#include <testIceTrayServiceTestSqlUpdate.sql.h>
// IWYU pragma: no_include "plugins.impl.h"
// IWYU pragma: no_include "resourcePool.impl.h"
@@ -88,6 +89,12 @@ namespace TestIceTray {
== (fetchCache<int>(sql::testIceTrayServiceTestSql, 10, id, name)));
}
+ Ice::Int
+ TestIceTrayServiceI::method3(const Ice::Current &)
+ {
+ return static_cast<Ice::Int>(modify(sql::testIceTrayServiceTestSqlUpdate, 5));
+ }
+
void
TestCubeI::method1()
{
diff --git a/icetray/unittests/testIceTrayServiceI.h b/icetray/unittests/testIceTrayServiceI.h
index ee5db40..94b4f87 100644
--- a/icetray/unittests/testIceTrayServiceI.h
+++ b/icetray/unittests/testIceTrayServiceI.h
@@ -21,6 +21,7 @@ namespace TestIceTray {
void method1(const Ice::Current &) override;
void method2(Ice::Int id, std::string name, const Ice::Current &) override;
+ Ice::Int method3(const Ice::Current &) override;
private:
template<typename Type> void fetchTest(const Type & value);
diff --git a/icetray/unittests/testIceTrayServiceTestSqlUpdate.sql b/icetray/unittests/testIceTrayServiceTestSqlUpdate.sql
new file mode 100644
index 0000000..33e3862
--- /dev/null
+++ b/icetray/unittests/testIceTrayServiceTestSqlUpdate.sql
@@ -0,0 +1 @@
+UPDATE testTable SET name = 'update' WHERE id = ?