Index: src/libchcore/TSQLiteSerializer.cpp =================================================================== diff -u -N -r4fe995b304ea342b50293f92d3c1992b43b820f7 -ra4635addad389b9e117679437a3e1b64a739ea96 --- src/libchcore/TSQLiteSerializer.cpp (.../TSQLiteSerializer.cpp) (revision 4fe995b304ea342b50293f92d3c1992b43b820f7) +++ src/libchcore/TSQLiteSerializer.cpp (.../TSQLiteSerializer.cpp) (revision a4635addad389b9e117679437a3e1b64a739ea96) @@ -1,111 +1,111 @@ -// ============================================================================ -// Copyright (C) 2001-2013 by Jozef Starosczyk -// ixen@copyhandler.com -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU Library General Public License -// (version 2) as published by the Free Software Foundation; -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU Library General Public -// License along with this program; if not, write to the -// Free Software Foundation, Inc., -// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// ============================================================================ -#include "stdafx.h" -#include "TSQLiteSerializer.h" -#include "TSQLiteSerializerContainer.h" -#include "TCoreException.h" -#include "ErrorCodes.h" -#include "TSQLiteTransaction.h" -#include "TSQLiteStatement.h" -#include "TSimpleTimer.h" -#include "SerializerTrace.h" - -namespace chcore -{ - using namespace sqlite; - - TSQLiteSerializer::TSQLiteSerializer(const TSmartPath& pathDB, const ISerializerSchemaPtr& spSchema) : - m_spDatabase(new TSQLiteDatabase(pathDB)), - m_spSchema(spSchema) - { - if(!m_spDatabase) - throw TCoreException(eErr_InvalidArgument, L"m_spDatabase", LOCATION); - if(!m_spSchema) - throw TCoreException(eErr_InvalidArgument, L"m_spSchema", LOCATION); - - // initialize db params - SetupDBOptions(); - - m_spSchema->Setup(m_spDatabase); - } - - TSQLiteSerializer::~TSQLiteSerializer() - { - // clear the containers first, so that we can safely get rid of the strings pool - m_mapContainers.clear(); - m_poolStrings.Clear(false); - } - - ISerializerContainerPtr TSQLiteSerializer::GetContainer(const TString& strContainerName) - { - ContainerMap::iterator iterMap = m_mapContainers.find(strContainerName); - if (iterMap == m_mapContainers.end()) - iterMap = m_mapContainers.insert(std::make_pair( - strContainerName, - std::make_shared(strContainerName, m_spDatabase, m_poolStrings))).first; - - return iterMap->second; - } - - TSmartPath TSQLiteSerializer::GetLocation() const - { - return m_spDatabase->GetLocation(); - } - - 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(); - m_poolStrings.Clear(); - - unsigned long long ullFlushClearTime = timer.Checkpoint(); ullFlushClearTime; - DBTRACE1(_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 TCoreException(eErr_CannotSetDatabaseOptions, L"Failed to set database options", LOCATION); - - TString strResult = tStatement.GetText(0); - if(strResult != _T("wal")) - throw TCoreException(eErr_CannotSetDatabaseOptions, L"Failed to set database options", LOCATION);*/ - } -} +// ============================================================================ +// Copyright (C) 2001-2013 by Jozef Starosczyk +// ixen@copyhandler.com +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU Library General Public License +// (version 2) as published by the Free Software Foundation; +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Library General Public +// License along with this program; if not, write to the +// Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// ============================================================================ +#include "stdafx.h" +#include "TSQLiteSerializer.h" +#include "TSQLiteSerializerContainer.h" +#include "TCoreException.h" +#include "ErrorCodes.h" +#include "TSQLiteTransaction.h" +#include "TSQLiteStatement.h" +#include "TSimpleTimer.h" +#include "SerializerTrace.h" + +namespace chcore +{ + using namespace sqlite; + + TSQLiteSerializer::TSQLiteSerializer(const TSmartPath& pathDB, const ISerializerSchemaPtr& spSchema) : + m_spDatabase(new TSQLiteDatabase(pathDB)), + m_spSchema(spSchema) + { + if(!m_spDatabase) + throw TCoreException(eErr_InvalidArgument, L"m_spDatabase", LOCATION); + if(!m_spSchema) + throw TCoreException(eErr_InvalidArgument, L"m_spSchema", LOCATION); + + // initialize db params + SetupDBOptions(); + + m_spSchema->Setup(m_spDatabase); + } + + TSQLiteSerializer::~TSQLiteSerializer() + { + // clear the containers first, so that we can safely get rid of the strings pool + m_mapContainers.clear(); + m_poolStrings.Clear(false); + } + + ISerializerContainerPtr TSQLiteSerializer::GetContainer(const TString& strContainerName) + { + ContainerMap::iterator iterMap = m_mapContainers.find(strContainerName); + if (iterMap == m_mapContainers.end()) + iterMap = m_mapContainers.insert(std::make_pair( + strContainerName, + std::make_shared(strContainerName, m_spDatabase, m_poolStrings))).first; + + return iterMap->second; + } + + TSmartPath TSQLiteSerializer::GetLocation() const + { + return m_spDatabase->GetLocation(); + } + + 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(); + m_poolStrings.Clear(); + + unsigned long long ullFlushClearTime = timer.Checkpoint(); ullFlushClearTime; + DBTRACE1(_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 TCoreException(eErr_CannotSetDatabaseOptions, L"Failed to set database options", LOCATION); + + TString strResult = tStatement.GetText(0); + if(strResult != _T("wal")) + throw TCoreException(eErr_CannotSetDatabaseOptions, L"Failed to set database options", LOCATION);*/ + } +}