summaryrefslogtreecommitdiff
path: root/slicer/db/sqlUpdateSerializer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'slicer/db/sqlUpdateSerializer.cpp')
-rw-r--r--slicer/db/sqlUpdateSerializer.cpp25
1 files changed, 13 insertions, 12 deletions
diff --git a/slicer/db/sqlUpdateSerializer.cpp b/slicer/db/sqlUpdateSerializer.cpp
index 038f28e..152c923 100644
--- a/slicer/db/sqlUpdateSerializer.cpp
+++ b/slicer/db/sqlUpdateSerializer.cpp
@@ -21,7 +21,7 @@ namespace Slicer {
}
void
- SqlUpdateSerializer::Serialize(Slicer::ModelPartForRootPtr mp)
+ SqlUpdateSerializer::Serialize(ModelPartForRootParam mp)
{
switch (mp->GetType()) {
case Slicer::ModelPartType::Sequence:
@@ -40,26 +40,27 @@ namespace Slicer {
}
void
- SqlUpdateSerializer::SerializeObject(const Slicer::ModelPartPtr & mp) const
+ SqlUpdateSerializer::SerializeObject(ModelPartParam mp) const
{
auto ins = createUpdate(mp);
bindObjectAndExecute(mp, ins.get());
}
void
- SqlUpdateSerializer::SerializeSequence(const Slicer::ModelPartPtr & mp) const
+ SqlUpdateSerializer::SerializeSequence(ModelPartParam mp) const
{
- auto ins = createUpdate(mp->GetContainedModelPart());
- mp->OnEachChild([&ins](const std::string &, const ModelPartPtr & cmp, const HookCommon *) {
- bindObjectAndExecute(cmp, ins.get());
+ mp->OnContained([this, mp](auto && cmp) {
+ mp->OnEachChild([upd = createUpdate(cmp)](auto &&, auto && chmp, auto &&) {
+ bindObjectAndExecute(chmp, upd.get());
+ });
});
}
void
- SqlUpdateSerializer::bindObjectAndExecute(const Slicer::ModelPartPtr & mp, DB::ModifyCommand * upd)
+ SqlUpdateSerializer::bindObjectAndExecute(ModelPartParam mp, DB::ModifyCommand * upd)
{
unsigned int paramNo = 0;
- mp->OnEachChild([&upd, &paramNo](const std::string &, const ModelPartPtr & cmp, const HookCommon * h) {
+ mp->OnEachChild([&upd, &paramNo](auto &&, auto && cmp, auto && h) {
if (isValue(h)) {
if (!cmp->GetValue(SqlBinder(*upd, paramNo))) {
upd->bindNull(paramNo);
@@ -67,7 +68,7 @@ namespace Slicer {
paramNo++;
}
});
- mp->OnEachChild([&upd, &paramNo](const std::string &, const ModelPartPtr & cmp, const HookCommon * h) {
+ mp->OnEachChild([&upd, &paramNo](auto &&, auto && cmp, auto && h) {
if (isPKey(h)) {
cmp->GetValue(SqlBinder(*upd, paramNo++));
}
@@ -78,13 +79,13 @@ namespace Slicer {
}
DB::ModifyCommandPtr
- SqlUpdateSerializer::createUpdate(const Slicer::ModelPartPtr & mp) const
+ SqlUpdateSerializer::createUpdate(ModelPartParam mp) const
{
using namespace AdHoc::literals;
std::stringstream update;
"UPDATE %? SET "_fmt(update, tableName);
int fieldNo = 0;
- mp->OnEachChild([&update, &fieldNo](const std::string & name, const ModelPartPtr &, const HookCommon * h) {
+ mp->OnEachChild([&update, &fieldNo](auto && name, auto &&, auto && h) {
if (isValue(h)) {
if (fieldNo++) {
update << ", ";
@@ -94,7 +95,7 @@ namespace Slicer {
});
update << " WHERE ";
fieldNo = 0;
- mp->OnEachChild([&update, &fieldNo](const std::string & name, const ModelPartPtr &, const HookCommon * h) {
+ mp->OnEachChild([&update, &fieldNo](auto && name, auto &&, auto && h) {
if (isPKey(h)) {
if (fieldNo++) {
update << " AND ";