diff -r 000000000000 -r ba25891c3a9e ncdengine/provider/storage/inc/ncddatabasestorageimpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ncdengine/provider/storage/inc/ncddatabasestorageimpl.h Thu Dec 17 08:51:10 2009 +0200 @@ -0,0 +1,174 @@ +/* +* Copyright (c) 2006 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: +* +*/ + + +#ifndef MCDATABASESTORAGE_H +#define MCDATABASESTORAGE_H + + +#include +#include +#include // RDbNamedDatabase + +#include "ncdstoragebase.h" + +/** + * + */ +class CNcdDatabaseStorage : public CNcdStorageBase +{ + + friend CNcdStorageBase* CNcdStorageBase::NewL( + RFs&, const TDesC&, const TDesC&, + const TDesC& ); + + + public: // Destructor + + virtual ~CNcdDatabaseStorage(); + + + protected: // Construction + + static CNcdDatabaseStorage* NewL( + RFs& aFs, + const TDesC& aUid, + const TDesC& aStorageFolder, + const TDesC& aName ); + + CNcdDatabaseStorage( + RFs& aFs, + HBufC* aUid, + HBufC* aStorageFolder, + HBufC* aName ); + + void ConstructL(); + + + public: // From CNcdStorageBase + + virtual void Compact(); + + virtual RDbDatabase::TSize Size() const; + + virtual TInt DoCommit(); + + + protected: // From CNcdStorageBase + + virtual CNcdStorageItem* CreateStorageItemLC( const TDesC& aUid, TInt aType ); + + + virtual TBool ItemExistsL( const TDesC& aUid, TInt aType ); + + virtual void DoOpenItemL( CNcdStorageItem* aItem ); + + virtual void DoRollback(); + + virtual void DoRemoveItemL( CNcdStorageItem* aItem ); + + virtual void DoReadDataL( CNcdStorageItem* aItem, MNcdStorageDataItem& aDataItem ); + + virtual void DoWriteDataL( CNcdStorageItem* aItem, MNcdStorageDataItem& aDataItem ); + + virtual void DoOpenL(); + + virtual void DoClose(); + + virtual void GetAllItemsFromStorageL( RPointerArray& aItems ); + + virtual HBufC8* DoGetDataL( CNcdStorageItem* aItem ); + + virtual void DoRemoveItemsL( + const RArray& aDoNotRemoveItems ); + + + private: // New methods + + TInt CalculateSqlRemovalLength( + const RNcdDatabaseItems& aItem ) const; + + + inline TBool BeginTransactionL(); + + inline TBool CloseTransactionL( TBool aForceClose = EFalse ); + + inline void ReadItemDataLC( + RDbView& aItemData, + const TDesC& aUid, + TInt aType, + RDbRowSet::TAccess aAccess = RDbRowSet::EReadOnly ); + + inline void ReadItemDataLC( + RDbView& aItemData, + TUint32 aKey, + RDbRowSet::TAccess aAccess = RDbRowSet::EReadOnly ); + + void RecreateDatabaseL(); + + + private: + + + RFs& iFs; + + HBufC* iDatabaseFileName; + + RDbNamedDatabase iDb; + + TBool iUpdated; + + TInt iWastedSpace; + + TInt iNewWastedSpace; + }; + + +class CNcdDatabaseStorageItem : public CNcdStorageItem + { + + public: + + + static CNcdDatabaseStorageItem* NewLC( + CNcdStorageBase* aStorage, + const TDesC& aUid, + TInt aType, + TUint32 aDbKey = 0 ); + + + virtual ~CNcdDatabaseStorageItem(); + + + public: + + + void SetDbKey( TUint32 aDbKey ); + + TUint32 DbKey() const; + + + protected: + + CNcdDatabaseStorageItem( CNcdStorageBase* aStorage, TUint32 aDbKey ); + + private: + + TUint32 iDbKey; + }; + +#endif