diff options
Diffstat (limited to 'slicer/db/sqlUpdateSerializer.cpp')
-rw-r--r-- | slicer/db/sqlUpdateSerializer.cpp | 25 |
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, ¶mNo](const std::string &, const ModelPartPtr & cmp, const HookCommon * h) { + mp->OnEachChild([&upd, ¶mNo](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, ¶mNo](const std::string &, const ModelPartPtr & cmp, const HookCommon * h) { + mp->OnEachChild([&upd, ¶mNo](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 "; |