--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/loggingservices/eventlogger/LogServ/src/LOGDEL.CPP Fri Jan 22 11:06:30 2010 +0200
@@ -0,0 +1,102 @@
+// Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#include "LOGDEL.H"
+#include "LOGQUERY.H"
+#include "logservpanic.h"
+#include "LogServDatabaseTransactionInterface.h"
+#include "LogServResourceInterpreter.h"
+#include "LogServCacheTypes.h"
+#include "LogServDatabaseChangeInterface.h"
+#include "LogServSqlStrings.h"
+
+CLogDeleteEvent::CLogDeleteEvent(MLogServDatabaseTransactionInterface& aDatabase, TInt aPriority)
+: CLogActive(aPriority), iDatabase(aDatabase)
+ {
+ }
+
+CLogDeleteEvent::~CLogDeleteEvent()
+ {
+ Cancel();
+ }
+
+CLogDeleteEvent* CLogDeleteEvent::NewL(MLogServDatabaseTransactionInterface& aDatabase, TInt aPriority)
+ {
+ return new (ELeave) CLogDeleteEvent(aDatabase, aPriority);
+ }
+
+
+void CLogDeleteEvent::StartL(TLogId aId, TRequestStatus& aStatus, const RMessage2& aMessage)
+ {
+ __ASSERT_DEBUG(!IsActive(), Panic(ELogAlreadyActive6));
+
+ iMessage = const_cast<RMessage2*>(&aMessage); // how to avoid this cast?
+ iId = aId;
+
+ Queue(aStatus);
+ TRequestStatus* status = &iStatus;
+ User::RequestComplete(status, KErrNone);
+ SetActive();
+ }
+
+void CLogDeleteEvent::DoRunL()
+ {
+ RLogEventDbTable tbl;
+ tbl.OpenLC(iDatabase.DTIDatabase());
+ User::LeaveIfError(tbl.SetIndex(KLogNameEventIdx1));
+ //Find event
+ if(!tbl.SeekL(TDbSeekKey((TInt)iId)))
+ {
+ iMessage->Complete(KErrNotFound);
+ DoCancel();
+ User::Leave(KErrNotFound);
+ }
+ tbl.GetL();
+ //Platsec check
+ TLogTypeId logTypeId = tbl.ColUint8(RLogEventDbTable::iTypeColNo);
+ const TLogServCacheTypeEntry& entry = iDatabase.DTICacheTypes().FindById(logTypeId);
+ __ASSERT_DEBUG(entry.iEventTypeId != KLogNullTypeId, Panic(ELogNoEventTypeAtId));
+ if(!iDatabase.DTIIsAllowed(EWriteOp, *iMessage, entry.iEventType->Uid()))
+ {
+ User::Leave(KErrPermissionDenied);
+ }
+ User::LeaveIfError(iDatabase.DTIBegin());
+ //Process duplicates
+ ::LogResetDuplicatesL(iDatabase, iId);
+ //Delete the event
+ tbl.DeleteL();
+ iDatabase.DTIChangeInterface().DCISubmitChangedEventContextL(ELogChangeTypeEventDeleted, iId);
+ //
+ CleanupStack::PopAndDestroy(&tbl);
+ }
+
+
+void CLogDeleteEvent::DoCancel()
+ {
+ CLogActive::DoCancel();
+ }
+
+void CLogDeleteEvent::DoComplete(TInt& aStatus)
+ {
+ // Attempt to commit the transaction
+ if (iDatabase.DTIInTransaction())
+ {
+ if (aStatus == KErrNone)
+ aStatus = iDatabase.DTICommitAndEnd();
+
+ if (aStatus < KErrNone)
+ iDatabase.DTIRollBack();
+ }
+ }