summaryrefslogtreecommitdiff
path: root/slicer/db/sqlSelectDeserializer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'slicer/db/sqlSelectDeserializer.cpp')
-rw-r--r--slicer/db/sqlSelectDeserializer.cpp59
1 files changed, 39 insertions, 20 deletions
diff --git a/slicer/db/sqlSelectDeserializer.cpp b/slicer/db/sqlSelectDeserializer.cpp
index 3abb03b..7836c63 100644
--- a/slicer/db/sqlSelectDeserializer.cpp
+++ b/slicer/db/sqlSelectDeserializer.cpp
@@ -88,28 +88,47 @@ namespace Slicer {
{
auto rmp = mp->GetAnonChild();
if (rmp) {
- if (typeIdColIdx) {
- std::string subclass;
- cmd[*typeIdColIdx] >> subclass;
- rmp = rmp->GetSubclassModelPart(subclass);
- }
- rmp->Create();
- for (auto col = 0u; col < columnCount; col += 1) {
- const DB::Column & c = cmd[col];
- if (!c.isNull()) {
- auto fmpr = rmp->GetAnonChildRef([&c](Slicer::HookCommonPtr h) {
- return boost::iequals(c.name, h->PartName());
- });
- if (fmpr) {
- SqlSourcePtr h = new SqlSource(c);
- auto fmp = fmpr->Child();
- fmp->Create();
- fmp->SetValue(h);
- fmp->Complete();
+ switch (rmp->GetType()) {
+ case Slicer::mpt_Complex:
+ {
+ if (typeIdColIdx) {
+ std::string subclass;
+ cmd[*typeIdColIdx] >> subclass;
+ rmp = rmp->GetSubclassModelPart(subclass);
+ }
+ rmp->Create();
+ for (auto col = 0u; col < columnCount; col += 1) {
+ const DB::Column & c = cmd[col];
+ if (!c.isNull()) {
+ auto fmpr = rmp->GetAnonChildRef([&c](Slicer::HookCommonPtr h) {
+ return boost::iequals(c.name, h->PartName());
+ });
+ if (fmpr) {
+ SqlSourcePtr h = new SqlSource(c);
+ auto fmp = fmpr->Child();
+ fmp->Create();
+ fmp->SetValue(h);
+ fmp->Complete();
+ }
+ }
+ }
+ rmp->Complete();
+ }
+ break;
+ case Slicer::mpt_Simple:
+ {
+ rmp->Create();
+ const DB::Column & c = cmd[0];
+ if (!c.isNull()) {
+ SqlSourcePtr h = new SqlSource(c);
+ rmp->SetValue(h);
+ }
+ rmp->Complete();
}
- }
+ break;
+ default:
+ throw UnsupportedModelType();
}
- rmp->Complete();
}
}
}