diff -r b12ea03c50a3 -r 834e27cad510 landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_DatabaseUtility.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_DatabaseUtility.cpp Tue Jul 06 14:44:11 2010 +0300 @@ -0,0 +1,353 @@ +/* +* 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 the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* ?description_line +* +*/ + + +// INCLUDE FILES +#include +#include "FT_DatabaseUtility.h" + +#include + +#include +// CONSTANTS + +// ============================ MEMBER FUNCTIONS =============================== + +// Code below taken from EPos_PosLmDatabaseManager.cpp +// ----------------------------------------------------------------------------- +// FTDatabaseUtility::CreateDatabaseL +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void FTDatabaseUtility::CreateDatabaseL(const TDesC& aDbPath, TBool aReplaceDatabase, TBool aWrongId, TBool aCreateInvalidIndex) + { + RDbs dbSession; + CleanupClosePushL(dbSession); + + User::LeaveIfError(dbSession.Connect()); + + TPtrC dbPath(aDbPath); + + + RDbNamedDatabase db; + CleanupClosePushL(db); + + + TUid KPosSecureUidWrongId = { 0x10204058 }; + _LIT(KWrongIdString, "secure[10204058]"); + + if (aReplaceDatabase) + { + TInt err =KErrNone; + + if (!aWrongId) err = dbSession.DeleteDatabase(dbPath, KPosLmDbSecureUid); + else err = dbSession.DeleteDatabase(dbPath, KPosSecureUidWrongId); + + if (err == KErrNone || err == KErrNotFound) + { + if (!aWrongId) User::LeaveIfError(db.Create(dbSession, dbPath, KPosLmDbSecureFormat)); + else User::LeaveIfError(db.Create(dbSession, dbPath, KWrongIdString)); + } + else + { + User::Leave(err); + } + } + else + { + if (!aWrongId) + { + User::LeaveIfError(db.Create(dbSession, dbPath, KPosLmDbSecureFormat)); + + } + else User::LeaveIfError(db.Create(dbSession, dbPath, KWrongIdString)); + } + + CreateTablesL(db, aCreateInvalidIndex); + + CreateIndexesL(db); + + SetCounterToOneL(db, KPosLmLandmarkTable); + SetCounterToOneL(db, KPosLmCategoryTable); + + // The settings table is created last so that a database can be validated + // when opening it (there will be a check for language there which is a + // part of the settings table). + CreateSettingsTableL(db); + + CleanupStack::PopAndDestroy(2, &dbSession); // &db + } + +// ----------------------------------------------------------------------------- +// FTDatabaseUtility::CreateTablesL +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void FTDatabaseUtility::CreateTablesL( + RDbNamedDatabase& aDb, TBool aCreateInvalidIndex) + { + CreateLandmarkTableL(aDb, aCreateInvalidIndex); + CreateLandmarkFieldTableL(aDb); + CreateCategoryTableL(aDb, aCreateInvalidIndex); + CreateLmCategoryTableL(aDb); + CreateIconTableL(aDb); + + // Do not create settings table here. This is created in the end so that the + // database can be validated when opening it. + } + +// ----------------------------------------------------------------------------- +// FTDatabaseUtility::CreateLandmarkTableL +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void FTDatabaseUtility::CreateLandmarkTableL( + RDbNamedDatabase& aDb, TBool aCreateInvalidIndex) + { + CDbColSet* columns = CDbColSet::NewLC(); + + TDbCol col(KPosLmLandmarkIdCol, EDbColUint32); + col.iAttributes = col.EAutoIncrement; + columns->AddL(col); + + columns->AddL(TDbCol(KPosLmLatitudeCol, EDbColReal64)); + columns->AddL(TDbCol(KPosLmLongitudeCol, EDbColReal64)); + columns->AddL(TDbCol(KPosLmAltitudeCol, EDbColReal32)); + + // Dont create the following tables when creating invalid table + if (!aCreateInvalidIndex) + { + columns->AddL(TDbCol(KPosLmHorizAccCol, EDbColReal32)); + columns->AddL(TDbCol(KPosLmVertAccCol, EDbColReal32)); + columns->AddL(TDbCol(KPosLmCoverageRadiusCol, EDbColReal32)); + columns->AddL(TDbCol(KPosLmIconIdCol, EDbColUint32)); + columns->AddL(TDbCol(KPosLmIconPicNrCol, EDbColInt32)); + columns->AddL(TDbCol(KPosLmMaskPicNrCol, EDbColInt32)); + columns->AddL(TDbCol(KPosLmNameCol, EDbColLongText, + KPosLmMaxTextFieldLength)); + } + + columns->AddL(TDbCol(KPosLmNDescCol, EDbColLongText, + KPosLmMaxDescriptionLength)); + + User::LeaveIfError(aDb.CreateTable(KPosLmLandmarkTable, *columns)); + CleanupStack::PopAndDestroy(columns); + } + +// ----------------------------------------------------------------------------- +// FTDatabaseUtility::CreateLandmarkFieldTableL +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void FTDatabaseUtility::CreateLandmarkFieldTableL( + RDbNamedDatabase& aDb) + { + CDbColSet* columns = CDbColSet::NewLC(); + + TDbCol col(KPosLmLandmarkIdCol, EDbColUint32); + col.iAttributes = col.ENotNull; + columns->AddL(TDbCol(col)); + + TDbCol col2(KPosLmFieldTypeCol, EDbColUint16); + col2.iAttributes = col2.ENotNull; + columns->AddL(col2); + + columns->AddL(TDbCol(KPosLmFieldStringCol, EDbColLongText, + KPosLmMaxTextFieldLength)); + + User::LeaveIfError(aDb.CreateTable(KPosLmLandmarkFieldTable, *columns)); + CleanupStack::PopAndDestroy(columns); + } + +// ----------------------------------------------------------------------------- +// FTDatabaseUtility::CreateCategoryTableL +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void FTDatabaseUtility::CreateCategoryTableL( + RDbNamedDatabase& aDb, TBool aCreateInvalidIndex) + { + CDbColSet* columns = CDbColSet::NewLC(); + + TDbCol col(KPosLmCategoryIdCol, EDbColUint32); + col.iAttributes = col.EAutoIncrement; + columns->AddL(col); + + columns->AddL(TDbCol(KPosLmGlobalCategoryIdCol, EDbColUint16)); + columns->AddL(TDbCol(KPosLmIconIdCol, EDbColUint32)); + columns->AddL(TDbCol(KPosLmIconPicNrCol, EDbColInt32)); + columns->AddL(TDbCol(KPosLmMaskPicNrCol, EDbColInt32)); + columns->AddL(TDbCol(KPosLmCategoryNameCol, EDbColText, + KPosLmMaxCategoryNameLength)); + + // Dont create the following tables when creating invalid table + if (!aCreateInvalidIndex) + { + columns->AddL(TDbCol(KPosLmCategoryNameModifiedCol, EDbColBit)); + } + + User::LeaveIfError(aDb.CreateTable(KPosLmCategoryTable, *columns)); + CleanupStack::PopAndDestroy(columns); + } + +// ----------------------------------------------------------------------------- +// FTDatabaseUtility::CreateLmCategoryTableL +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void FTDatabaseUtility::CreateLmCategoryTableL( + RDbNamedDatabase& aDb) + { + CDbColSet* columns = CDbColSet::NewLC(); + + TDbCol col(KPosLmLandmarkIdCol, EDbColUint32); + col.iAttributes = col.ENotNull; + columns->AddL(col); + + TDbCol col2(KPosLmCategoryIdCol, EDbColUint32); + col2.iAttributes = col2.ENotNull; + columns->AddL(col2); + + User::LeaveIfError(aDb.CreateTable(KPosLmLandmarkCategoryTable, *columns)); + CleanupStack::PopAndDestroy(columns); + } + +// ----------------------------------------------------------------------------- +// FTDatabaseUtility::CreateIconTableL +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void FTDatabaseUtility::CreateIconTableL( + RDbNamedDatabase& aDb) + { + CDbColSet* columns = CDbColSet::NewLC(); + + TDbCol col(KPosLmIconIdCol, EDbColUint32); + col.iAttributes = col.EAutoIncrement; + columns->AddL(col); + + columns->AddL(TDbCol(KPosLmIconPathCol, EDbColLongText, KMaxFileName)); + + User::LeaveIfError(aDb.CreateTable(KPosLmIconTable, *columns)); + CleanupStack::PopAndDestroy(columns); + } + +// ----------------------------------------------------------------------------- +// FTDatabaseUtility::CreateSettingsTableL +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void FTDatabaseUtility::CreateSettingsTableL( + RDbNamedDatabase& aDb) + { + CDbColSet* columns = CDbColSet::NewLC(); + + columns->AddL(TDbCol(KPosLmLanguageCol, EDbColInt32)); + columns->AddL(TDbCol(KPosLmInitFlagCol, EDbColInt32)); + + User::LeaveIfError(aDb.CreateTable(KPosLmSettingsTable, *columns)); + CleanupStack::PopAndDestroy(columns); + } + +// ----------------------------------------------------------------------------- +// FTDatabaseUtility::CreateIndexesL +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void FTDatabaseUtility::CreateIndexesL( + RDbNamedDatabase& aDb) + { + CreateIndexL(aDb, KPosLmLandmarkIdIndex, KPosLmLandmarkTable, + KPosLmLandmarkIdCol, ETrue); + CreateIndexL(aDb, KPosLmCategoryIdIndex, KPosLmCategoryTable, + KPosLmCategoryIdCol, ETrue); + CreateIndexL(aDb, KPosLmGlobalCategoryIdIndex, KPosLmCategoryTable, + KPosLmGlobalCategoryIdCol, EFalse); + CreateIndexL(aDb, KPosLmCategoryNameIndex, KPosLmCategoryTable, + KPosLmCategoryNameCol, ETrue); + CreateIndexL(aDb, KPosLmIconIdIndex, KPosLmIconTable, + KPosLmIconIdCol, ETrue); + } + +// ----------------------------------------------------------------------------- +// FTDatabaseUtility::CreateIndexL +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void FTDatabaseUtility::CreateIndexL( + RDbNamedDatabase& aDb, + const TDesC& aIndex, + const TDesC& aTable, + const TDesC& aColumn, + TBool aUnique) + { + CDbKey* keys = CDbKey::NewLC(); + keys->AddL(TDbKeyCol(aColumn)); + + if (aUnique) + { + keys->MakeUnique(); + } + + User::LeaveIfError(aDb.CreateIndex(aIndex, aTable, *keys)); + CleanupStack::PopAndDestroy(keys); + } + +// ----------------------------------------------------------------------------- +// FTDatabaseUtility::SetCounterToOneL +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void FTDatabaseUtility::SetCounterToOneL( + RDbNamedDatabase& aDb, + const TDesC& aTable) + { + HBufC* sql = HBufC::NewLC(KPosLmSqlStatementMaxLen); + sql->Des().Format(KPosLmSqlSelect, &KPosLmSqlAll, &aTable); + + RDbView view; + CleanupClosePushL(view); + User::LeaveIfError(view.Prepare(aDb, TDbQuery(*sql), + TDbWindow::EUnlimited)); + + view.InsertL(); + view.PutL(); + + if (!view.FirstL()) + { + User::Leave(KErrGeneral); + } + + view.DeleteL(); + + CleanupStack::PopAndDestroy(2, sql); //&view + } + + +// End of File