eventsui/eventsengine/src/evtdatabase.cpp
branchRCL_3
changeset 17 1fc85118c3ae
parent 16 8173571d354e
child 18 870918037e16
--- a/eventsui/eventsengine/src/evtdatabase.cpp	Thu Aug 19 09:48:36 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1147 +0,0 @@
-/*
-* Copyright (c) 2008 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:  Class that directly interacts with Sqlite database.
-*
-*/
-
-
-// System Includes
-#include <s32strm.h>
-
-// User Includes
-#include "evtdatabase.h"
-#include "evtdbnotifier.h"
-#include "evtaction.h"
-#include "evtconsts.h"
-#include "evtdebug.h"
-
-// Constant
-const TInt KBufferLength = 512;
-const TInt KMaxIntLength = 22;
-
-// ================ Member funtions for CEvtDatabase class ==================
-
-// ---------------------------------------------------------------------------
-// CEvtDatabase::CEvtDatabase
-// ---------------------------------------------------------------------------
-//
-CEvtDatabase::CEvtDatabase( )
-    {
-    }
-    
-// ---------------------------------------------------------------------------
-// CEvtDatabase::~CEvtDatabase
-// ---------------------------------------------------------------------------
-//
-CEvtDatabase::~CEvtDatabase()
-    {
-    // Close Database handle
-    CloseDatabase();
-    
-    delete iDbNotifier;
-    } 
-    
-// ---------------------------------------------------------------------------
-// CEvtDatabase::NewL
-// ---------------------------------------------------------------------------
-//
-CEvtDatabase* CEvtDatabase::NewL( )
-    {
-	CEvtDatabase* self = NewLC( );
-	CleanupStack::Pop( self );
-	return self;
-    }
-
-// ---------------------------------------------------------------------------
-// CEvtDatabase::NewLC
-// ---------------------------------------------------------------------------
-//
-CEvtDatabase* CEvtDatabase::NewLC( )
-    {
-	CEvtDatabase* self = new ( ELeave )CEvtDatabase( );
-	CleanupStack::PushL( self );
-	self->ConstructL( );
-	return self;
-    } 
-
-// ---------------------------------------------------------------------------
-// CEvtDatabase::ConstructL
-// ---------------------------------------------------------------------------
-//
-void CEvtDatabase::ConstructL()
-    {
-	EVTUIDEBUG( "+ CEvtDatabase::OpenDatabaseL()" );
-	EVTUIDEBUG( "Calling OpenDatabaseL()" );
-    // Open the handle to Database
-    OpenDatabaseL( );
-    
-	EVTUIDEBUG( "Calling CEvtDbNotifier::NewL()" );
-    // Notifier is instantiated to notify and listen to database change.
-    iDbNotifier = CEvtDbNotifier::NewL( *this );
-	EVTUIDEBUG( "+ CEvtDatabase::OpenDatabaseL()" );
-    } 
-
-// ---------------------------------------------------------------------------
-// CEvtDatabase::CreateOpenDatabaseL
-// ---------------------------------------------------------------------------
-//
-void CEvtDatabase::OpenDatabaseL( )
-	{
-	EVTUIDEBUG( "+ CEvtDatabase::OpenDatabaseL()" );
-  	
-  	// First try to open the database.
-	TInt err = iDb.Open( KEventsDbSecureFName() );
-	
-	// If the database is not present, then a database and schema has to be
-  	// created
-	if( KErrNotFound == err )
-		{
-		CreateOpenDatabaseL( );		// Create Database
-		CreateSchemaL( );			// Create Schema
-		}
-	else if( KErrNone != err )
-		User::LeaveIfError( err );	// Leave if Open fails for any other reason
-	EVTUIDEBUG( "- CEvtDatabase::OpenDatabaseL()" );
-	}
-
-// ---------------------------------------------------------------------------
-// CEvtDatabase::CloseDatabaseL
-// ---------------------------------------------------------------------------
-//
-void CEvtDatabase::CloseDatabase()
-	{
-	EVTUIDEBUG( "+ CEvtDatabase::CloseDatabase()" );
-	// Close db handle
-	iDb.Close();
-	EVTUIDEBUG( "- CEvtDatabase::CloseDatabase()" );
-	}
-
-// ---------------------------------------------------------------------------
-// CEvtDatabase::CreateDatabaseL
-// ---------------------------------------------------------------------------
-//
-void CEvtDatabase::CreateOpenDatabaseL( )
-	{
-	EVTUIDEBUG( "+ CEvtDatabase::CreateOpenDatabaseL()" );
-
-	// To create a Secure Database, we first need to create the Security policy.
-	// Security policy once defined for a database, can not be changed.
-	TSecurityPolicy defaultPolicy( TSecurityPolicy::EAlwaysPass );
-	RSqlSecurityPolicy securityPolicy;
-	TInt err = securityPolicy.Create( defaultPolicy );
-	User::LeaveIfError( err );
-
-    // Define Security Policy
-    const TSecurityPolicy KSchemaPolicy( ECapabilityLocation );
-    const TSecurityPolicy KReadWritePolicy( ECapabilityLocation );
-
-	// Set the security Policy for Schema and tables
-	securityPolicy.SetDbPolicy( RSqlSecurityPolicy::ESchemaPolicy, 
-															KSchemaPolicy );
-	securityPolicy.SetDbPolicy( RSqlSecurityPolicy::EReadPolicy, 
-															KReadWritePolicy );
-	securityPolicy.SetDbPolicy( RSqlSecurityPolicy::EWritePolicy, 
-															KReadWritePolicy );
-	
-	// CreateL will create and open the handle to database.
-	iDb.CreateL( KEventsDbSecureFName(), securityPolicy );
-	
-	// Close the Security Policy
-	securityPolicy.Close();
-	
-	EVTUIDEBUG( "- CEvtDatabase::CreateOpenDatabaseL()" );
-	}
-
-// ---------------------------------------------------------------------------
-// CEvtDatabase::CreateSchemaL
-// ---------------------------------------------------------------------------
-//
-void CEvtDatabase::CreateSchemaL()
-	{
-	EVTUIDEBUG( "+ CEvtDatabase::CreateSchemaL()" );
-	// Create Tables in database
-	CreateTablesL();
-	// Create Triggers in database
-	CreateTriggerL();
-	// Create Indexes in database
-	CreateIndexL();
-	EVTUIDEBUG( "- CEvtDatabase::CreateSchemaL()" );
-	}
-
-// ---------------------------------------------------------------------------
-// CEvtDatabase::CreateTablesL
-// ---------------------------------------------------------------------------
-//
-void CEvtDatabase::CreateTablesL()
-	{
-	EVTUIDEBUG( "+ CEvtDatabase::CreateTablesL()" );
-	
-	// Leave if the creation of tables fail.
-	User::LeaveIfError( 
-			iDb.Exec( KCreateEventTable ) );
-	User::LeaveIfError( 
-			iDb.Exec( KCreateActionTable ) );
-	EVTUIDEBUG( "- CEvtDatabase::CreateTablesL()" );
-	}
-	
-// ---------------------------------------------------------------------------
-// CEvtDatabase::CreateTriggerL
-// ---------------------------------------------------------------------------
-//
-void CEvtDatabase::CreateTriggerL()
-	{
-	EVTUIDEBUG( "+ CEvtDatabase::CreateTriggerL()" );
-	// Triggers are used to maintain the referential integrity between
-	// Event and Action tables.
-	// This avoids Insert, Update and Delete anamolies.
-	 
-	// Leave if the creation of triggers fail.
-	User::LeaveIfError( 
-			iDb.Exec( KCreateTriggerActionEventInsert ) );
-	User::LeaveIfError( 
-			iDb.Exec( KCreateTriggerActionEventUpdate ) );
-	User::LeaveIfError( 
-			iDb.Exec( KCreateTriggerActionEventDelete ) );
-				
-	EVTUIDEBUG( "- CEvtDatabase::CreateTriggerL()" );
-	}
-
-// ---------------------------------------------------------------------------
-// CEvtDatabase::CreateIndexL
-// ---------------------------------------------------------------------------
-//
-void CEvtDatabase::CreateIndexL()
-	{
-	EVTUIDEBUG( "+ CEvtDatabase::CreateIndexL()" );
-    // Indexes are created to improve the performance of select Queries
-    // Following indexes are created
-    // 1. Index to "Select Event based on Status and Sort by Subject"
-    // 2. Index to "Select Event based on Unique Event Id"
-    // 3. Index to "Select Event based on Event Id" - (LBT Engine's Id)
-    // 4. Index to "Select Action based on Unique Event Id"
-	 
-	// Leave if the creation of indexes fail.
-	User::LeaveIfError( 
-			iDb.Exec( KCreateEventStatusSubjectIndex ) );
-	User::LeaveIfError( 
-			iDb.Exec( KCreateEventEvtIdIndex ) );
-	User::LeaveIfError( 
-			iDb.Exec( KCreateActionEvtIdIndex ) );
-			
-	EVTUIDEBUG( "- CEvtDatabase::CreateIndexL()" );
-	}
-
-// ---------------------------------------------------------------------------
-// CEvtDatabase::GetEventsL
-// ---------------------------------------------------------------------------
-//
-void CEvtDatabase::GetEventsL( 
-                            TEvtEventStatus    aEventStatus,
-                            RPointerArray<CEvtBasicEventInfo>&     aEventArray )
-    {
-	EVTUIDEBUG( "+ CEvtDatabase::GetEventsL() - Status" );
-    RSqlStatement stmt;
-    
-    // Prepare the SQL statement to Get Events based on Status
-	stmt.Prepare( iDb, KSelectBasicEventOnStatus );
-	
-	// Set the Status parameter in SQL statement
-	TInt paramIndex = stmt.ParameterIndex( KStatus );
-	stmt.BindInt( paramIndex,aEventStatus );
-	
-	// Pass the SQL statement to get events.
-    GetEventsL( stmt, aEventArray );
-	
-	// Close statement
-	stmt.Close();
-	EVTUIDEBUG( "- CEvtDatabase::GetEventsL() - Status" );
-    }
-
-// ---------------------------------------------------------------------------
-// CEvtDatabase::GetEventsL
-// ---------------------------------------------------------------------------
-//
-void CEvtDatabase::GetEventsL( 
-                            RPointerArray<CEvtBasicEventInfo>&     aEventArray )
-    {
-	EVTUIDEBUG( "+ CEvtDatabase::GetEventsL() - without Status" );
-    RSqlStatement stmt;
-    
-    // Prepare the SQL statement to Get Events based on Status
-	stmt.Prepare( iDb, KSelectBasicEvent );
-	
-	// Pass the SQL statement to get events.
-    GetEventsL( stmt, aEventArray );
-	
-	// Close statement
-	stmt.Close();
-	EVTUIDEBUG( "- CEvtDatabase::GetEventsL() - without Status" );
-    } 
-    
-// ---------------------------------------------------------------------------
-// CEvtDatabase::GetEventL
-// ---------------------------------------------------------------------------
-//
-CEvtEvent* CEvtDatabase::GetEventL( TEvtEventId      aEventId )
-    {
-	EVTUIDEBUG( "+ CEvtDatabase::GetEventL()" );
-
-	RSqlStatement stmt;
-	CEvtEvent* evt = NULL;
-	
-	// Prepare the SQL statement to Get Events based on Id
-	stmt.Prepare( iDb, KSelectEventFromEventId );
-	
-	// Set the Id parameter in SQL statement
-	TInt paramIndex=stmt.ParameterIndex( KEventId );
-	stmt.BindInt( paramIndex, aEventId );
-	
-	// Constants representing the columns in Query
-	TInt columnIndexStatus=0; 
-	TInt columnIndexSubject=1; 
-	TInt columnIndexPlace=2; 
-	TInt columnIndexRadius=3; 
-	TInt columnIndexDescription=4; 
-	TInt columnIndexRepeat=5; 
-	TInt columnIndexActionId=6;
-	TInt columnIndexAction=7;  
-	TInt columnIndexActionEvtId=8; 
-
-    // Flag to loop out after the first element is found in database
-    // This is not required as we maintain unique Id for every event.
-    // But to ensure that we do not allocate many events object to evt,
-    // this flag is defined.
-    TBool flag( ETrue );
-
-	// Set the other attributes of the Requested Event
-	while( flag && stmt.Next() == KSqlAtRow )
-		{
-		flag = EFalse;
-        evt = CEvtEvent::NewLC();
-
-    	// Set the Id of the Requested Event
-    	evt->SetEventId(aEventId);
-
-		TInt value = stmt.ColumnInt( columnIndexStatus );
-		evt->SetEventStatus( static_cast<TEvtEventStatus>(value) );
-		
-		TPtrC subject=stmt.ColumnTextL( columnIndexSubject );
-		evt->SetSubjectL(subject);
-		
-		TPtrC place=stmt.ColumnTextL( columnIndexPlace );
-		evt->SetPlaceL(place);
-    
-		TReal realvalue = stmt.ColumnReal( columnIndexRadius );
-        evt->SetRadius( realvalue );
-		
-		TPtrC desc=stmt.ColumnTextL( columnIndexDescription );
-		evt->SetDescriptionL(desc);
-        
-		value = stmt.ColumnInt( columnIndexRepeat );
-        evt->SetRepeat(value);
-        
-		TInt64 value64 = stmt.ColumnInt64( columnIndexActionId );
-		if( value64 != 0 )
-			{			
-    		// Create action instance to set for Event
-    		// ownership is not passed.
-    		CEvtAction* actn = CEvtAction::NewLC();
-			
-			// Set the Unique Id for Action
-			actn->SetId( value64 );
-			
-			// Set Action to an Event only if there is an Action String.
-			TPtrC action = stmt.ColumnTextL( columnIndexAction );
-	    	actn->SetActionL( action );
-    		
-    		// Set the Event Id
-			TUint32 value32 = stmt.ColumnInt( columnIndexActionEvtId );
-	    	actn->SetEvtId( value32 );
-        
-        	// Set the Action to Event
-	    	evt->SetActionL( actn );
-	    	
-    		// Pop action after setting.
-    		CleanupStack::Pop( actn );
-			}
-		
-		// Pop the Event object
-		CleanupStack::Pop( evt );
-		}
-	stmt.Close();
-	
-	if( flag )
-        User::Leave( KErrNotFound );	
-        
-	EVTUIDEBUG( "- CEvtDatabase::GetEventL()" );
-	return evt;
-    } 
-    
-// ---------------------------------------------------------------------------
-// CEvtDatabase::UpdateEvent
-// ---------------------------------------------------------------------------
-//
-void CEvtDatabase::UpdateEventL( 
-                            CEvtEvent&          aEvtEvent )
-    {
-	EVTUIDEBUG( "+ CEvtDatabase::UpdateEventL()" );
-	
-	// Update Event's Attributes.
-    UpdateEventTableL( aEvtEvent );
-	
-	if( aEvtEvent.HasAction() )
-		{
-		aEvtEvent.Action().SetEvtId( aEvtEvent.EventId() );
-		if( CheckIfActionPresentL( aEvtEvent.Action().Id() ) )
-			UpdateActionL( aEvtEvent.Action() );
-		else
-			CreateActionL( aEvtEvent.Action() );
-		}
-	else
-		{
-			DeleteActionL( aEvtEvent.EventId() );
-		}
-		
-	// Notify the database change for Modify
-	iDbNotifier->DbChangedL( );
-	EVTUIDEBUG( "- CEvtDatabase::UpdateEventL()" );
-    } 
-    
-// ---------------------------------------------------------------------------
-// CEvtDatabase::AddEventL
-// ---------------------------------------------------------------------------
-//
-void CEvtDatabase::AddEventL( CEvtEvent&     aEvtEvent )
-    {
-	EVTUIDEBUG( "+ CEvtDatabase::AddEventL()" );
-    
-	RSqlStatement stmt;
-	TInt paramIndex;
-	
-	// We need to create the streams to insert large texts.
-	RSqlParamWriteStream subjectStream;
-	RSqlParamWriteStream placeStream;
-	RSqlParamWriteStream descStream;
-	CleanupClosePushL( subjectStream );
-	CleanupClosePushL( placeStream );
-	CleanupClosePushL( descStream );
-	
-	// Prepare the SQL statement to Get Events based on Status
-	stmt.Prepare( iDb, KInsertEvent );
-	
-	// Set Status
-	paramIndex = stmt.ParameterIndex( KStatus );
-	stmt.BindInt( paramIndex, aEvtEvent.EventStatus() );
-	
-	// Set Subject
-	paramIndex = stmt.ParameterIndex( KSubject );
-	if( KNullDesC() == aEvtEvent.Subject() )
-		{
-	    stmt.BindNull( paramIndex );
-		}
-	else
-		{
-		subjectStream.BindText( stmt, paramIndex );
-		subjectStream.WriteL( aEvtEvent.Subject() );
-		subjectStream.CommitL();
-		}
-	
-	// Set Place
-	paramIndex = stmt.ParameterIndex( KPlace );
-	if( KNullDesC() == aEvtEvent.Place() )
-		{
-	    stmt.BindNull( paramIndex );
-		}
-	else
-		{
-		placeStream.BindText( stmt, paramIndex );
-		placeStream.WriteL( aEvtEvent.Place() );
-		placeStream.CommitL();
-		}
-	
-	// Set Radius
-	paramIndex = stmt.ParameterIndex( KRadius );
-	stmt.BindReal( paramIndex, aEvtEvent.Radius() );
-	
-	// Set Description
-	paramIndex = stmt.ParameterIndex( KDescription );
-	if( KNullDesC() == aEvtEvent.Description() )
-		{
-	    stmt.BindNull( paramIndex );
-		}
-	else
-		{
-		descStream.BindText( stmt, paramIndex );
-		descStream.WriteL( aEvtEvent.Description() );
-		descStream.CommitL();
-		}
-	
-	// Set Repeat
-	paramIndex = stmt.ParameterIndex( KRepeat );
-	stmt.BindInt( paramIndex, aEvtEvent.Repeat() );
-    
-    // Set Event Id
-	paramIndex = stmt.ParameterIndex( KEventId );
-	stmt.BindInt( paramIndex, aEvtEvent.EventId() );
-	
-	// Execute the Remove SQL statement
-	User::LeaveIfError( stmt.Exec() );
-	
-	//Close the streams
-	CleanupStack::PopAndDestroy( &descStream );
-	CleanupStack::PopAndDestroy( &placeStream );
-	CleanupStack::PopAndDestroy( &subjectStream );
-	    
-	stmt.Close();
-    
-	// Insert into Action table If action is present for the event.  
-	if( aEvtEvent.HasAction() )
-		{
-		aEvtEvent.Action().SetEvtId( aEvtEvent.EventId() );
-			CreateActionL( aEvtEvent.Action() );
-		}
-        
-	// Notify the database change for Insert
-	iDbNotifier->DbChangedL( );
-	EVTUIDEBUG( "- CEvtDatabase::AddEventL()" );
-    }  
- 
-// ---------------------------------------------------------------------------
-// CEvtDatabase::RemoveEventsL
-// ---------------------------------------------------------------------------
-//
-void CEvtDatabase::RemoveEventsL( const RArray<TEvtEventId>&     aEventArray )
-    {
-	EVTUIDEBUG( "+ CEvtDatabase::RemoveEventsL()" ); 
-    // Removing an Event in database should be done in an order of
-    // - remove Action entry and then remove Event entry
-    
-    // Leave if there are no array elements
-    if( aEventArray.Count() == 0 )
-        User::Leave( KErrArgument );
-    
-    RSqlStatement stmt;
-    
-    HBufC8* buf = HBufC8::NewLC(KBufferLength);
-    
-    buf->Des().Zero();
-    TInt tempLength = KOr().Length()+KMultiActionId().Length()+KMaxIntLength;
-
-    for(TInt i=0; i<aEventArray.Count(); i++ )
-        {
-        if(buf->Length() == 0)
-            {
-            buf->Des().Zero();
-            buf->Des().Append(KDeleteMultiAction());
-            buf->Des().Append(KMultiActionId());
-            buf->Des().AppendNum(aEventArray[i]);
-            }
-        else
-            {
-            buf->Des().Append(KOr());
-            buf->Des().Append(KMultiActionId());
-            buf->Des().AppendNum(aEventArray[i]);
-            }
-
-        if( i == aEventArray.Count()-1 || KBufferLength - buf->Length() < tempLength )
-            {
-            // Prepare the SQL statement to Update Status based on Id
-            stmt.Prepare( iDb, *buf );
-            
-            // Execute the Remove SQL statement
-            User::LeaveIfError( stmt.Exec() );
-            buf->Des().Zero();
-            
-            // Close the Connection
-            stmt.Close();
-            }
-        }
-    
-    buf->Des().Zero();
-    tempLength = KOr().Length()+KMultiEventId().Length()+KMaxIntLength;
-
-    for(TInt i=0; i<aEventArray.Count(); i++ )
-        {
-        if(buf->Length() == 0)
-            {
-            buf->Des().Zero();
-            buf->Des().Append(KDeleteMultiEvent());
-            buf->Des().Append(KMultiEventId());
-            buf->Des().AppendNum(aEventArray[i]);
-            }
-        else
-            {
-            buf->Des().Append(KOr());
-            buf->Des().Append(KMultiEventId());
-            buf->Des().AppendNum(aEventArray[i]);
-            }
-
-        if( i == aEventArray.Count()-1 || KBufferLength - buf->Length() < tempLength )
-            {
-            // Prepare the SQL statement to Update Status based on Id
-            stmt.Prepare( iDb, *buf );
-            
-            // Execute the Remove SQL statement
-            User::LeaveIfError( stmt.Exec() );
-            buf->Des().Zero();
-            
-            // Close the Connection
-            stmt.Close();
-            }
-        }
-    
-    CleanupStack::PopAndDestroy( buf ); //buf
-	        	
-	// Notify the database change for Delete
-	iDbNotifier->DbChangedL( );
-	EVTUIDEBUG( "- CEvtDatabase::RemoveEventsL()" ); 
-    }       
- 
-// ---------------------------------------------------------------------------
-// CEvtDatabase::UpdateEventsStatusL
-// ---------------------------------------------------------------------------
-//
-void CEvtDatabase::UpdateEventsStatusL( const RArray<TEvtEventId>& aEventArray,  TEvtEventStatus  aEvtStatus )
-    {
-    EVTUIDEBUG( "Sync UpdateEventsStatusL"); 
-    
-    // Leave if there are no array elements
-    if( aEventArray.Count() == 0 )
-        User::Leave( KErrArgument );
-    
-    RSqlStatement stmt;
-    
-    HBufC8* buf = HBufC8::NewLC(KBufferLength);
-    buf->Des().Zero();
-    TInt tempLength = KOr().Length()+KMultiEventId().Length()+KMaxIntLength;
-
-    for(TInt i=0; i<aEventArray.Count(); i++ )
-        {
-        if(buf->Length() == 0)
-            {
-            buf->Des().Zero();
-            buf->Des().Append(KUpdateMultiStatus());
-            buf->Des().AppendNum(aEvtStatus);
-            buf->Des().Append(KWhere());
-            buf->Des().Append(KMultiEventId());
-            buf->Des().AppendNum(aEventArray[i]);
-            }
-        else
-            {
-            buf->Des().Append(KOr());
-            buf->Des().Append(KMultiEventId());
-            buf->Des().AppendNum(aEventArray[i]);
-            }
-
-        if( i == aEventArray.Count()-1 || KBufferLength - buf->Length() < tempLength )
-            {
-            // Prepare the SQL statement to Update Status based on Id
-            stmt.Prepare( iDb, *buf );
-            
-            // Execute the Remove SQL statement
-            User::LeaveIfError( stmt.Exec() );
-            buf->Des().Zero();
-            
-            // Close the Connection
-            stmt.Close();
-            }
-        }
-
-    CleanupStack::PopAndDestroy( buf ); //buf
-                
-    // Notify the database change for Delete
-    iDbNotifier->DbChangedL( );
-    }     
- 
-// ---------------------------------------------------------------------------
-// CEvtDatabase::UpdateEventStatusL
-// ---------------------------------------------------------------------------
-//
-void CEvtDatabase::UpdateEventStatusL( 
-                            TEvtEventId      aEvtId,
-                            TEvtEventStatus    aEvtStatus)
-    {
-	EVTUIDEBUG( "+ CEvtDatabase::UpdateEventStatusL()" ); 
-	RSqlStatement stmt;
-	TInt paramIndex;
-	
-	// Prepare the SQL statement for Status updation
-	stmt.Prepare( iDb, KUpdateEventStatus );
-	
-	// Set the Status parameter in SQL statement
-	paramIndex=stmt.ParameterIndex( KStatus );
-	stmt.BindInt( paramIndex, aEvtStatus );
-	
-	// Set the Id parameter in SQL statement
-	paramIndex=stmt.ParameterIndex( KEventId );
-	stmt.BindInt64( paramIndex, aEvtId );
-	
-	// Execute the Update SQL statement
-	User::LeaveIfError( stmt.Exec() );
-	
-	stmt.Close();
-	
-	// Notify the database change for Modify
-	iDbNotifier->DbChangedL( );
-	EVTUIDEBUG( "- CEvtDatabase::UpdateEventStatusL()" ); 
-    } 
-         
-// ---------------------------------------------------------------------------
-// CEvtDatabase::RemoveEventL
-// ---------------------------------------------------------------------------
-//
-void CEvtDatabase::RemoveEventL( TEvtEventId      aEventId )
-    {
-	EVTUIDEBUG( "+ CEvtDatabase::RemoveEventL()" ); 
-    
-    // To maintain the Referential Integrity, we have to first delete
-    // Action and then Event
-	DeleteActionL( aEventId );
-	DeleteEventL( aEventId );
-	
-	// Notify the database change for Delete
-	iDbNotifier->DbChangedL( );
-	EVTUIDEBUG( "- CEvtDatabase::RemoveEventL()" ); 
-	} 
-	
-// ---------------------------------------------------------------------------
-// CEvtDatabase::GetEventsL
-// ---------------------------------------------------------------------------
-//
-void CEvtDatabase::GetEventsL( 
-                            RSqlStatement&      aStmt,
-                            RPointerArray<CEvtBasicEventInfo>&     aEventArray )
-    {
-	EVTUIDEBUG( "+ CEvtDatabase::GetEventsL() - Generic" ); 
-    
-	TInt columnIndexEventId=0; 
-	TInt columnIndexStatus=1; 
-	TInt columnIndexSubject=2; 
-	TInt columnIndexPlace=3;  
-	TInt columnIndexRepeat=4; 
-	/*
-	Note that the column can be looked up if necessary
-	although this is more expensive
-	TInt columnIndex=aStmt.ColumnIndex("location");
-	*/
-	
-	// Keep the count of the number of Events object that are pushed on to
-	// Cleanup Stack. So that those many objects can be popped up later.
-	TInt count=0;
-	
-	while( aStmt.Next() == KSqlAtRow )
-		{
-        count++;
-		CEvtBasicEventInfo* evt = CEvtBasicEventInfo::NewLC();
-		
-        TUint32 value32 = aStmt.ColumnInt( columnIndexEventId );
-		evt->SetEventId( value32 );
-
-		TInt value = aStmt.ColumnInt( columnIndexStatus );
-		evt->SetEventStatus( static_cast<TEvtEventStatus>( value ) );
-		
-		TPtrC subject=aStmt.ColumnTextL( columnIndexSubject );
-		evt->SetSubjectL( subject );
-		
-		TPtrC place=aStmt.ColumnTextL( columnIndexPlace );
-		evt->SetPlaceL( place );
-        
-		value = aStmt.ColumnInt( columnIndexRepeat );
-		evt->SetRepeat(value);
-		        
-        aEventArray.Append( evt );
-		}
-	
-	// count number of objects from Cleanup stack
-    CleanupStack::Pop( count );
-	EVTUIDEBUG( "- CEvtDatabase::GetEventsL() - Generic" ); 
-    } 
-    
-// ---------------------------------------------------------------------------
-// CEvtDatabase::UpdateEventTableL
-// ---------------------------------------------------------------------------
-//
-void CEvtDatabase::UpdateEventTableL( 
-                            CEvtEvent&          aEvtEvent )
-    {
-	EVTUIDEBUG( "+ CEvtDatabase::UpdateEventTableL()" ); 
-    // Update all the attributes of an Event
-	  
-	RSqlStatement stmt;
-	TInt paramIndex;
-	
-	// We need to create the streams to insert large texts.
-	RSqlParamWriteStream subjectStream;
-	RSqlParamWriteStream placeStream;
-	RSqlParamWriteStream descStream;
-	CleanupClosePushL( subjectStream );
-	CleanupClosePushL( placeStream );
-	CleanupClosePushL( descStream );
-	
-	// Prepare the SQL statement to Get Events based on Status
-	stmt.Prepare( iDb, KUpdateEvent );
-	
-	// Set Status
-	paramIndex = stmt.ParameterIndex( KStatus );
-	stmt.BindInt( paramIndex, aEvtEvent.EventStatus() );
-	
-	// Set Subject
-	paramIndex = stmt.ParameterIndex( KSubject );
-	if( KNullDesC() == aEvtEvent.Subject() )
-		{
-	    stmt.BindNull( paramIndex );
-		}
-	else
-		{
-		subjectStream.BindText( stmt, paramIndex );
-		subjectStream.WriteL( aEvtEvent.Subject() );
-		subjectStream.CommitL();
-		}
-	
-	// Set Place
-	paramIndex = stmt.ParameterIndex( KPlace );
-	if( KNullDesC() == aEvtEvent.Place() )
-		{
-	    stmt.BindNull( paramIndex );
-		}
-	else
-		{
-		placeStream.BindText( stmt, paramIndex );
-		placeStream.WriteL( aEvtEvent.Place() );
-		placeStream.CommitL();
-		}
-	
-	// Set Radius
-	paramIndex = stmt.ParameterIndex( KRadius );
-	stmt.BindReal( paramIndex, aEvtEvent.Radius() );
-	
-	// Set Description
-	paramIndex = stmt.ParameterIndex( KDescription );
-	if( KNullDesC() == aEvtEvent.Description() )
-		{
-	    stmt.BindNull( paramIndex );
-		}
-	else
-		{
-		descStream.BindText( stmt, paramIndex );
-		descStream.WriteL( aEvtEvent.Description() );
-		descStream.CommitL();
-		}
-	
-	// Set Repeat
-	paramIndex = stmt.ParameterIndex( KRepeat );
-	stmt.BindInt( paramIndex, aEvtEvent.Repeat() );
-    
-    // Set Id
-	paramIndex = stmt.ParameterIndex( KEventId );
-	stmt.BindInt( paramIndex, aEvtEvent.EventId() );
-	
-	// Execute the Remove SQL statement
-	User::LeaveIfError( stmt.Exec() );
-	
-	//Close the streams
-	CleanupStack::PopAndDestroy( &descStream );
-	CleanupStack::PopAndDestroy( &placeStream );
-	CleanupStack::PopAndDestroy( &subjectStream );
-	    
-	stmt.Close();
-
-	EVTUIDEBUG( "- CEvtDatabase::UpdateEventTableL()" );
-    }
-    
-// ---------------------------------------------------------------------------
-// CEvtDatabase::DeleteEventL
-// ---------------------------------------------------------------------------
-//
-void CEvtDatabase::DeleteEventL( 
-                            	TEvtEventId          aEventId )
-    {
-	EVTUIDEBUG( "+ CEvtDatabase::DeleteEventL()" );
-    
-	RSqlStatement stmt;
-	TInt paramIndex;
-	
-	// Prepare the SQL statement to Remove Action based on Id
-	stmt.Prepare( iDb, KDeleteEvent );
-	
-	// Set the Id parameter in SQL statement
-	paramIndex = stmt.ParameterIndex( KEventId );
-	stmt.BindInt( paramIndex, aEventId );
-	
-	// Execute the Remove SQL statement
-	User::LeaveIfError( stmt.Exec() );
-	
-	stmt.Reset();
-	stmt.Close();
-
-	EVTUIDEBUG( "- CEvtDatabase::DeleteEventL()" );
-    }
-    
-// ---------------------------------------------------------------------------
-// CEvtDatabase::CheckIfEventPresentL
-// ---------------------------------------------------------------------------
-//
-TBool CEvtDatabase::CheckIfEventPresentL( 
-                            TEvtEventId          aId )
-    {
-	EVTUIDEBUG( "+ CEvtDatabase::DeleteEventL()" );
-
-	RSqlStatement stmt;
-	
-	// Prepare the SQL statement to Get Action based on EvtId
-	stmt.Prepare( iDb, KSelectEvent );
-	
-	// Set the Id parameter in SQL statement
-	TInt paramIndex=stmt.ParameterIndex( KEventId );
-	stmt.BindInt( paramIndex, aId ); 
-
-    // Flag to Check if the the Action is present
-    TBool flag( EFalse );
-
-	// Set the other attributes of the Requested Event
-	while( !flag && stmt.Next() == KSqlAtRow )
-		{
-		flag = ETrue;
-		}
-    
-    stmt.Close();
-	EVTUIDEBUG( "- CEvtDatabase::DeleteEventL()" );
-	
-    return flag;
-    }
-    
-// ---------------------------------------------------------------------------
-// CEvtDatabase::CheckIfActionPresentL
-// ---------------------------------------------------------------------------
-//
-TBool CEvtDatabase::CheckIfActionPresentL( 
-                            TInt64          aId )
-    {
-	EVTUIDEBUG( "+ CEvtDatabase::CheckIfActionPresentL()" );
-
-	RSqlStatement stmt;
-	
-	// Prepare the SQL statement to Get Action based on EvtId
-	stmt.Prepare( iDb, KSelectAction );
-	
-	// Set the Id parameter in SQL statement
-	TInt paramIndex=stmt.ParameterIndex( KId );
-	stmt.BindInt64( paramIndex, aId ); 
-
-    // Flag to Check if the the Action is present
-    TBool flag( EFalse );
-
-	// Set the other attributes of the Requested Event
-	while( !flag && stmt.Next() == KSqlAtRow )
-		{
-		flag = ETrue;
-		}
-    
-    stmt.Close();
-	EVTUIDEBUG( "- CEvtDatabase::CheckIfActionPresentL()" );
-	
-    return flag;
-    }
-    
-// ---------------------------------------------------------------------------
-// CEvtDatabase::GetActionId
-// ---------------------------------------------------------------------------
-//
-TInt64 CEvtDatabase::GetActionId( 
-                            TEvtEventId          aId )
-    {
-	EVTUIDEBUG( "+ CEvtDatabase::GetActionId()" );
-    TInt64 id=0;
-	TInt columnIndexActionId=0;
-    
-	RSqlStatement stmt;
-	
-	// Prepare the SQL statement to Get Action based on EvtId
-	stmt.Prepare( iDb, KSelectActionFromEvent );
-	
-	// Set the Id parameter in SQL statement
-	TInt paramIndex=stmt.ParameterIndex( KEvtId );
-	stmt.BindInt( paramIndex, aId ); 
-
-    // Flag to Check if the the Action is present
-    TBool flag( EFalse );
-
-	// Set the other attributes of the Requested Event
-	while( !flag && stmt.Next() == KSqlAtRow )
-		{
-		id = stmt.ColumnInt64( columnIndexActionId );
-		flag = ETrue;
-		}
-    
-    stmt.Close();
-	EVTUIDEBUG( "- CEvtDatabase::GetActionId()" );
-	
-    return id;
-    }
-    
-// ---------------------------------------------------------------------------
-// CEvtDatabase::CreateActionL
-// ---------------------------------------------------------------------------
-//
-void CEvtDatabase::CreateActionL( 
-								CEvtAction&          aEvtAction )
-    {
-	EVTUIDEBUG( "+ CEvtDatabase::CreateActionL()" );
-    
-    RSqlStatement stmt;
-	
-	// Update Action table.
-	RSqlParamWriteStream actionStream;
-	CleanupClosePushL( actionStream );
-	
-	// Prepare the SQL statement to update Action based on Id
-	stmt.Prepare( iDb, KInsertAction );
-	
-	// Set the Action parameter in SQL statement
-	TInt paramIndex=stmt.ParameterIndex( KAction );
-	if( KNullDesC() == aEvtAction.Action() )
-		{
-	    stmt.BindNull( paramIndex );
-		}
-	else
-		{
-		actionStream.BindText( stmt, paramIndex );
-		actionStream.WriteL( aEvtAction.Action() );
-		actionStream.CommitL();
-		}
-	
-	// Set the EvtId parameter in SQL statement
-	paramIndex=stmt.ParameterIndex( KEvtId );
-	stmt.BindInt( paramIndex, aEvtAction.EvtId() );
-	
-	// Actual Query execution that updates the database.
-	User::LeaveIfError( stmt.Exec() );
-	
-	//Close the stream
-	CleanupStack::PopAndDestroy( &actionStream );
-	stmt.Close();
-	
-	//Set the new Action Id
-	aEvtAction.SetId( GetActionId( aEvtAction.EvtId() ) );
-	
-	EVTUIDEBUG( "- CEvtDatabase::CreateActionL()" );
-
-    }
-    
-// ---------------------------------------------------------------------------
-// CEvtDatabase::UpdateActionL
-// ---------------------------------------------------------------------------
-//
-void CEvtDatabase::UpdateActionL( 
-                            	CEvtAction&          aEvtAction )
-    {
-	EVTUIDEBUG( "+ CEvtDatabase::UpdateActionL()" );
-    
-    RSqlStatement stmt;
-	
-	// Update Action table.
-	RSqlParamWriteStream actionStream;
-	CleanupClosePushL( actionStream );
-	
-	// Prepare the SQL statement to update Action based on Id
-	stmt.Prepare( iDb, KUpdateAction );
-	
-	// Set the Action parameter in SQL statement
-	TInt paramIndex=stmt.ParameterIndex( KAction );
-	if( KNullDesC() == aEvtAction.Action() )
-		{
-	    stmt.BindNull( paramIndex );
-		}
-	else
-		{
-		actionStream.BindText( stmt, paramIndex );
-		actionStream.WriteL( aEvtAction.Action() );
-		actionStream.CommitL();
-		}
-	
-	// Set the EvtId parameter in SQL statement
-	paramIndex=stmt.ParameterIndex( KEvtId );
-	stmt.BindInt( paramIndex, aEvtAction.EvtId() );
-	
-	// Set the Id parameter in SQL statement
-	paramIndex=stmt.ParameterIndex( KId );
-	stmt.BindInt64( paramIndex, aEvtAction.Id() );
-	
-	// Actual Query execution that updates the database.
-	User::LeaveIfError( stmt.Exec() );
-	
-	//Close the stream
-	CleanupStack::PopAndDestroy( &actionStream );
-	stmt.Close();
-
-	EVTUIDEBUG( "- CEvtDatabase::UpdateActionL()" );
-    }
-    
-// ---------------------------------------------------------------------------
-// CEvtDatabase::DeleteActionL
-// ---------------------------------------------------------------------------
-//
-void CEvtDatabase::DeleteActionL( 
-                            	TEvtEventId          aEventId )
-    {
-	EVTUIDEBUG( "+ CEvtDatabase::DeleteActionL()" );
-    
-	RSqlStatement stmt;
-	TInt paramIndex;
-	
-	// Prepare the SQL statement to Remove Action based on Id
-	stmt.Prepare( iDb, KDeleteAction );
-	
-	// Set the Id parameter in SQL statement
-	paramIndex = stmt.ParameterIndex( KEvtId );
-	stmt.BindInt( paramIndex, aEventId );
-	
-	// Execute the Remove SQL statement
-	User::LeaveIfError( stmt.Exec() );
-	
-	stmt.Close();
-
-	EVTUIDEBUG( "- CEvtDatabase::DeleteActionL()" );
-    }
-    
-// ---------------------------------------------------------------------------
-// CEvtDatabase::SetObserver
-// ---------------------------------------------------------------------------
-//
-void CEvtDatabase::SetObserver( MEvtStorageDbObserver*      
-														aStorageDbObserver )
-    {
-	EVTUIDEBUG( "+ CEvtDatabase::SetObserver()" );
-    // Set the Observer to the database
-	iStorageDbObserver = aStorageDbObserver;
-	EVTUIDEBUG( "- CEvtDatabase::SetObserver()" );
-    } 
-
-// ---------------------------------------------------------------------------
-// CEvtDatabase::HandleDbChangedL
-// ---------------------------------------------------------------------------
-//
-void CEvtDatabase::HandleDbChangedL( )
-    {
-	EVTUIDEBUG( "+ CEvtDatabase::HandleDbChangedL()" );
-    
-    // If there is an observer to the database, notify it.
-	if( iStorageDbObserver )
-		{
-		iStorageDbObserver->HandleStorageDbChangedL( );
-		}
-	EVTUIDEBUG( "- CEvtDatabase::HandleDbChangedL()" );
-    } 
-    
-// End of File