landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp118.cpp
branchRCL_3
changeset 44 2b4ea9893b66
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp118.cpp	Tue Aug 31 15:37:04 2010 +0300
@@ -0,0 +1,751 @@
+/*
+* Copyright (c) 2005 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: 
+*   ?description_line
+*
+*/
+
+
+//  INCLUDES
+#include "FT_CPosTp118.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLmDatabaseManager.h>
+#include <d32dbms.h>
+#include "FT_DatabaseUtility.h"
+
+//  CONSTANTS
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp118::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp118::CloseTest()
+    {
+	iLog->Log(_L("CloseTest"));
+	
+    TRAPD(err, RemoveAllLmDatabasesL());
+    if (err != KErrNone) iLog->Log(_L("RemoveAllLmDatabasesL() leaved"));
+    
+    TRAP(err, DeleteTp118FilesL());
+    if (err != KErrNone) iLog->Log(_L("DeleteTp118FilesL() leaved"));
+    
+    delete iDatabases;
+    iDatabases=NULL;
+    }
+       
+// ---------------------------------------------------------
+// CPosTp118::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp118::StartL()
+    {
+    TInt err = KErrNone;
+    // Remove all databases
+    RemoveAllLmDatabasesL();
+    
+    DeleteTp118FilesL();
+    TBuf<100> buf;
+    
+    CPosLandmarkDatabase* lmd = NULL;
+    	
+    iLog->Log(_L("1) Create a valid landmark db"));
+    // 1) Create a valid landmark db, it should be listed
+	FTDatabaseUtility::CreateDatabaseL(_L("c:TP118.ldb"));
+	
+	// 2) List an verify that db created in step 1 is listed
+	iLog->Log(_L("2) Verify that db created in step1 is listed:"));
+	CPosLmDatabaseManager* dbManager = CPosLmDatabaseManager::NewL();
+    CleanupStack::PushL(dbManager);
+	iDatabases = dbManager->ListDatabasesLC();
+	CleanupStack::Pop(iDatabases);
+
+	TInt res = VerifyList(iDatabases, _L("file://C:TP118.ldb"));
+	AssertTrueSecL(res, _L("file://C:TP118.LDB was not found"));
+	CleanupStack::PopAndDestroy(dbManager);
+
+	// 3) Create a valid landmark db, but without correct file extension
+	iLog->Log(_L("3) Create a valid landmark db, but without correct file extension"));
+	FTDatabaseUtility::CreateDatabaseL(_L("c:TP118_NoExtension"), EFalse);
+	dbManager = CPosLmDatabaseManager::NewL();
+    CleanupStack::PushL(dbManager);
+	
+	// 4) List all databases and verify that db created in step 3 is not listed
+	iLog->Log(_L("List all databases and verify that db created in step 3 is not listed"));
+	delete iDatabases; iDatabases=NULL;
+	iDatabases = dbManager->ListDatabasesLC();
+	CleanupStack::Pop(iDatabases);
+
+	res = VerifyList(iDatabases, _L("file://c:TP118_NoExtension"));
+	AssertTrueSecL(!res, _L("file://c:TP118_NoExtension should not have been found"));
+	CleanupStack::PopAndDestroy(dbManager);
+
+	// 5) Create lm db without correct secure id
+	iLog->Log(_L("5) Create lm db without correct secure id"));
+	FTDatabaseUtility::CreateDatabaseL(_L("c:TP118_WrongId.ldb"), ETrue, ETrue);
+	dbManager = CPosLmDatabaseManager::NewL();
+    CleanupStack::PushL(dbManager);
+    
+    // 6) List all databases and verify that db created in step 5 is not listed
+    iLog->Log(_L("6) List all databases and verify that db created in step 5 is not listed"));
+    delete iDatabases; iDatabases=NULL;
+	iDatabases = dbManager->ListDatabasesLC();
+	CleanupStack::Pop(iDatabases);
+	
+	res = VerifyList(iDatabases, _L("c:TP118_WrongId.ldb"));
+	AssertTrueSecL(!res, _L("file://c:TP118_WrongId.ldb should not have been found"));
+	CleanupStack::PopAndDestroy(dbManager);
+	
+	// 7 Create lm db with invalid landmarks tables
+	iLog->Log(_L("7) Create lm db with invalid landmarks tables"));
+	FTDatabaseUtility::CreateDatabaseL(_L("C:TP118_INVALIDTABLES.ldb"), ETrue, EFalse, ETrue);
+	dbManager = CPosLmDatabaseManager::NewL();
+    CleanupStack::PushL(dbManager);
+    
+    // 8) List all databases and verify that db created in step 7 is listed
+    iLog->Log(_L("8) List all databases and verify that db created in step 7 is listed"));
+    delete iDatabases; iDatabases=NULL;
+	iDatabases = dbManager->ListDatabasesLC();
+	CleanupStack::Pop(iDatabases);
+	res = VerifyList(iDatabases, _L("file://C:TP118_INVALIDTABLES.ldb"));
+	AssertTrueSecL(res, _L("file://C:TP118_INVALIDTABLES.ldb should have been found"));
+	CleanupStack::PopAndDestroy(dbManager);
+	
+	// CleanupStack::PopAndDestroy(dbManager);
+	// This causes DBMS to panic UTFW (this TestProgram)
+	// Adds landmarks but needed tables are already removed
+	// CreateLandmarksInDbL(_L("C:TP118_INVALIDTABLES.LDB"));
+	
+	/*
+	/////////////////////////////////////////////
+	// Add extra test here, set this db to default
+	iLog->Log(_L("SetDefaultDatabaseL"));
+    dbManager->SetDefaultDatabaseL(_L("C:TP118_INVALIDTABLES.LDB"));
+	CleanupStack::PopAndDestroy(dbManager);
+    
+    //  Try to open defaultdb which is the db created in step18
+    // Check that the default db is re-created when it is corrupt
+    CPosLandmarkDatabase* lmdb = NULL;
+    TRAP(err, lmdb = CPosLandmarkDatabase::OpenL());
+    if (err == KErrNone)
+    	{
+    	CleanupStack::PushL(lmdb);
+        CheckLandmarkDbL(lmdb);
+        CleanupStack::PopAndDestroy(lmdb);
+        //This causes DBMS to panic UTFW (this TestProgram)
+	    // Adds landmarks but needed tables are already removed
+        CreateLandmarksInDbL(_L("C:TP118_INVALIDTABLES.LDB"));
+    	}
+    else
+    	{
+    	LogErrorAndLeave(_L("OpenL should not leave with err"), err);
+    	}
+    */
+	/////////////////////////////////////////////
+
+	// 9) Try to open db created in step7
+	iLog->Log(_L("9) Open db created in step 7"));
+	lmd = CPosLandmarkDatabase::OpenL(_L("file://C:TP118_INVALIDTABLES.ldb"));
+	CleanupStack::PushL(lmd);
+	CheckLandmarkDbL(lmd);
+	CleanupStack::PopAndDestroy(lmd);
+
+    // 10) Drop table in db
+    iLog->Log(_L("10) Create db and then drop tables in db"));
+    dbManager=CPosLmDatabaseManager::NewL();
+    CleanupStack::PushL(dbManager);
+    
+    _LIT(KDropTableLmDb, "C:TP118_DROPTABLELMDB.ldb");
+    HPosLmDatabaseInfo* dbInfo = HPosLmDatabaseInfo::NewLC(KDropTableLmDb);
+    dbManager->CreateDatabaseL(*dbInfo);
+    CleanupStack::PopAndDestroy(dbInfo);
+    
+    CreateLandmarksInDbL(KDropTableLmDb);
+    DropTableL(KDropTableLmDb, KPosLmLandmarkTable);
+    
+    delete iDatabases; iDatabases=NULL;
+    iDatabases = dbManager->ListDatabasesLC();
+    CleanupStack::Pop(iDatabases);
+    res = VerifyList(iDatabases, _L("file://C:TP118_DROPTABLELMDB.ldb"));
+    AssertTrueSecL(res, _L("C:TP118_DropTableLmDb.ldb was not found"));
+    CleanupStack::PopAndDestroy(dbManager);
+
+    // 11) Try to open db created in step10
+	iLog->Log(_L("11) Open db created in step 10"));
+	lmd = CPosLandmarkDatabase::OpenL(_L("file://C:TP118_DROPTABLELMDB.ldb"));
+
+	// Error when opening db
+	CleanupStack::PushL(lmd);
+	TRAP(err, CheckLandmarkDbL(lmd));
+	AssertTrueSecL(err == KErrNotFound, _L("11) CheckLandmarkDbL did not leave with KErrNotFound"));
+
+	CleanupStack::PopAndDestroy(lmd);
+	// Try to add landmarks to this db
+	// Leaves with KErrNotFound
+	//CreateLandmarksInDbL(_L("C:TP118_DROPTABLELMDB.LDB"),1);
+    
+    // 12) DropIndexL
+    iLog->Log(_L("Step12: DropIndexL"));
+    dbManager=CPosLmDatabaseManager::NewL();
+    CleanupStack::PushL(dbManager);
+    
+    _LIT(KTP118_DROPINDEXLMDB_LDB, "C:TP118_DROPINDEXLMDB.ldb");
+    HPosLmDatabaseInfo* dbInfoDrop = HPosLmDatabaseInfo::NewLC(KTP118_DROPINDEXLMDB_LDB);
+    dbManager->CreateDatabaseL(*dbInfoDrop);
+    CleanupStack::PopAndDestroy(dbInfoDrop);
+    
+    CreateLandmarksInDbL(_L("C:TP118_DROPINDEXLMDB.ldb"));
+    iLog->Log(_L("12) DropIndex"));
+    DropIndexL(_L("C:TP118_DROPINDEXLMDB.LDB"), KPosLmCategoryTable, KPosLmGlobalCategoryIdIndex);   
+    CleanupStack::PopAndDestroy(dbManager);
+    
+    // 13) Try to open db created in step12
+	iLog->Log(_L("13) Open db created in step 12"));
+	lmd = CPosLandmarkDatabase::OpenL(_L("C:TP118_DROPINDEXLMDB.ldb"));
+	
+    CleanupStack::PushL(lmd);
+	CheckLandmarkDbL(lmd);
+	CleanupStack::PopAndDestroy(lmd);
+    // Try to add landmarks to this db
+	CreateLandmarksInDbL(_L("C:TP118_DROPINDEXLMDB.LDB"), 1);
+	
+	// 14)
+    iLog->Log(_L("14) DropIndex"));
+    dbManager=CPosLmDatabaseManager::NewL();
+    CleanupStack::PushL(dbManager);
+    
+    _LIT(KTP118_DROPINDEXLMDB2_LDB, "C:TP118_DROPINDEXLMDB2.ldb");
+    HPosLmDatabaseInfo* dbInfoDrop2 = HPosLmDatabaseInfo::NewLC(KTP118_DROPINDEXLMDB2_LDB);
+    dbManager->CreateDatabaseL(*dbInfoDrop2);
+    CleanupStack::PopAndDestroy(dbInfoDrop2);
+    
+    CreateLandmarksInDbL(_L("C:TP118_DROPINDEXLMDB2.ldb"));
+    DropIndexL(_L("C:TP118_DROPINDEXLMDB2.LDB"), KPosLmLandmarkTable, KPosLmLandmarkIdIndex);
+    CleanupStack::PopAndDestroy(dbManager);
+    
+    // 15) Try to open db created in step13
+	iLog->Log(_L("15) Open db created in step 14"));
+	lmd = CPosLandmarkDatabase::OpenL(_L("C:TP118_DROPINDEXLMDB2.ldb"));
+	
+    CleanupStack::PushL(lmd);
+	CheckLandmarkDbL(lmd);
+	CleanupStack::PopAndDestroy(lmd);
+	// Try to add landmarks to this db
+	CreateLandmarksInDbL(_L("C:TP118_DROPINDEXLMDB2.ldb"), 1);
+	
+	////////////
+    // 16) Create an ordinary database with some landmarks and then remove some parts of the binary file
+    // Create db by manually removing some parts with notepad
+    /*
+    //Use this part to create db "TP118HalfLmDb.ldb" containing some landmarks, then use notepad to remove
+    // some parts from physical file 
+    dbManager=CPosLmDatabaseManager::NewL();
+    CleanupStack::PushL(dbManager);
+    dbManager->CreateDatabaseL(_L("TP118HalfLmDb.ldb"));
+    CreateLandmarksInDbL(_L("TP118HalfLmDb.ldb"));
+    CleanupStack::PopAndDestroy(dbManager);
+    */
+    // Use corrupted file
+    iLog->Log(_L("16) Use corrupted file"));
+    CopyTestDbFileL(_L("TP118HALFLMDB_2.ldb"));
+    
+    dbManager = CPosLmDatabaseManager::NewL();
+    CleanupStack::PushL(dbManager);
+    delete iDatabases; iDatabases = NULL;
+    iDatabases = dbManager->ListDatabasesLC();
+    CleanupStack::Pop(iDatabases);
+
+    res = VerifyList(iDatabases, _L("file://C:TP118HALFLMDB_2.ldb"));
+	AssertTrueSecL(res, _L("file://C:TP118HALFLMDB_2.LDB should have been found"));
+    CleanupStack::PopAndDestroy(dbManager);
+    
+    // 17) Try to open db created in step16m it should not be possible
+    // Before it returned KErrCorrupt(?) but now with Mars wk21 SDK it returns KErrNotSupported
+    CPosLandmarkDatabase* someLmDb = NULL;
+    TRAP(err, someLmDb = CPosLandmarkDatabase::OpenL(_L("TP118HalfLmDb_2.ldb")));
+    if (err == KErrNone)
+    	{
+    	CleanupStack::PushL(someLmDb);
+    	ExecuteAndDeleteLD(someLmDb->InitializeL());
+    	CleanupStack::PopAndDestroy(someLmDb);
+        AssertTrueSecL(EFalse,_L("OpenL should leave with error"));
+    	}
+    else
+        {
+        buf.Format(_L("OpenL leaved with %d"), err);
+        iLog->Log(buf);
+        }
+    
+    // 18) Use same file as in 16 and set this file to default db
+    iLog->Log(_L("Use same file as in 16 and set this file to default db"));
+    CopyTestDbFileL(_L("TP118HALFLMDB_2.LDB"));
+    dbManager = CPosLmDatabaseManager::NewL();
+    CleanupStack::PushL(dbManager);
+    
+    iLog->Log(_L("SetDefaultDatabaseL"));
+    dbManager->SetDefaultDatabaseUriL(_L("Tp118HALFLMDB_2.ldb"));
+	CleanupStack::PopAndDestroy(dbManager);
+    
+    // 19) Try to open defaultdb which is the db created in step18
+    // Before Mars wk21 SDK the default db is re-created when it is corrupt
+    // but now instead KErrNotSUpported is returned
+    iLog->Log(_L("Try to open defaultdb which is the db created in step18"));
+    TRAP(err, someLmDb = CPosLandmarkDatabase::OpenL());
+    
+    if (err == KErrNone)
+    	{
+    	CleanupStack::PushL(someLmDb);
+        CheckLandmarkDbL(someLmDb);
+        CleanupStack::PopAndDestroy(someLmDb);
+        // Try to add landmarks to this db
+	    CreateLandmarksInDbL(_L("Tp118HALFLMDB_2.ldb"));
+    	}
+    else
+    	{
+    	//LogErrorAndLeave(_L("OpenL should not leave with err"), err);
+    	buf.Format(_L("open defaultdb leaved with %d"), err);
+    	iLog->Log(buf);
+    	}
+	}
+
+// ---------------------------------------------------------
+// CPosTp118::CheckLandmarkDbL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp118::CheckLandmarkDbL(CPosLandmarkDatabase* aDb)
+    {
+    iLog->Log(_L("CheckLandmarkDbL"));
+    
+    if (aDb->IsInitializingNeeded()) ExecuteAndDeleteLD(aDb->InitializeL());
+    
+    CPosLmItemIterator* iter = aDb->LandmarkIteratorL();
+    CleanupStack::PushL(iter);
+    
+    TInt size = iter->NumOfItemsL();
+    TBuf<100> buf;
+    buf.Format(_L("DB contains %d nr of landmarks"), size);
+    iLog->Log(buf);
+    
+    TPosLmItemId id = iter->NextL();
+
+    while (id != KPosLmNullItemId)
+        {
+        CPosLandmark* lm = aDb->ReadLandmarkLC(id);
+        TPtrC name;
+        lm->GetLandmarkName(name);
+        // Debugging iLog->Log(name);
+        id = iter->NextL();
+        CleanupStack::PopAndDestroy(lm);
+        }
+        
+    // Try to get an non existing landmark
+    CPosLandmark* lm = NULL;
+    TRAPD(err, lm = aDb->ReadLandmarkLC(123456));
+    if (err != KErrNotFound) 
+        {
+        CleanupStack::PopAndDestroy(lm);
+        CleanupStack::PopAndDestroy(iter);
+        AssertTrueSecL(EFalse,_L("ReadLandmarkLC should leave with KErrNotFound"));
+        }
+    
+    CleanupStack::PopAndDestroy(iter);
+    
+    // Check categories
+    CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*aDb);
+    CleanupStack::PushL(categoryManager);
+	CPosLmItemIterator* catIter = categoryManager->CategoryIteratorL();
+	CleanupStack::PushL(catIter);
+	
+	TInt catCount = catIter->NumOfItemsL();
+
+	buf.Format(_L("Found %d nr of categories items in db"), catCount);
+	iLog->Log(buf);
+
+	id = catIter->NextL();
+	while (id != KPosLmNullItemId)
+    	{
+    	CPosLandmarkCategory* cat = categoryManager->ReadCategoryLC(id);
+    	TPtrC name;
+    	cat->GetCategoryName(name);
+    	// Debugging iLog->Log(name);
+    	CleanupStack::PopAndDestroy(cat);
+    	id = catIter->NextL();
+    	}
+    
+    CleanupStack::PopAndDestroy(catIter);
+    CleanupStack::PopAndDestroy(categoryManager);
+    }
+    
+// ---------------------------------------------------------
+// CPosTp118::DeleteTp118FilesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp118::DeleteTp118FilesL()
+	{
+	iLog->Log(_L("DeleteTp118FilesL"));
+    RFs fs;
+    TInt err = fs.Connect();
+    AssertTrueSecL(err == KErrNone, _L("fs.Connect returned with error"), err);
+    CleanupClosePushL(fs);
+
+    CFileMan* fileMan = CFileMan::NewL(fs);
+    CleanupStack::PushL(fileMan);
+    
+    // delete all TP118 files
+    err = fileMan->Delete(_L("c:\\private\\100012a5\\*TP118*.*"));
+    AssertTrueSecL(err == KErrNone || err == KErrNotFound, _L("CFileMan could not delete files1"), err);
+    
+    err = fileMan->Delete(_L("c:\\private\\100012a5\\*TP118*"));
+    AssertTrueSecL(err == KErrNone || err == KErrNotFound, _L("CFileMan could not delete files2"), err);
+        
+    CleanupStack::PopAndDestroy(1); //fileMan
+    CleanupStack::PopAndDestroy(1); //fs
+    iLog->Log(_L("DeleteTp118FilesL Done"));
+    
+	}
+	
+// ---------------------------------------------------------
+// CPosTp118::CreateLandmarksInDbL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp118::CreateLandmarksInDbL(const TDesC& aDbName, TInt aIndex)
+	{
+	iLog->Log(_L("CreateLandmarksInDbL"));
+	const TInt KNrOfLandmarks = 50;
+	const TInt KNrOfCategories = 10;
+	
+	CPosLandmarkDatabase* lmd = CPosLandmarkDatabase::OpenL(aDbName);
+	CleanupStack::PushL(lmd);
+	
+    ExecuteAndDeleteLD(lmd->InitializeL());
+    
+    CPosLmCategoryManager* cm = CPosLmCategoryManager::NewL(*lmd);
+    CleanupStack::PushL(cm);
+    
+    RArray<TPosLmItemId> arr;
+   	CleanupClosePushL(arr);
+    TInt i=0;
+    TBuf<150> buf;
+    
+    // Create categories
+   	for (i=0; i<KNrOfCategories; i++)
+   		{
+    	CPosLandmarkCategory* category = CPosLandmarkCategory::NewLC();
+    	buf.Zero();
+    	buf.Format(_L("VeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongCategoryName%d_%d"), i, aIndex);
+    	
+    	category->SetCategoryNameL(buf);
+    	TPosLmItemId id=0;
+    	TInt err = KErrLocked;
+    	while (err == KErrLocked)
+    	    {
+    	    TRAP(err, id = cm->AddCategoryL(*category));
+    	    }
+    	arr.Append(id);
+    	CleanupStack::PopAndDestroy(category);
+   		}
+
+	// Create landmarks and attach every category to every landmark
+    for (i=0;i<KNrOfLandmarks;i++)
+    	{
+    	buf.Zero();
+    	buf.Format(_L("VeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongLandmarkName%d_%d"), i, aIndex);
+    	CPosLandmark* lm1 = CPosLandmark::NewLC();
+    	lm1->SetLandmarkNameL(buf);
+    	lm1->SetLandmarkDescriptionL(_L("SomeVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongDescription"));
+    	for (TInt j=0;j<arr.Count();j++)
+    		{
+    		lm1->AddCategoryL(arr[j]);
+    		}
+   		TInt err = KErrLocked;
+   		while (err==KErrLocked)
+   		    {
+   		    TRAP(err, lmd->AddLandmarkL(*lm1));
+   		    }
+   		
+   		CleanupStack::PopAndDestroy(lm1);
+   		}
+   		   	
+    CleanupStack::PopAndDestroy(&arr);
+    
+    CleanupStack::PopAndDestroy(cm);
+    
+    ExecuteAndDeleteLD(lmd->CompactL());
+    CleanupStack::PopAndDestroy(lmd);
+    
+	}
+	
+// ---------------------------------------------------------
+// CPosTp118::VerifyList
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TBool CPosTp118::VerifyList(CDesCArray* aList, const TDesC& aDbName)
+	{
+	TBool found = EFalse;
+	TInt count = aList->Count();
+	TBuf<100> buf;
+	buf.Format(_L("Found %d nr of dbs"), count);
+	iLog->Log(buf);
+	for (TInt i=0;i<count;i++)
+		{
+		iLog->Log((*aList)[i]);
+		if ((*aList)[i].Compare(aDbName) == KErrNone)
+			{
+			found = ETrue;
+			}
+		}
+		return found;
+	}
+    
+// ---------------------------------------------------------
+// CPosTp118::DropTableL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp118::DropTableL(const TDesC& aDbName, const TDesC& aTable)
+    {
+    /*
+    // Incremental
+    iLog->Log(_L("DropTableL"));
+    RDbs dbSession;
+    CleanupClosePushL(dbSession);
+    User::LeaveIfError(dbSession.Connect());
+
+    RDbNamedDatabase db;
+    CleanupClosePushL(db);
+    TBuf<100> buf;
+    
+    TInt err = db.Open(dbSession, aDbName ,KPosLmDbSecureFormat);
+    if (err != KErrNone) LogErrorAndLeave(_L("Database could not be opened"), err);
+
+	RDbIncremental dbInc;
+	CleanupClosePushL(dbInc);
+
+    TInt step = 100;
+    err = dbInc.DropTable(db, aTable, step);
+    if (err != KErrNone) LogErrorAndLeave(_L("DropTable could not be performed"), err);
+    
+    while (step > 50)
+    	{
+    	buf.Format(_L("ProgressStep %d "), step);
+    	iLog->Log(buf);
+    	dbInc.Next(step);
+    	}
+    	
+    dbInc.Close();
+    db.Close();
+    	
+    CleanupStack::PopAndDestroy(&dbInc);
+    CleanupStack::PopAndDestroy(&db);
+    CleanupStack::PopAndDestroy(&dbSession);
+    */
+    
+    iLog->Log(_L("DropTableL"));
+    RDbs dbSession;
+    CleanupClosePushL(dbSession);
+    User::LeaveIfError(dbSession.Connect());
+
+    RDbNamedDatabase db;
+    CleanupClosePushL(db);
+    TBuf<100> buf;
+    
+    TInt err = db.Open(dbSession, aDbName ,KPosLmDbSecureFormat);
+    AssertTrueSecL(err == KErrNone, _L("Database could not be opened"), err);
+    err = db.DropTable(aTable);
+    AssertTrueSecL(err == KErrNone, _L("DropTable could not be performed"), err);
+    db.Close();
+    	
+    CleanupStack::PopAndDestroy(&db);
+    CleanupStack::PopAndDestroy(&dbSession);
+
+    }
+
+// ---------------------------------------------------------
+// CPosTp118::AlterTableL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp118::AlterTableL(const TDesC& aDbName)
+    {
+    iLog->Log(_L("AlterTableL"));
+    // Incremental
+    RDbs dbSession;
+    CleanupClosePushL(dbSession);
+    User::LeaveIfError(dbSession.Connect());
+
+    RDbNamedDatabase db;
+    CleanupClosePushL(db);
+    
+    TBuf<100> buf;
+    
+    TInt err = db.Open(dbSession, aDbName ,KPosLmDbSecureFormat);
+    AssertTrueSecL(err == KErrNone, _L("Database could not be opened"), err);
+
+	RDbIncremental dbInc;
+	CleanupClosePushL(dbInc);
+	    
+    
+    CDbColSet* newColumns = CDbColSet::NewLC();
+
+    TDbCol col(KPosLmIconIdCol, EDbColUint32);
+    col.iAttributes = col.EAutoIncrement;
+    newColumns->AddL(col);
+
+    newColumns->AddL(TDbCol(KPosLmIconPathCol, EDbColLongText, KMaxFileName));
+    //User::LeaveIfError(aDb.CreateTable(KPosLmIconTable, *columns));
+    
+    TInt step = 100;
+    err = dbInc.AlterTable(db, KPosLmIconTable, *newColumns, step);
+    if (err != KErrNone) 
+    {
+    TBuf<100> buf;
+    buf.Format(_L("AlterTable could not be performed, err %d"), err);
+    iLog->Log(buf);
+    }
+    else
+    {
+    
+    while (step > 1)
+    	{
+    	buf.Format(_L("ProgressStep %d "), step);
+    	iLog->Log(buf);
+    	dbInc.Next(step);
+    	}
+    }	
+    dbInc.Close();
+    db.Close();
+    
+    CleanupStack::PopAndDestroy(newColumns);	
+    CleanupStack::PopAndDestroy(&dbInc);
+    CleanupStack::PopAndDestroy(&db);
+    CleanupStack::PopAndDestroy(&dbSession);
+    /*
+    
+    RDbs dbSession;
+    CleanupClosePushL(dbSession);
+    User::LeaveIfError(dbSession.Connect());
+
+    RDbNamedDatabase db;
+    CleanupClosePushL(db);
+    
+    TBuf<100> buf;
+    
+    TInt err = db.Open(dbSession, aDbName ,KPosLmDbSecureFormat);
+    if (err != KErrNone) LogErrorAndLeave(_L("Database could not be opened"), err);
+    
+    
+    CDbColSet* newColumns = CDbColSet::NewLC();
+
+    TDbCol col(KPosLmIconIdCol, EDbColUint32);
+    col.iAttributes = col.EAutoIncrement;
+    newColumns->AddL(col);
+
+    newColumns->AddL(TDbCol(KPosLmIconPathCol, EDbColLongText, KMaxFileName));
+    //User::LeaveIfError(aDb.CreateTable(KPosLmIconTable, *columns));
+    
+    TInt step = 100;
+    err = db.AlterTable(KPosLmIconTable, *newColumns);
+    if (err != KErrNone) 
+        {
+        TBuf<100> buf;
+        buf.Format(_L("AlterTable could not be performed, err %d"), err);
+        iLog->Log(buf);
+        }
+
+    db.Close();
+    
+    CleanupStack::PopAndDestroy(newColumns);	
+    CleanupStack::PopAndDestroy(&db);
+    CleanupStack::PopAndDestroy(&dbSession);
+    */
+    }
+    
+        
+// ---------------------------------------------------------
+// CPosTp118::DropIndexL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp118::DropIndexL(const TDesC& aDbName, const TDesC& aTable, const TDesC& aIndex)
+    {
+    iLog->Log(_L("DropIndexL()"));
+    
+    //Incremental
+    RDbs dbSession;
+    CleanupClosePushL(dbSession);
+    User::LeaveIfError(dbSession.Connect());
+
+    RDbNamedDatabase db;
+    CleanupClosePushL(db);
+    TBuf<100> buf;
+    
+    TInt err = db.Open(dbSession, aDbName ,KPosLmDbSecureFormat);
+    AssertTrueSecL(err == KErrNone, _L("Database could not be opened"), err);
+
+	RDbIncremental dbInc;
+	CleanupClosePushL(dbInc);
+
+    TInt step = 100;
+    err = dbInc.DropIndex(db, aIndex, aTable, step);
+    AssertTrueSecL(err == KErrNone, _L("DropIndex could not be performed"), err);
+    
+    while (step  > 1)
+    	{
+    	buf.Format(_L("ProgressStep %d "), step);
+    	iLog->Log(buf);
+    	dbInc.Next(step);
+    	}
+    	
+    CleanupStack::PopAndDestroy(&dbInc);
+    CleanupStack::PopAndDestroy(&db);
+    CleanupStack::PopAndDestroy(&dbSession);
+    
+    /*
+    RDbs dbSession;
+    CleanupClosePushL(dbSession);
+    User::LeaveIfError(dbSession.Connect());
+
+    RDbNamedDatabase db;
+    CleanupClosePushL(db);
+    TBuf<100> buf;
+    
+    TInt err = db.Open(dbSession, aDbName ,KPosLmDbSecureFormat);
+    if (err != KErrNone) LogErrorAndLeave(_L("Database could not be opened"), err);
+
+    TInt step = 100;
+    err = db.DropIndex(aIndex, aTable);
+    if (err != KErrNone) LogErrorAndLeave(_L("DropIndex could not be performed"), err);
+    	
+    CleanupStack::PopAndDestroy(&db);
+    CleanupStack::PopAndDestroy(&dbSession);
+    */
+    }
+
+//  End of File