os/persistentdata/loggingservices/eventlogger/LogServ/src/LogServDatabaseDriver.cpp
changeset 0 bde4ae8d615e
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/os/persistentdata/loggingservices/eventlogger/LogServ/src/LogServDatabaseDriver.cpp	Fri Jun 15 03:10:57 2012 +0200
     1.3 @@ -0,0 +1,472 @@
     1.4 +// Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
     1.5 +// All rights reserved.
     1.6 +// This component and the accompanying materials are made available
     1.7 +// under the terms of "Eclipse Public License v1.0"
     1.8 +// which accompanies this distribution, and is available
     1.9 +// at the URL "http://www.eclipse.org/legal/epl-v10.html".
    1.10 +//
    1.11 +// Initial Contributors:
    1.12 +// Nokia Corporation - initial contribution.
    1.13 +//
    1.14 +// Contributors:
    1.15 +//
    1.16 +// Description:
    1.17 +//
    1.18 +
    1.19 +#include <logclientchangeobserver.h>
    1.20 +#include "LogServDatabaseDriver.h"
    1.21 +#include "LOGMAIN.H"
    1.22 +#include "LOGADD.H"
    1.23 +#include "LOGCHNGE.H"
    1.24 +#include "LOGGET.H"
    1.25 +#include "LOGDEL.H"
    1.26 +#include "LOGQUERY.H"
    1.27 +#include "logservpanic.h"
    1.28 +#include "LogServCacheConfig.h"
    1.29 +#include "LogServCacheTypes.h"
    1.30 +#include "LogServBackupInterface.h"
    1.31 +#include "LogServViewWindowFetcher.h"
    1.32 +#include "LogServRecentListManager.h"
    1.33 +#include "LogServDatabaseTransactionInterface.h"
    1.34 +#include "LogServDatabaseChangeInterface.h"
    1.35 +#include "LogServSqlStrings.h"
    1.36 +
    1.37 +
    1.38 +/////////////////////////////////////////////////////////////////////////////////////////
    1.39 +// -----> CLogServDatabaseDriver (source)
    1.40 +/////////////////////////////////////////////////////////////////////////////////////////
    1.41 +
    1.42 +CLogServDatabaseDriver::CLogServDatabaseDriver(MLogServBackupInterface& aBackupInterface, MLogServDatabaseTransactionInterface& aDatabase, CLogServResourceInterpreter& aResourceInterface, CLogServRecentListManager& aRecentListManager, TInt aHitterPriorities)
    1.43 +:	iHitterPriorities(aHitterPriorities), iBackupInterface(aBackupInterface), iDatabase(aDatabase), iResourceInterface(aResourceInterface), iRecentListManager(aRecentListManager)
    1.44 +	{
    1.45 +	}
    1.46 +
    1.47 +CLogServDatabaseDriver::~CLogServDatabaseDriver()
    1.48 +	{
    1.49 +	iBackupInterface.BIObserverRemove(*this);
    1.50 +	DestroyHitters();
    1.51 +	}
    1.52 +
    1.53 +void CLogServDatabaseDriver::ConstructL()
    1.54 +	{
    1.55 +	iBackupInterface.BIObserverAddL(*this, MLogServBackupInterface::EObjectDatabaseDriver);
    1.56 +	//
    1.57 +	CreateHittersL();
    1.58 +	}
    1.59 +
    1.60 +CLogServDatabaseDriver* CLogServDatabaseDriver::NewL(MLogServBackupInterface& aBackupInterface, MLogServDatabaseTransactionInterface& aDatabase, CLogServResourceInterpreter& aResourceInterface, CLogServRecentListManager& aRecentListManager, TInt aHitterPriorities)
    1.61 +	{
    1.62 +	CLogServDatabaseDriver* self = new(ELeave) CLogServDatabaseDriver(aBackupInterface, aDatabase, aResourceInterface, aRecentListManager, aHitterPriorities);
    1.63 +	CleanupStack::PushL(self);
    1.64 +	self->ConstructL();
    1.65 +	CleanupStack::Pop(self);
    1.66 +	return self;
    1.67 +	}
    1.68 +
    1.69 +/////////////////////////////////////////////////////////////////////////////////////////
    1.70 +/////////////////////////////////////////////////////////////////////////////////////////
    1.71 +/////////////////////////////////////////////////////////////////////////////////////////
    1.72 +
    1.73 +void CLogServDatabaseDriver::BOHandleEventL(TLogServBackupEvent aEvent)
    1.74 +	{
    1.75 +	switch(aEvent)
    1.76 +		{
    1.77 +	case EBackupStarting:
    1.78 +		LOGTEXT("CLogServDatabaseDriver::BOHandleEventL() - Backup STARTING");
    1.79 +		DestroyHitters();
    1.80 +		break;
    1.81 +	case EBackupEnded:
    1.82 +		LOGTEXT("CLogServDatabaseDriver::BOHandleEventL() - Backup ENDING");
    1.83 +		CreateHittersL();
    1.84 +		break;
    1.85 +	default:
    1.86 +		__ASSERT_DEBUG(EFalse, User::Invariant());
    1.87 +		break;
    1.88 +		}
    1.89 +
    1.90 +	LOGTEXT("CLogServDatabaseDriver::BOHandleEventL() - end");
    1.91 +	}
    1.92 +
    1.93 +/////////////////////////////////////////////////////////////////////////////////////////
    1.94 +/////////////////////////////////////////////////////////////////////////////////////////
    1.95 +/////////////////////////////////////////////////////////////////////////////////////////
    1.96 +
    1.97 +void CLogServDatabaseDriver::TaskEventAddL(TRequestStatus& aStatus, CLogEvent& aEvent, const RMessage2& aMessage)
    1.98 +//
    1.99 +// Add an event to the database
   1.100 +//
   1.101 +	{
   1.102 +	LOGTEXT("CLogServDatabaseDriver::TaskEventAddL()");
   1.103 +
   1.104 +	// Handle when we're doing a backup
   1.105 +	iBackupInterface.BIValidateStateForDatabaseOperationL();
   1.106 +
   1.107 +	// Get the recent list for this event
   1.108 +	const CLogServRecentList* list = iRecentListManager.GetRecentList(aEvent);
   1.109 +
   1.110 +	// Do the work
   1.111 +	iAddEvent->StartL(aEvent, list, aStatus, aMessage);
   1.112 +
   1.113 +	LOGTEXT("CLogServDatabaseDriver::TaskEventAddL() - end");
   1.114 +	}
   1.115 +
   1.116 +void CLogServDatabaseDriver::TaskEventChangeL(TRequestStatus& aStatus, const CLogEvent& aEvent, const RMessage2& aMessage)
   1.117 +//
   1.118 +// Change an event in the database
   1.119 +//
   1.120 +	{
   1.121 +	LOGTEXT("CLogServDatabaseDriver::TaskEventChangeL()");
   1.122 +
   1.123 +	// Handle when we're doing a backup
   1.124 +	iBackupInterface.BIValidateStateForDatabaseOperationL();
   1.125 +
   1.126 +	// Get the recent list for this event
   1.127 +	const CLogServRecentList* list = iRecentListManager.GetRecentList(aEvent);
   1.128 +	
   1.129 +	//
   1.130 +
   1.131 +	// Do the work
   1.132 +	iChangeEvent->StartL(aEvent, list, aStatus, aMessage);
   1.133 +
   1.134 +	LOGTEXT("CLogServDatabaseDriver::TaskEventChangeL() - end");
   1.135 +	}
   1.136 +
   1.137 +void CLogServDatabaseDriver::TaskEventGetL(TRequestStatus& aStatus, CLogEvent& aEvent, const RMessage2& aMessage)
   1.138 +//
   1.139 +// Get an event from the database
   1.140 +//
   1.141 +	{
   1.142 +	LOGTEXT("CLogServDatabaseDriver::TaskEventGetL()");
   1.143 +
   1.144 +	// Handle when we're doing a backup
   1.145 +	iBackupInterface.BIValidateStateForDatabaseOperationL();
   1.146 +
   1.147 +	// Do the work
   1.148 +	iGetEvent->StartL(aEvent, aStatus, aMessage);
   1.149 +
   1.150 +	LOGTEXT("CLogServDatabaseDriver::TaskEventGetL() - end");
   1.151 +	}
   1.152 +
   1.153 +void CLogServDatabaseDriver::TaskEventDeleteL(TRequestStatus& aStatus, TLogId aId, const RMessage2& aMessage)
   1.154 +//
   1.155 +// Delete an event from the database
   1.156 +//
   1.157 +	{
   1.158 +	LOGTEXT("CLogServDatabaseDriver::TaskEventDeleteL()");
   1.159 +
   1.160 +	// Handle when we're doing a backup
   1.161 +	iBackupInterface.BIValidateStateForDatabaseOperationL();
   1.162 +
   1.163 +	iDeleteEvent->StartL(aId, aStatus, aMessage);
   1.164 +
   1.165 +	LOGTEXT("CLogServDatabaseDriver::TaskEventDeleteL() - end");
   1.166 +	}
   1.167 +
   1.168 +void CLogServDatabaseDriver::TaskEventTypeAddL(TRequestStatus& aStatus, const CLogEventType& aEventType)
   1.169 +	{
   1.170 +	LOGTEXT("CLogServDatabaseDriver::TaskEventTypeAddL()");
   1.171 +
   1.172 +	// Handle when we're doing a backup
   1.173 +	iBackupInterface.BIValidateStateForDatabaseOperationL();
   1.174 +	iDatabase.DTICacheTypes().AddTypeL(aEventType);
   1.175 +	//
   1.176 +	TRequestStatus* status = &aStatus;
   1.177 +	User::RequestComplete(status, KErrNone);
   1.178 +
   1.179 +	LOGTEXT("CLogServDatabaseDriver::TaskEventTypeAddL() - end");
   1.180 +	}
   1.181 +
   1.182 +void CLogServDatabaseDriver::TaskEventTypeGetL(TRequestStatus& aStatus, const CLogEventType*& aEventType, TUid aUid)
   1.183 +	{
   1.184 +	LOGTEXT("CLogServDatabaseDriver::TaskEventTypeGetL()");
   1.185 +
   1.186 +	// Handle when we're doing a backup
   1.187 +	iBackupInterface.BIValidateStateForDatabaseOperationL();
   1.188 +
   1.189 +	const TLogServCacheTypeEntry& entry = iDatabase.DTICacheTypes().FindByUid(aUid);
   1.190 +	aEventType = entry.iEventType;
   1.191 +	if(entry.iEventTypeId == KLogNullTypeId)
   1.192 +		{
   1.193 +		User::Leave(KErrNotFound);
   1.194 +		}
   1.195 +
   1.196 +	TRequestStatus* status = &aStatus;
   1.197 +	User::RequestComplete(status, KErrNone);
   1.198 +
   1.199 +	LOGTEXT("CLogServDatabaseDriver::TaskEventTypeGetL() - end");
   1.200 +	}
   1.201 +
   1.202 +void CLogServDatabaseDriver::TaskEventTypeChangeL(TRequestStatus& aStatus, const CLogEventType& aEventType)
   1.203 +	{
   1.204 +	LOGTEXT("CLogServDatabaseDriver::TaskEventTypeChangeL()");
   1.205 +
   1.206 +	// Handle when we're doing a backup
   1.207 +	iBackupInterface.BIValidateStateForDatabaseOperationL();
   1.208 +	const TInt error = iDatabase.DTICacheTypes().ChangeType(aEventType);
   1.209 +	//
   1.210 +	TRequestStatus* status = &aStatus;
   1.211 +	User::RequestComplete(status, error);
   1.212 +
   1.213 +	LOGTEXT("CLogServDatabaseDriver::TaskEventTypeChangeL() - end");
   1.214 +	}
   1.215 +
   1.216 +void CLogServDatabaseDriver::TaskEventTypeDeleteL(TRequestStatus& aStatus, TUid aType)
   1.217 +	{
   1.218 +	LOGTEXT("CLogServDatabaseDriver::TaskEventTypeDeleteL()");
   1.219 +
   1.220 +	// Handle when we're doing a backup
   1.221 +	iBackupInterface.BIValidateStateForDatabaseOperationL();
   1.222 +	const TInt error = iDatabase.DTICacheTypes().DeleteType(aType);
   1.223 +	//
   1.224 +	TRequestStatus* status = &aStatus;
   1.225 +	User::RequestComplete(status, error);
   1.226 +
   1.227 +	LOGTEXT("CLogServDatabaseDriver::TaskEventTypeDeleteL() - end");
   1.228 +	}
   1.229 +
   1.230 +void CLogServDatabaseDriver::TaskConfigGetL(TRequestStatus& aStatus, TLogConfig& aConfig)
   1.231 +	{
   1.232 +	LOGTEXT("CLogServDatabaseDriver::TaskConfigGetL()");
   1.233 +
   1.234 +	// Handle when we're doing a backup
   1.235 +	iBackupInterface.BIValidateStateForDatabaseOperationL();
   1.236 +	aConfig = iDatabase.DTICacheConfig().Config();
   1.237 +	//
   1.238 +	TRequestStatus* status = &aStatus;
   1.239 +	User::RequestComplete(status, KErrNone);
   1.240 +
   1.241 +	LOGTEXT("CLogServDatabaseDriver::TaskConfigGetL() - end");
   1.242 +	}
   1.243 +
   1.244 +void CLogServDatabaseDriver::TaskConfigChangeL(TRequestStatus& aStatus, const TLogConfig& aConfig)
   1.245 +	{
   1.246 +	LOGTEXT("CLogServDatabaseDriver::TaskConfigChangeL()");
   1.247 +
   1.248 +	// Handle when we're doing a backup
   1.249 +	iBackupInterface.BIValidateStateForDatabaseOperationL();
   1.250 +
   1.251 +	iChangeConfig->StartL(aConfig, aStatus);
   1.252 +
   1.253 +	LOGTEXT("CLogServDatabaseDriver::TaskConfigChangeL() - end");
   1.254 +	}
   1.255 +
   1.256 +// aDate is expected to be UTC
   1.257 +void CLogServDatabaseDriver::TaskClearLogL(TRequestStatus& aStatus, const TTime& aDate
   1.258 +#ifdef SYMBIAN_ENABLE_EVENTLOGGER_DUALSIM	
   1.259 +		, TSimId aSimId
   1.260 +#endif		
   1.261 +		)
   1.262 +	{
   1.263 +	LOGTEXT("CLogServDatabaseDriver::TaskClearLogL()");
   1.264 +
   1.265 +	// Handle when we're doing a backup
   1.266 +	iBackupInterface.BIValidateStateForDatabaseOperationL();
   1.267 +
   1.268 +	// Format the date.
   1.269 +	TBuf<KLogMaxDateLength> dateString;
   1.270 +	aDate.FormatL(dateString, LogUtils::DateFormatForLocale());
   1.271 +	// Get list of events to purge
   1.272 +	TheSql.Format(KLogSqlDeleteOldestString, &dateString);
   1.273 +#ifdef SYMBIAN_ENABLE_EVENTLOGGER_DUALSIM	
   1.274 +	if(aSimId != KLogNullSimId)
   1.275 +		{
   1.276 +		TheSql.Append(KLogAnd);
   1.277 +		TheSql.AppendFormat(KLogUNumberPredicate, &KLogFieldEventSimId, aSimId);
   1.278 +		}
   1.279 +#endif	
   1.280 +	iDatabase.DTIBeginWithRollBackProtectionLC();
   1.281 +	TInt rc = iDatabase.DTIExecuteSql(TheSql);
   1.282 +	User::LeaveIfError(rc);
   1.283 +	if(rc > 0)
   1.284 +	    {
   1.285 +		// Add log cleared events. First is for the window code, which receives messages
   1.286 +		// through the old API. The 2nd is for clients of the log engine
   1.287 +		iDatabase.DTIChangeInterface().DCISubmitChangedEventContextL(ELogChangeTypeLogCleared, KLogNullId);
   1.288 +		iDatabase.DTIChangeInterface().DCISubmitGlobalChangeContextL(KLogClientChangeEventLogCleared);
   1.289 +		}
   1.290 +	iDatabase.DTICommitAndCancelRollbackProtectionL();
   1.291 +	// Complete the request
   1.292 +	TRequestStatus* status = &aStatus;
   1.293 +	User::RequestComplete(status, KErrNone);
   1.294 +
   1.295 +	LOGTEXT("CLogServDatabaseDriver::TaskClearLogL() - end");
   1.296 +	}
   1.297 +
   1.298 +void CLogServDatabaseDriver::TaskClearRecentL(TRequestStatus& aStatus, TInt aRecentList
   1.299 +#ifdef SYMBIAN_ENABLE_EVENTLOGGER_DUALSIM	
   1.300 +		, TSimId aSimId
   1.301 +#endif		
   1.302 +		)
   1.303 +	{
   1.304 +	LOGTEXT("CLogServDatabaseDriver::TaskClearRecentL()");
   1.305 +
   1.306 +	// Handle when we're doing a backup
   1.307 +	iBackupInterface.BIValidateStateForDatabaseOperationL();
   1.308 +
   1.309 +	TheSql.Copy(KLogSqlSelectAllRecent);
   1.310 +#ifdef SYMBIAN_ENABLE_EVENTLOGGER_DUALSIM	
   1.311 +	TBool whereAdded = EFalse;
   1.312 +#endif	
   1.313 +	// Get events to clear from recent lists
   1.314 +	if(aRecentList != KLogNullRecentList)
   1.315 +		{
   1.316 +		TheSql.Append(KLogWhere);
   1.317 +#ifdef SYMBIAN_ENABLE_EVENTLOGGER_DUALSIM	
   1.318 +		whereAdded = ETrue;
   1.319 +#endif		
   1.320 +		TheSql.AppendFormat(KLogNumberPredicate, &KLogFieldEventRecentString, aRecentList);
   1.321 +		}
   1.322 +#ifdef SYMBIAN_ENABLE_EVENTLOGGER_DUALSIM	
   1.323 +	//..and clear from recent lists with specific SimId
   1.324 +	if(aSimId != KLogNullSimId)
   1.325 +		{
   1.326 +		if(whereAdded)
   1.327 +			{
   1.328 +			TheSql.Append(KLogAnd);
   1.329 +			}
   1.330 +		else
   1.331 +			{
   1.332 +			TheSql.Append(KLogWhere);
   1.333 +			}
   1.334 +		TheSql.AppendFormat(KLogUNumberPredicate, &KLogFieldEventSimId, aSimId);
   1.335 +		}
   1.336 +#endif	
   1.337 +	
   1.338 +    RLogDbView view;
   1.339 +    view.PrepareLC(iDatabase.DTIDatabase(), TheSql);
   1.340 +	
   1.341 +	if(view.FirstL())
   1.342 +		{
   1.343 +        static TDbColNo colId = 0;
   1.344 +        static TDbColNo colRecent = 0;
   1.345 +        static TDbColNo colDuplicate = 0;
   1.346 +        if(colId == 0)
   1.347 +            {
   1.348 +            CDbColSet* cs = view.ColSetL();
   1.349 +            colId = cs->ColNo(KLogFieldIdString);
   1.350 +            colRecent = cs->ColNo(KLogFieldEventRecentString);
   1.351 +            colDuplicate = cs->ColNo(KLogFieldEventDuplicateString);
   1.352 +            delete cs;
   1.353 +            }
   1.354 +		iDatabase.DTIBeginWithRollBackProtectionLC();
   1.355 +		// Iterate through the events
   1.356 +		do
   1.357 +			{
   1.358 +			// Get current event id
   1.359 +			view.GetL();
   1.360 +			const TLogId id = view.ColInt32(colId);
   1.361 +			// Make the change
   1.362 +			view.UpdateL();
   1.363 +			view.SetColNullL(colRecent);
   1.364 +			view.SetColNullL(colDuplicate);
   1.365 +			view.PutL();
   1.366 +			// This is a "hidden" change. It may affect the contents of a view, but the actual event hasn't changed
   1.367 +			iDatabase.DTIChangeInterface().DCISubmitChangedEventContextL(ELogChangeTypeEventChangedHidden, id);
   1.368 +			}
   1.369 +		while(view.NextL());
   1.370 +		iDatabase.DTICommitAndCancelRollbackProtectionL();
   1.371 +		}
   1.372 +    CleanupStack::PopAndDestroy(&view);
   1.373 +
   1.374 +	// Complete the request
   1.375 +	TRequestStatus* status = &aStatus;
   1.376 +	User::RequestComplete(status, KErrNone);
   1.377 +
   1.378 +	LOGTEXT("CLogServDatabaseDriver::TaskClearRecentL() - end");
   1.379 +	}
   1.380 +
   1.381 +void CLogServDatabaseDriver::TaskMaintenanceStartL(TRequestStatus& aStatus, TBool aPurge)
   1.382 +//
   1.383 +//	Start database maintenance process
   1.384 +//
   1.385 +	{
   1.386 +	LOGTEXT("CLogServDatabaseDriver::TaskMaintenanceStartL()");
   1.387 +
   1.388 +	// Handle when we're doing a backup
   1.389 +	iBackupInterface.BIValidateStateForDatabaseOperationL();
   1.390 +
   1.391 +	iMaintainer->Start(aPurge, aStatus);
   1.392 +
   1.393 +	LOGTEXT("CLogServDatabaseDriver::TaskMaintenanceStartL() - end");
   1.394 +	}
   1.395 +
   1.396 +void CLogServDatabaseDriver::TaskBuildWindowL(TRequestStatus& aStatus, const CLogServViewBase& aView, const TLogTransferWindow& aWindow, const RMessage2& aMessage)
   1.397 +//
   1.398 +//	Build a client window
   1.399 +//
   1.400 +	{
   1.401 +	LOGTEXT("CLogServDatabaseDriver::TaskBuildWindowL()");
   1.402 +
   1.403 +	// Handle when we're doing a backup
   1.404 +	iBackupInterface.BIValidateStateForDatabaseOperationL();
   1.405 +
   1.406 +	iWindowFetcher->StartL(aStatus, aView, aWindow, aMessage); 
   1.407 +
   1.408 +	LOGTEXT("CLogServDatabaseDriver::TaskBuildWindowL() - end");
   1.409 +	}
   1.410 +
   1.411 +void CLogServDatabaseDriver::TaskCancelCurrent()
   1.412 +//
   1.413 +//	Cancel all active tasks
   1.414 +//
   1.415 +	{
   1.416 +	LOGTEXT("CLogServDatabaseDriver::TaskCancelCurrent()");
   1.417 +
   1.418 +	if	(iAddEvent)
   1.419 +		iAddEvent->Cancel();
   1.420 +	if	(iChangeEvent)
   1.421 +		iChangeEvent->Cancel();
   1.422 +	if	(iGetEvent)
   1.423 +		iGetEvent->Cancel();
   1.424 +	if	(iDeleteEvent)
   1.425 +		iDeleteEvent->Cancel();
   1.426 +	if	(iChangeConfig)
   1.427 +		iChangeConfig->Cancel();
   1.428 +	if	(iWindowFetcher)
   1.429 +		iWindowFetcher->Cancel();
   1.430 +
   1.431 +	LOGTEXT("CLogServDatabaseDriver::TaskCancelCurrent() - end");
   1.432 +	}
   1.433 +
   1.434 +/////////////////////////////////////////////////////////////////////////////////////////
   1.435 +/////////////////////////////////////////////////////////////////////////////////////////
   1.436 +/////////////////////////////////////////////////////////////////////////////////////////
   1.437 +
   1.438 +void CLogServDatabaseDriver::DestroyHitters()
   1.439 +	{
   1.440 +	LOGTEXT("CLogServDatabaseDriver::DestroyHitters()");
   1.441 +
   1.442 +	TaskCancelCurrent();
   1.443 +	//
   1.444 +	delete iMaintainer;
   1.445 +	iMaintainer = NULL;
   1.446 +	delete iAddEvent;
   1.447 +	iAddEvent = NULL;
   1.448 +	delete iChangeEvent;
   1.449 +	iChangeEvent = NULL;
   1.450 +	delete iGetEvent;
   1.451 +	iGetEvent = NULL;
   1.452 +	delete iDeleteEvent;
   1.453 +	iDeleteEvent = NULL;
   1.454 +	delete iChangeConfig;
   1.455 +	iChangeConfig = NULL;
   1.456 +	delete iWindowFetcher;
   1.457 +	iWindowFetcher = NULL;
   1.458 +
   1.459 +	LOGTEXT("CLogServDatabaseDriver::DestroyHitters() - end");
   1.460 +	}
   1.461 +
   1.462 +void CLogServDatabaseDriver::CreateHittersL()
   1.463 +	{
   1.464 +	LOGTEXT("CLogServDatabaseDriver::CreateHittersL()");
   1.465 +
   1.466 +	iMaintainer = CLogMaintenance::NewL(iDatabase, iHitterPriorities);
   1.467 +	iAddEvent = CLogAddEvent::NewL(iDatabase, iHitterPriorities);
   1.468 +	iChangeEvent = CLogChangeEvent::NewL(iDatabase, iHitterPriorities);
   1.469 +	iGetEvent = CLogGetEvent::NewL(iDatabase, iHitterPriorities);
   1.470 +	iDeleteEvent = CLogDeleteEvent::NewL(iDatabase, iHitterPriorities);
   1.471 +	iChangeConfig = CLogChangeConfig::NewL(iDatabase, iRecentListManager, iHitterPriorities);
   1.472 +	iWindowFetcher = CLogServViewWindowFetcher::NewL(iDatabase, iHitterPriorities);
   1.473 +
   1.474 +	LOGTEXT("CLogServDatabaseDriver::CreateHittersL() - end");
   1.475 +	}