Index: src/libchcore/TSubTaskArray.cpp =================================================================== diff -u -N -r081055369d6b332ef1651877756657973b1b2d9c -rfc67a825635691930b3ac00dc95b16e59f3d2fae --- src/libchcore/TSubTaskArray.cpp (.../TSubTaskArray.cpp) (revision 081055369d6b332ef1651877756657973b1b2d9c) +++ src/libchcore/TSubTaskArray.cpp (.../TSubTaskArray.cpp) (revision fc67a825635691930b3ac00dc95b16e59f3d2fae) @@ -181,6 +181,8 @@ /////////////////////////////////////////////////////////////////////// { ISerializerContainerPtr spContainer = spSerializer->GetContainer(_T("subtasks_info")); + InitSubtasksInfoColumns(spContainer); + ISerializerRowDataPtr spRow; if(bAdded) @@ -195,6 +197,9 @@ /////////////////////////////////////////////////////////////////////// { ISerializerContainerPtr spContainer = spSerializer->GetContainer(_T("subtasks")); + + InitSubtasksColumns(spContainer); + ISerializerRowDataPtr spRow; // base data @@ -255,12 +260,10 @@ /////////////////////////////////////////////////////////////////////// { ISerializerContainerPtr spContainer = spSerializer->GetContainer(_T("subtasks_info")); - ISerializerRowReaderPtr spRowReader = spContainer->GetRowReader(); - IColumnsDefinition& rColumns = spRowReader->GetColumnsDefinitions(); - if(rColumns.IsEmpty()) - rColumns % _T("id") % _T("operation"); + InitSubtasksInfoColumns(spContainer); + ISerializerRowReaderPtr spRowReader = spContainer->GetRowReader(); if(spRowReader->Next()) spRowReader->GetValue(_T("operation"), *(int*)&m_eOperationType.Modify()); } @@ -272,9 +275,7 @@ ISerializerContainerPtr spContainer = spSerializer->GetContainer(_T("subtasks")); ISerializerRowReaderPtr spRowReader = spContainer->GetRowReader(); - IColumnsDefinition& rColumns = spRowReader->GetColumnsDefinitions(); - if(rColumns.IsEmpty()) - rColumns % _T("id") % _T("type") % _T("is_current") % _T("is_estimation"); + InitSubtasksColumns(spContainer); while(spRowReader->Next()) { @@ -335,4 +336,30 @@ } } +IColumnsDefinition& TSubTasksArray::InitSubtasksColumns(const ISerializerContainerPtr& spContainer) const +{ + IColumnsDefinition& rColumns = spContainer->GetColumnsDefinition(); + if(rColumns.IsEmpty()) + { + rColumns.AddColumn(_T("id"), IColumnsDefinition::eType_long); + rColumns.AddColumn(_T("type"), IColumnsDefinition::eType_int); + rColumns.AddColumn(_T("is_current"), IColumnsDefinition::eType_bool); + rColumns.AddColumn(_T("is_estimation"), IColumnsDefinition::eType_bool); + } + + return rColumns; +} + +IColumnsDefinition& TSubTasksArray::InitSubtasksInfoColumns(const ISerializerContainerPtr& spContainer) const +{ + IColumnsDefinition& rColumns = spContainer->GetColumnsDefinition(); + if(rColumns.IsEmpty()) + { + rColumns.AddColumn(_T("id"), IColumnsDefinition::eType_long); + rColumns.AddColumn(_T("operation"), IColumnsDefinition::eType_int); + } + + return rColumns; +} + END_CHCORE_NAMESPACE