Index: src/libchcore/TSQLiteSerializerContainer.cpp =================================================================== diff -u -N -r213cc1a2b3530ea7cb31fd0dac258df23bcc3416 -ra3d1e4c03280ece94af75d9aef32a65266cf8050 --- src/libchcore/TSQLiteSerializerContainer.cpp (.../TSQLiteSerializerContainer.cpp) (revision 213cc1a2b3530ea7cb31fd0dac258df23bcc3416) +++ src/libchcore/TSQLiteSerializerContainer.cpp (.../TSQLiteSerializerContainer.cpp) (revision a3d1e4c03280ece94af75d9aef32a65266cf8050) @@ -48,13 +48,13 @@ { } -ISerializerRowDataPtr TSQLiteSerializerContainer::GetRow(size_t stRowID, bool bMarkAsAdded) +ISerializerRowData& TSQLiteSerializerContainer::GetRow(size_t stRowID, bool bMarkAsAdded) { RowMap::iterator iterFnd = m_mapRows.find(stRowID); if(iterFnd == m_mapRows.end()) - iterFnd = m_mapRows.insert(std::make_pair(stRowID, TSQLiteSerializerRowDataPtr(new TSQLiteSerializerRowData(stRowID, m_tColumns, bMarkAsAdded)))).first; + iterFnd = m_mapRows.insert(std::make_pair(stRowID, TSQLiteSerializerRowData(stRowID, m_tColumns, bMarkAsAdded))).first; else if(bMarkAsAdded) - iterFnd->second->MarkAsAdded(); + iterFnd->second.MarkAsAdded(); return (*iterFnd).second; } @@ -93,17 +93,17 @@ FlushDeletions(); // group rows that can be executed with one preparation - std::map> mapGroups; - std::map>::iterator iterMapGroups; + std::map> mapGroups; + std::map>::iterator iterMapGroups; for(RowMap::iterator iterRows = m_mapRows.begin(); iterRows != m_mapRows.end(); ++iterRows) { - TRowID rowID = iterRows->second->GetChangeIdentification(); + TRowID rowID = iterRows->second.GetChangeIdentification(); iterMapGroups = mapGroups.find(rowID); if(iterMapGroups == mapGroups.end()) - iterMapGroups = mapGroups.insert(std::make_pair(rowID, std::vector())).first; + iterMapGroups = mapGroups.insert(std::make_pair(rowID, std::vector())).first; - iterMapGroups->second.push_back(iterRows->second); + iterMapGroups->second.push_back(&iterRows->second); } TSQLiteStatement tStatement(m_spDB); @@ -112,7 +112,7 @@ { if(iterMapGroups->first.HasAny()) { - std::vector& rGroupRows = iterMapGroups->second; + std::vector& rGroupRows = iterMapGroups->second; // query is generated from the first item in a group TString strQuery = rGroupRows.front()->GetQuery(m_strName); @@ -121,7 +121,7 @@ tStatement.Prepare(strQuery); - for(std::vector::iterator iterRow = iterMapGroups->second.begin(); iterRow != iterMapGroups->second.end(); ++iterRow) + for(std::vector::iterator iterRow = iterMapGroups->second.begin(); iterRow != iterMapGroups->second.end(); ++iterRow) { (*iterRow)->BindParamsAndExec(tStatement); tStatement.ClearBindings();