First public contribution.
1 // Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
2 // All rights reserved.
3 // This component and the accompanying materials are made available
4 // under the terms of "Eclipse Public License v1.0"
5 // which accompanies this distribution, and is available
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
8 // Initial Contributors:
9 // Nokia Corporation - initial contribution.
19 #include "logservpanic.h"
21 #include "LogServDatabaseTransactionInterface.h"
22 #include "LogServCacheConfig.h"
23 #include "LogCliServShared.h"
24 #include "LogServDatabaseChangeInterface.h"
25 #include "LogServSqlStrings.h"
27 CLogMaintenance::CLogMaintenance(MLogServDatabaseTransactionInterface& aDatabase, TInt aPriority)
28 : CLogActive(aPriority), iDatabase(aDatabase)
32 CLogMaintenance::~CLogMaintenance()
39 void CLogMaintenance::ConstructL()
41 iRecover = new(ELeave)CLogRecover(iDatabase, Priority());
42 iCompact = new(ELeave)CLogCompact(iDatabase, Priority());
45 CLogMaintenance* CLogMaintenance::NewL(MLogServDatabaseTransactionInterface& aDatabase, TInt aPriority)
47 CLogMaintenance* self = new(ELeave)CLogMaintenance(aDatabase, aPriority);
48 CleanupStack::PushL(self);
54 void CLogMaintenance::Start(TBool aPurge, TRequestStatus& aStatus)
60 TRequestStatus* status = &iStatus;
61 User::RequestComplete(status, KErrNone);
65 TBool CLogMaintenance::DoNextL()
69 // Recover the database
71 if (iRecover->Start(iStatus))
73 iState = ELogGetConfig;
78 // Get the log configuration
82 iConfig = iDatabase.DTICacheConfig().Config();
83 TRequestStatus* status = &iStatus;
84 User::RequestComplete(status, KErrNone);
85 iState = iConfig.iMaxEventAge == 0 ? ELogCompact : ELogPurgeMainAge;
90 // Purge old events from the log
91 case ELogPurgeMainAge:
97 date -= TTimeIntervalSeconds(iConfig.iMaxEventAge);
99 ClearLogL(date, iStatus);
100 iState = ELogCompact;
104 // Compact the database
106 iCompact->Start(iStatus);
107 iState = ELogComplete;
114 __ASSERT_DEBUG(EFalse, Panic(ELogNoSuchState7));
120 void CLogMaintenance::DoRunL()
126 void CLogMaintenance::DoCancel()
131 CLogActive::DoCancel();
134 void CLogMaintenance::DoComplete(TInt& aStatus)
140 // aDate is expected to be UTC
141 void CLogMaintenance::ClearLogL(const TTime& aDate, TRequestStatus& aStatus)
143 TBuf<KLogMaxDateLength> date;
144 aDate.FormatL(date, LogUtils::DateFormatForLocale());
145 // Get list of events to purge
146 TheSql.Format(KLogSqlSelectOldestString, &date);
148 view.PrepareLC(iDatabase.DTIDatabase(), TheSql);
151 static TDbColNo idColNo = 0;
154 CDbColSet* cs = view.ColSetL();
155 idColNo = cs->ColNo(KLogFieldIdString);
158 iDatabase.DTIBeginWithRollBackProtectionLC();
162 const TLogId id = view.ColInt32(idColNo);
164 iDatabase.DTIChangeInterface().DCISubmitChangedEventContextL(ELogChangeTypeEventDeleted, id);
168 iDatabase.DTICommitAndCancelRollbackProtectionL();
170 CleanupStack::PopAndDestroy(&view);
171 // Complete the request
172 TRequestStatus* status = &aStatus;
173 User::RequestComplete(status, KErrNone);