Index: src/libchcore/TSQLiteSerializer.cpp =================================================================== diff -u -N -r30297d6aab17483da8e7b8323b4d17ff1a9f78d6 -r5693271a6736f524997e3951fc7b7b6323bc6447 --- src/libchcore/TSQLiteSerializer.cpp (.../TSQLiteSerializer.cpp) (revision 30297d6aab17483da8e7b8323b4d17ff1a9f78d6) +++ src/libchcore/TSQLiteSerializer.cpp (.../TSQLiteSerializer.cpp) (revision 5693271a6736f524997e3951fc7b7b6323bc6447) @@ -22,6 +22,9 @@ #include "TCoreException.h" #include "ErrorCodes.h" #include "TSQLiteTransaction.h" +#include "TSQLiteStatement.h" +#include "TSimpleTimer.h" +#include "SerializerTrace.h" BEGIN_CHCORE_NAMESPACE @@ -34,6 +37,9 @@ if(!m_spDatabase || !m_spSchema) THROW_CORE_EXCEPTION(eErr_InvalidArgument); + // initialize db params + SetupDBOptions(); + m_spSchema->Setup(m_spDatabase); } @@ -55,16 +61,42 @@ void TSQLiteSerializer::Flush() { + DBTRACE0(_T(" ## Serializer::Flush() - started\n")); + TSQLiteTransaction tran(m_spDatabase); + TSimpleTimer timer(true); + for(ContainerMap::iterator iterContainer = m_mapContainers.begin(); iterContainer != m_mapContainers.end(); ++iterContainer) { iterContainer->second->Flush(); } + unsigned long long ullFlushGatherTime = timer.Checkpoint(); ullFlushGatherTime; + tran.Commit(); + unsigned long long ullFlushCommitTime = timer.Checkpoint(); ullFlushCommitTime; + DBTRACE2(_T(" ## Serializer::Flush() - container flushes: %I64u ms, transaction commit: %I64u ms\n"), ullFlushGatherTime, ullFlushCommitTime); + m_mapContainers.clear(); + + unsigned long long ullFlushClearTime = timer.Stop(); ullFlushClearTime; + DBTRACE(_T(" ## Serializer::Flush() - container clearing: %I64u ms\n"), ullFlushClearTime); } +void TSQLiteSerializer::SetupDBOptions() +{ +/* + TSQLiteStatement tStatement(m_spDatabase); + tStatement.Prepare(_T("PRAGMA JOURNAL_MODE=WAL")); + TSQLiteStatement::EStepResult eResult = tStatement.Step(); + if(eResult != TSQLiteStatement::eStep_HasRow) + THROW_CORE_EXCEPTION(eErr_CannotSetDatabaseOptions); + + TString strResult = tStatement.GetText(0); + if(strResult != _T("wal")) + THROW_CORE_EXCEPTION(eErr_CannotSetDatabaseOptions);*/ +} + END_CHCORE_NAMESPACE