--- /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 <f32file.h>
+#include "FT_DatabaseUtility.h"
+
+#include <D32DBMS.H>
+
+#include <EPos_Landmarks.h>
+// 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