Update contrib.
1 // Copyright (c) 2002-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.
18 #include "logservpanic.h"
19 #include "LogServDatabaseTransactionInterface.h"
20 #include "LogServResourceInterpreter.h"
21 #include "LogServCacheTypes.h"
22 #include "LogServDatabaseChangeInterface.h"
23 #include "LogServSqlStrings.h"
25 CLogDeleteEvent::CLogDeleteEvent(MLogServDatabaseTransactionInterface& aDatabase, TInt aPriority)
26 : CLogActive(aPriority), iDatabase(aDatabase)
30 CLogDeleteEvent::~CLogDeleteEvent()
35 CLogDeleteEvent* CLogDeleteEvent::NewL(MLogServDatabaseTransactionInterface& aDatabase, TInt aPriority)
37 return new (ELeave) CLogDeleteEvent(aDatabase, aPriority);
41 void CLogDeleteEvent::StartL(TLogId aId, TRequestStatus& aStatus, const RMessage2& aMessage)
43 __ASSERT_DEBUG(!IsActive(), Panic(ELogAlreadyActive6));
45 iMessage = const_cast<RMessage2*>(&aMessage); // how to avoid this cast?
49 TRequestStatus* status = &iStatus;
50 User::RequestComplete(status, KErrNone);
54 void CLogDeleteEvent::DoRunL()
57 tbl.OpenLC(iDatabase.DTIDatabase());
58 User::LeaveIfError(tbl.SetIndex(KLogNameEventIdx1));
60 if(!tbl.SeekL(TDbSeekKey((TInt)iId)))
62 iMessage->Complete(KErrNotFound);
64 User::Leave(KErrNotFound);
68 TLogTypeId logTypeId = tbl.ColUint8(RLogEventDbTable::iTypeColNo);
69 const TLogServCacheTypeEntry& entry = iDatabase.DTICacheTypes().FindById(logTypeId);
70 __ASSERT_DEBUG(entry.iEventTypeId != KLogNullTypeId, Panic(ELogNoEventTypeAtId));
71 if(!iDatabase.DTIIsAllowed(EWriteOp, *iMessage, entry.iEventType->Uid()))
73 User::Leave(KErrPermissionDenied);
75 User::LeaveIfError(iDatabase.DTIBegin());
77 ::LogResetDuplicatesL(iDatabase, iId);
80 iDatabase.DTIChangeInterface().DCISubmitChangedEventContextL(ELogChangeTypeEventDeleted, iId);
82 CleanupStack::PopAndDestroy(&tbl);
86 void CLogDeleteEvent::DoCancel()
88 CLogActive::DoCancel();
91 void CLogDeleteEvent::DoComplete(TInt& aStatus)
93 // Attempt to commit the transaction
94 if (iDatabase.DTIInTransaction())
96 if (aStatus == KErrNone)
97 aStatus = iDatabase.DTICommitAndEnd();
99 if (aStatus < KErrNone)
100 iDatabase.DTIRollBack();