diff -r 8173571d354e -r 1fc85118c3ae locationdataharvester/maptileservice/src/maptiledblookuptable.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationdataharvester/maptileservice/src/maptiledblookuptable.cpp Tue Aug 31 15:09:25 2010 +0300 @@ -0,0 +1,228 @@ +/* +* Copyright (c) 2010 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: +* Retrieving maptile path from lookup db implementation +* +*/ + +#include +#include +#include "maptiledblookuptable.h" + +// select all from +_LIT( KSelectAllFrom, "SELECT * FROM " ); + +// string 'where' +_LIT( KStringWhere, " WHERE " ); + +// string ' = ' +_LIT( KStringEqual, " = " ); + +// string 'And' +_LIT( KStringAnd, " AND " ); + + +_LIT(KQueryByMaptileState,"SELECT * FROM cntmaptilelookuptable WHERE cntuid = %d AND ( fetchingstatus = %d OR fetchingstatus = %d )"); + +// ----------------------------------------------------------------------------- +// CLookupMapTileDatabase::CLookupMapTileDatabase() +// Default constructor. +// ----------------------------------------------------------------------------- +// +CLookupMapTileDatabase::CLookupMapTileDatabase() +{ +} + +// ----------------------------------------------------------------------------- +// CLookupMapTileDatabase::~CLookupMapTileDatabase() +// Destructor. +// ----------------------------------------------------------------------------- +// +CLookupMapTileDatabase::~CLookupMapTileDatabase() +{ + + // close the database + iItemsDatabase.Close(); + + // close the file session + iFsSession.Close(); +} + +// ----------------------------------------------------------------------------- +// CLookupMapTileDatabase::~CLookupMapTileDatabase() +// Creates an object of this class and pushes to cleanup stack. +// ----------------------------------------------------------------------------- +// +CLookupMapTileDatabase* CLookupMapTileDatabase::NewLC( const TDesC& aLookupTableName ) +{ + + CLookupMapTileDatabase* self = new (ELeave) CLookupMapTileDatabase; + CleanupStack::PushL(self); + self->ConstructL( aLookupTableName ); + return self; +} + + +// ----------------------------------------------------------------------------- +// CLookupMapTileDatabase::NewL() +// Creates an object of this class. +// ----------------------------------------------------------------------------- +// +CLookupMapTileDatabase* CLookupMapTileDatabase::NewL( const TDesC& aLookupTableName ) +{ + CLookupMapTileDatabase* self = CLookupMapTileDatabase::NewLC( aLookupTableName ); + CleanupStack::Pop( self ); + return self; +} + + +// ----------------------------------------------------------------------------- +// CLookupMapTileDatabase::ConstructL() +// 2nd phase contructor. +// ----------------------------------------------------------------------------- +// +void CLookupMapTileDatabase::ConstructL( const TDesC& aLookupTableName ) +{ + + User::LeaveIfError( iFsSession.Connect() ); + + iDbFileName.Copy( KLookupDbPath ); + iDbFileName.Append( aLookupTableName ); + + iDatabaseExists = EFalse; + + if( BaflUtils::FileExists( iFsSession, iDbFileName ) ) + { + // database exists + iDatabaseExists = ETrue; + } +} + +// ----------------------------------------------------------------------------- +// CLookupMapTileDatabase::FindNumberOfAddressL() +// find the number of address associated with the aId. +// ----------------------------------------------------------------------------- +// +int CLookupMapTileDatabase::FindNumberOfAddressL( int& aId ) +{ + int count = 0; + + // Create a query to find the item. + TFileName queryBuffer; + queryBuffer.Format( KQueryByMaptileState,aId, + MapTileService::MapTileFetchingInProgress, + MapTileService::MapTileFetchingNetworkError ); + + TInt ret = iItemsDatabase.Open( iFsSession, iDbFileName ); + + if( ret != KErrNone ) + { + //if already opened , close and open again + iItemsDatabase.Close(); + User::LeaveIfError( iItemsDatabase.Open( iFsSession, iDbFileName ) ); + } + + User::LeaveIfError( iItemsDatabase.Begin() ); + // Create a view of the table with the above query. + RDbView myView; + myView.Prepare( iItemsDatabase, TDbQuery( queryBuffer ) ); + CleanupClosePushL( myView ); + myView.EvaluateAll(); + myView.FirstL(); + + + while (myView.AtRow()) + { + count++; + myView.NextL(); + } + + CleanupStack::PopAndDestroy( &myView ); // myView + + //Close the database + iItemsDatabase.Close(); + + return count; +} + +// ----------------------------------------------------------------------------- +// CLookupMapTileDatabase::FindEntryL() +// Finds an entry in the lookup table. +// ----------------------------------------------------------------------------- +// +void CLookupMapTileDatabase::FindEntryL( TLookupItem& aLookupItem ) +{ + + // used to check whether entry available or not + TBool entryAvailable = EFalse; + + if ( iDatabaseExists ) + { + + // Create a query to find the item. + TFileName queryBuffer; + queryBuffer.Copy( KSelectAllFrom ); + queryBuffer.Append( KMapTileLookupTable ); + queryBuffer.Append( KStringWhere ); + queryBuffer.Append( NCntColUid ); + queryBuffer.Append( KStringEqual ); + queryBuffer.AppendNum( aLookupItem.iUid ); + queryBuffer.Append( KStringAnd ); + queryBuffer.Append( NColSource ); + queryBuffer.Append( KStringEqual ); + queryBuffer.AppendNum( aLookupItem.iSource ); + + TInt ret = iItemsDatabase.Open( iFsSession, iDbFileName ); + + if( ret != KErrNone ) + { + //if already opened , close and open again + iItemsDatabase.Close(); + User::LeaveIfError( iItemsDatabase.Open( iFsSession, iDbFileName ) ); + } + User::LeaveIfError( iItemsDatabase.Begin() ); + // Create a view of the table with the above query. + RDbView myView; + myView.Prepare( iItemsDatabase, TDbQuery( queryBuffer ) ); + CleanupClosePushL( myView ); + myView.EvaluateAll(); + myView.FirstL(); + + if( myView.AtRow() ) + { + // Item found. get the details. + myView.GetL(); + if( aLookupItem.iUid == myView.ColUint( KColumnUid ) ) + { + aLookupItem.iFilePath.Copy( myView.ColDes16( KColumnFilePath ) ); + aLookupItem.iFetchingStatus = myView.ColUint( KColumnMapTileFetchingStatus ); + entryAvailable = ETrue; + } + } + + CleanupStack::PopAndDestroy( &myView ); // myView + + //Close the database + iItemsDatabase.Close(); + } + + //No entry found + if( !entryAvailable ) + { + User::Leave( KErrNotFound ); + } +} + +// End of file +