diff -r 000000000000 -r 667063e416a2 landmarks/locationlandmarks/internalservices/inc/EPos_CPosLmLocalDbAccess.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/landmarks/locationlandmarks/internalservices/inc/EPos_CPosLmLocalDbAccess.h Tue Feb 02 01:06:48 2010 +0200 @@ -0,0 +1,331 @@ +/* +* Copyright (c) 2002-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: Class that provides access to landmark databases. +* +* +*/ + + +#ifndef CPOSLMLOCALDBACCESS_H +#define CPOSLMLOCALDBACCESS_H + +#include +#include // For TSize + +enum TPosLmInitParams + { + ENoInit = 0x0000, // No initialization needed. + ECreated = 0x0001, // Database has been created. + ELanguage = 0x0002, // Language has changed. + EIndexes = 0x0004 // Database missing some indexes + }; + +/** +* Class that provides access to landmark databases. +* Responsible for creating and opening landmark databases. It is also +* responsible for transaction handling and for providing a handle to the +* database. +* +* @lib eposlmlocalaccess.lib +*/ +class CPosLmLocalDbAccess : public CBase + { + public: // Data types + + /** + * Preparation type for PrepareViewLC. + */ + enum TPreparationType + { + EAddPreparation = 0, + EUpdatablePreparation + }; + + /** + * Compact level type for NewL. + */ + enum TCompactLevelType + { + ELocalCompactLevel = 0, + EServerCompactLevel + }; + + public: // Constructors and destructor + + /** + * Two-phased constructor. + * @param aCompactLevel The compact level type to compare with when + * deciding if compact is needed. + */ + IMPORT_C static CPosLmLocalDbAccess* NewL( + /* IN */ TCompactLevelType aCompactLevel = ELocalCompactLevel + ); + + /** + * Destructor. + */ + IMPORT_C virtual ~CPosLmLocalDbAccess(); + + public: // New functions + + /** + * Begins a transaction and puts a rollback function on the clean-up + * stack. + */ + IMPORT_C void BeginTransactionLC(); + + /** + * Commits a transaction and pops the rollback function from the + * clean-up stack. Rollback function is not popped if commit fails. + */ + IMPORT_C void CommitTransactionAndPopL(); + + /** + * Returns a handle to the database. Do NOT close the RDbNamedDatabase + * object when done with it. This will close the database for the client. + * The ownership still belongs to this class. The handle is used for + * issuing sql queries on the database. + * @param aDatabase A handle to the database. + */ + IMPORT_C void GetDatabase( + /* OUT */ RDbNamedDatabase& aDatabase + ); + + /** + * Opens a landmark database with the specified URI. + * @param aUri A database URI. + * @return KErrNone if successful. KErrNotFound, KErrPathNotFound, + * KErrArgument or KErrAlreadyExists if the database does not exist. + */ + IMPORT_C TInt OpenDatabaseL( + /* IN */ const TDesC& aUri + ); + + /** + * Begins a transaction. Does not put a rollback on the clean-up stack. + * Useful for asynchronous operations. + * @return KErrNone for client side access to the database or, if this + * is a shared database and the client has successfully locked it. + * KErrLocked if this is a shared database and another client already + * has an exclusive write-lock on it. Otherwise, one of the other + * system error codes. + */ + IMPORT_C TInt BeginTransaction(); + + /** + * Commits a transaction. Useful for asynchronous operations that cannot + * put a rollback on the clean-up stack. + * @return KErrNone if successful, otherwise one of the other system + * wide error codes including the DBMS database error codes. + */ + IMPORT_C TInt CommitTransaction(); + + /** + * Rolls back the current transaction. Useful when a rollback function + * cannot be placed on the clean-up stack, i.e. in asynchronous + * operations. + */ + IMPORT_C void RollbackTransaction(); + + /* + * Tests if there is an outstanding transaction on the database. + * @return ETrue, if a transaction is in progress; EFalse, otherwise. + */ + IMPORT_C TBool InTransaction() const; + + /* + * Returns the init flag which tells whether a database must be + * initialized or not. + * + * @return Init flag. + */ + IMPORT_C TUint InitFlag() const; + + /* + * Returns a pointer to the init flag which tells whether a database + * must be initialized or not. + * + * @return Pointer to init flag. + */ + IMPORT_C TUint* InitFlagPtr(); + + /* + * Resets the init flag which tells whether a database must be + * initialized or not. + */ + IMPORT_C void ResetInitFlag(); + + /** + * Checks if database is damaged. That is, it needs to be recovered. + * + * @return Returns ETrue if the database is damaged. Otherwise EFalse. + */ + IMPORT_C TBool IsDamaged(); + + /** + * Executes an SQL query. + * + * @param aQuery SQL query. + */ + IMPORT_C void ExecuteL( + /* IN */ const TDesC& aQuery + ); + + /** + * Prepares and evalutes a database view. The view is put on the cleanup + * stack. + * @param aType The type of preparation (add/read). + * @param aView A database view to prepare and evaluate. + * @param aSql A SQL query. + * @param aComparison A comparison type. + */ + IMPORT_C void PrepareViewLC( + /* IN */ TPreparationType aType, + /* IN/OUT */ RDbView& aView, + /* IN */ const TDesC& aSql, + /* IN */ TDbTextComparison aComparison = EDbCompareNormal + ); + + /** + * Returns size information for the database. + * + * @returns Size information for the database. + */ + IMPORT_C CPosLandmarkDatabase::TSize SizeL(); + + /** + * Checks whether a database needs to be initialized or not. + * + * @param aIsNeeded ETrue if the database needs to be initialized, + * EFalse otherwise. + * @return KErrCorrupt if the settings table cannot be found. + * KErrNone otherwise. + */ + IMPORT_C TInt IsInitializeNeededL( + /* OUT */ TBool& aIsNeeded + ); + + /** + * Sets a flag in the database that initialization is done. + */ + IMPORT_C void SetInitializeDoneL(); + + /** + * Checks if the language must be changed for a landmark database. + * That is if the language in the database does not match the language + * of the phone. + * + * @param aIsNeeded ETrue if language must be changed, EFalse otherwise. + * @return KErrCorrupt if the settings table cannot be found. + * KErrNone otherwise. + */ + IMPORT_C TInt IsLanguageChangeNeededL( + /* OUT */ TBool& aIsNeeded + ); + + /** + * Sets the language of the database to the specified language. + * + * @param aLanguage A language to set. + */ + IMPORT_C void SetLanguageL( + /* IN */ TLanguage aLanguage + ); + + /** + * Checks whether compact is needed or not. + * + * @return ETrue if compact is needed. EFalse otherwise. + */ + IMPORT_C TBool IsCompactNeededL(); + + /** Checks if new indexes exist in the database */ + IMPORT_C TBool IsIndexCreationNeededL() const; + + private: + + /** + * C++ default constructor. + */ + CPosLmLocalDbAccess( + /* IN */ TCompactLevelType aCompactLevel + ); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + /** + * Checks whether the database needs to be initialized or not. + * @return KErrCorrupt if impossible to read from settings table. + * Otherwise KErrNone. + */ + TInt VerifyDatabaseNeedInitializationL(); + + /** + * Reads the internal compact database level from a resource file. + */ + void ReadCompactDbLevelL(); + + /** + * Either checks if initialize or a language switch is needed. A boolean + * specifies which type of check to perform. + * + * @param aIsInitCheck ETrue if init check. EFalse if language check. + * @param aIsNeeded ETrue if the change is needed. EFalse otherwise. + * @return KErrCorrupt if the settings table cannot be found. + * KErrNone otherwise. + */ + TInt PerformCheckL( + /* IN */ TBool aIsInitCheck, + /* OUT */ TBool& aIsNeeded + ); + + /** + * Sets a flag in the database telling that either language switch or + * initialization has been performed. + * + * @param aSetLanguage ETrue if setting language, EFalse if setting + * init flag. + * @param aLanguage If setting language this will hold the actual + * language. + */ + void SetFlagL( + /* IN */ TBool aSetLanguage, + /* IN */ TLanguage aLanguage + ); + + /** Checks whether given index exists on given table */ + TBool IndexExistsL( const TDesC& aTable, const TDesC& aIndex ) const; + + private: // Data + + // Database session + RDbs iDbSession; + + // Database + RDbNamedDatabase iDb; + + // Flag used for remembering if initialization must be done. + TUint iInit; + + // Level for internal compact. + TCompactLevelType iLevelType; + TReal32 iRelativeCompactLevel; + TInt32 iAbsoluteCompactLevel; + }; + +#endif // CPOSLMLOCALDBACCESS_H +