--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/upnpharvester/common/cmsqlwrapper/inc/cmsqlconnection.h Thu Dec 17 08:52:00 2009 +0200
@@ -0,0 +1,575 @@
+/*
+* Copyright (c) 2008 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: SQLite Connection class
+*
+*/
+
+
+
+
+
+
+
+#ifndef C_CMSQLCONNECTION_H
+#define C_CMSQLCONNECTION_H
+
+#include <e32base.h>
+#include <sqldb.h>
+#include "cmcommontypes.h"
+
+/* Forward declarations. */
+class CCmSqlBaseItem;
+class CCmSqlGenericItem;
+class CCmSqlPropertyItem;
+class CCmBaseListItem;
+class CCmFillListItem;
+class CCmFillRule;
+class CCmSqlPropertyCollector;
+class CCmSqlPropertyContainer;
+
+// Constants
+const TUint KCmSqlBatchSize = 100;
+
+// CLASS DECLARATION
+ /**
+ * Class represents methods to communication with SQLite database API.
+ *
+ * @lib cmsqlwrapper.lib
+ *
+ * @since S60 5.1
+ */
+class CCmSqlConnection : public CBase
+ {
+
+private:
+
+ // Operation modes
+ enum TCmSqlOperationMode
+ {
+ ECmSqlFillItemGet = 1,
+ ECmSqlBaseItemGet,
+ ECmSqlPropertyValueGet,
+ ECmSqlGenericItemAdd,
+ ECmSqlPropertyItemAdd,
+ ECmSqlIdle,
+ ECmSqlDeletingMetadata,
+ ECmSqlFilteredPropertyGet
+ };
+public:
+
+ /**
+ * Two-phased constructor.
+ */
+ static CCmSqlConnection* NewL();
+
+ /**
+ * Two-phased constructor.
+ */
+ static CCmSqlConnection* NewLC();
+
+ /**
+ * Destructor.
+ */
+ virtual ~CCmSqlConnection();
+
+ /**
+ * Open database (creates if doesn't exist)
+ *
+ * @since S60 5.1
+ * @param aDb, Database filename and path
+ * @return error code
+ */
+ TInt OpenDb( const TDesC& aDb );
+
+ /**
+ * Close opened database
+ *
+ * @since S60 5.1
+ * @param None
+ * @return None
+ */
+ void CloseDb();
+
+ /**
+ * Creates db file
+ * @since S60 5.1
+ * @param aDb, Database filename and path
+ * @return error code
+ */
+ TInt CreateDbFile( const TDesC& aDb );
+
+ /**
+ * Validates database existence and format
+ *
+ * @since S60 5.1
+ * @param None
+ * @return ETrue if db valid
+ */
+ TBool Validate();
+
+ /**
+ * Executes sql command
+ *
+ * @since S60 5.1
+ * @param aCommand, command to be executed
+ * @return None
+ */
+ void ExecuteL( const TDesC8& aCommand );
+
+ /**
+ * Cance asyncronous operation
+ *
+ * @since S60 5.1
+ * @param None
+ * @return None
+ */
+ void CancelAsyncOperation();
+
+ /**
+ * Setting media server id
+ *
+ * @since S60 5.1
+ * @param aId, media server id to be used
+ * @return None
+ */
+ void SetMsId( TUint aId );
+
+ /**
+ * Setting mmc quota
+ *
+ * @since S60 5.1
+ * @param aQuota, quota to be used
+ * @return None
+ */
+ void SetQuota( TInt64 aQuota );
+
+ /**
+ * Asyncronous batch add
+ *
+ * @since S60 5.1
+ * @param aItems, items to be inserted into database
+ * @param aStatus, request status to be completed after insert is ready
+ * @return None
+ */
+ void AsyncBatchAdd( RPointerArray<CCmSqlGenericItem>& aItems,
+ TRequestStatus& aStatus );
+
+ /**
+ * Asyncronous property item batch add
+ *
+ * @since S60 5.1
+ * @param aItems, items to be inserted into database
+ * @param aField, property type identifier
+ * @param aStatus, request status to be completed after insert is ready
+ * @return None
+ */
+ void AsyncBatchAddPropertyItems(
+ RPointerArray<CCmSqlPropertyItem>& aItems, TCmMetadataField aField,
+ TRequestStatus& aStatus );
+
+ /**
+ * Syncronous property item add
+ *
+ * @since S60 5.1
+ * @param aItem, item to be inserted into database
+ * @param aField, property type identifier
+ * @return None
+ */
+ void SyncAddPropertyItemL(
+ CCmSqlPropertyItem& aItem, TCmMetadataField aField );
+
+ /**
+ * Asyncronous item batch delete
+ *
+ * @since S60 5.1
+ * @param aItems, items to be deleted
+ * @param aStatus, request status to be completed
+ * @return None
+ */
+ void AsyncBatchDelete( RPointerArray<CCmSqlBaseItem>& aItems,
+ TRequestStatus& aStatus );
+
+ /**
+ * Asyncronous metadata delete
+ *
+ * @since S60 5.1
+ * @param aMsIds, defines where metadata is harvested
+ * @param aStatus, request status to be completed
+ * @return None
+ */
+ void AsyncMetadataDelete( RArray<TInt>& aMsIds,
+ TRequestStatus& aStatus );
+
+ /**
+ * SELECT XXX oldest and delete those
+ * Delete defined amount of media items
+ *
+ * @since S60 5.1
+ * @param aType, media type identifier
+ * @param aCount, amount to be deleted
+ * @return None
+ */
+ void DeleteOldestMediaItemsL( TCmMediaType aType, TInt64 aCount );
+
+ /**
+ * Deletes unused propertys
+ *
+ * @since S60 5.1
+ * @param None
+ * @return None
+ */
+ void DeleteUnusedPropertys( );
+
+ /**
+ * Asyncronous metadata column qyery
+ *
+ * @since S60 5.1
+ * @param aItems, listed base items ( included only ItemId, dbId and
+ * Hash code )
+ * @param aStatus, request status to be completed when result set ready
+ * @return None
+ */
+ void GetItemsL( RPointerArray<CCmSqlBaseItem>& aItems,
+ TRequestStatus& aStatus );
+
+ /**
+ * Asyncronous metadata qyery for fill list
+ *
+ * @since S60 5.1
+ * @param aItems, listed fill list items
+ * @param aClause, sql clause to be executed
+ * @param aRule, used fill list
+ * @param aStatus, request status to be completed when result set ready
+ * @return None
+ */
+ void GetFillItemsL( RPointerArray<CCmFillListItem>& aItems,
+ TDesC8& aClause, CCmFillRule& aRule, TRequestStatus& aStatus );
+
+ /**
+ * Asyncronous metadata column qyery
+ *
+ * @since S60 5.1
+ * @param aItems, listed property values
+ * @param aClause, sql clause to be executed
+ * @param aStatus, request status to be completed when result set ready
+ * @return None
+ */
+ void GetPropertyValuesL( RPointerArray<CCmSqlPropertyItem>& aItems,
+ TDesC8& aClause, TRequestStatus& aStatus );
+
+ /**
+ * Asyncronous metadata filtered property values query
+ *
+ * @since S60 5.1
+ * @param aPropertys, result array reference
+ * @param aClause, sql clause to be executed
+ * @param aStatus, request status to be completed
+ * @return None
+ */
+ void GetFilteredPropertyValuesL(
+ CCmSqlPropertyCollector& aPropertys, const TDesC8& aClause,
+ TRequestStatus& aStatus );
+
+ /**
+ * Returns amount of media items
+ *
+ * @since S60 5.1
+ * @param aCount, media amount on return
+ * @param aType, media type
+ * @return None
+ */
+ void GetMediaCountL( TInt64& aCount, TCmMediaType aType );
+
+ /**
+ * Returns ETrue if item exist in db
+ *
+ * @since S60 5.1
+ * @param aItem, item
+ * @param aDevId, device id
+ * @return ETrue if exists
+ */
+ TBool ExistsL( const CCmBaseListItem& aItem, const TInt aDevId );
+
+private:
+
+ /**
+ * Static callback method for db handling
+ *
+ * @since S60 5.1
+ * @param aDbHandler, database handler
+ * @return None
+ */
+ static TInt BatchAdd( TAny* aDbHandler );
+
+ /**
+ * Adds items into db in background
+ *
+ * @since S60 5.1
+ * @param None
+ * @return None
+ */
+ TInt DoBatchAdd();
+
+ /**
+ * Static callback method for db handling
+ *
+ * @since S60 5.1
+ * @param aDbHandler, database handler
+ * @return None
+ */
+ static TInt BatchDelete( TAny* aDbHandler );
+
+ /**
+ * Deletes items from db
+ *
+ * @since S60 5.1
+ * @param None
+ * @return None
+ */
+ TInt DoBatchDelete();
+
+ /**
+ * Static callback method for db handling
+ *
+ * @since S60 5.1
+ * @param aDbHandler, database handler
+ * @return None
+ */
+ static TInt BatchGetL( TAny* aDbHandler );
+
+ /**
+ * Gets items from db
+ *
+ * @since S60 5.1
+ * @param None
+ * @return None
+ */
+ TInt DoBatchGetL();
+
+ /**
+ * Collect item data
+ *
+ * @since S60 5.1
+ * @param None
+ * @return None
+ */
+ void CollectItemDataL();
+
+ /**
+ * Adds generic item into db
+ *
+ * @since S60 5.1
+ * @param None
+ * @return None
+ */
+ void AddItemL();
+
+ /**
+ * Adds property item into db
+ *
+ * @since S60 5.1
+ * @param None
+ * @return None
+ */
+ void AddPropertyItemL();
+
+ /**
+ * Adds resource item into db
+ *
+ * @since S60 5.1
+ * @param None
+ * @return None
+ */
+ void AddResourceL();
+
+ /**
+ * Deletes items from the item table
+ *
+ * @since S60 5.1
+ * @param None
+ * @return None
+ */
+ void DeleteItemL();
+
+ /**
+ * Deletes resource from the resources table
+ *
+ * @since S60 5.1
+ * @param None
+ * @return None
+ */
+ void DeleteResourceL();
+
+ /**
+ * Deletes metadata from defined server
+ *
+ * @since S60 5.1
+ * @param aMsId, mediaserver id
+ * @return None
+ */
+ void DeleteMetadataFromDefServerL( const TInt aMsId );
+
+ /**
+ * Formats row count query clause, used in property
+ * indexing
+ *
+ * @since S60 5.1
+ * @param aField, metadata field
+ * @return None
+ */
+ void FormatRowCountQueryL( TCmMetadataField aField );
+
+ /**
+ * Returns row count, used in property indexing
+ *
+ * @since S60 5.1
+ * @param None
+ * @return None
+ */
+ TInt64 RowCountL();
+
+ /**
+ * Helper function for format maximun index query
+ *
+ * @since S60 5.1
+ * @param aId, item id
+ * @param aTable, table name
+ * @return None
+ */
+ void FormatCountQueryL( const TDesC8& aId, const TDesC8& aTable );
+
+ /**
+ * Helper function for getting filtered propertys
+ *
+ * @since S60 5.1
+ * @param aContainer, propertycontainer
+ * @param aIndex1, column index
+ * @param aIndex2, column index
+ * @return None
+ */
+ void GetFilteredPropertysL( CCmSqlPropertyContainer& aContainer,
+ const TInt aIndex1, const TInt aIndex2 );
+
+private:
+
+ /**
+ * Performs the first phase of two phase construction.
+ */
+ CCmSqlConnection();
+
+ /**
+ * Performs the second phase construction.
+ */
+ void ConstructL();
+
+private:
+
+ /**
+ * iDatabase, interface to Sqlite database
+ */
+ RSqlDatabase iDatabase;
+
+ /**
+ * iStatement, interface to Sqlite database
+ */
+ RSqlStatement iStatement;
+
+ /**
+ * Pending request status
+ */
+ TRequestStatus* iStatus;
+
+ /**
+ * Media server id
+ */
+ TUint iMsId;
+
+ /**
+ * User mmc quota
+ */
+ TInt64 iQuota;
+
+ /**
+ * Generic item array pointer
+ */
+ RPointerArray<CCmSqlGenericItem>* iGenericItems; // not owned
+
+ /**
+ * Base item array pointer
+ */
+ RPointerArray<CCmSqlBaseItem>* iBaseItems; // not owned
+
+ /**
+ * Fill list item array pointer
+ */
+ RPointerArray<CCmFillListItem>* iFillItems; // not owned
+
+ /**
+ * Property item array pointer
+ */
+ RPointerArray<CCmSqlPropertyItem>* iPropertyItems; // not owned
+
+ /**
+ * Filtered property item array pointer
+ */
+ CCmSqlPropertyCollector* iPropertyCollector; // not owned
+
+ /**
+ * Mediaserver ids
+ */
+ RArray<TInt>* iMsIds; // not owned
+
+ /**
+ * Asyncronous database handler
+ */
+ CIdle* iAsyncDbHandler; // owned
+
+ /**
+ * Operation mode
+ */
+ TCmSqlOperationMode iMode;
+
+ /**
+ * Index to item array
+ */
+ TInt iIndex;
+
+ /**
+ * Property table identifier
+ */
+ TCmMetadataField iField;
+
+ /**
+ * Fill list
+ */
+ CCmFillRule* iList; // not owned
+
+ /**
+ * Fill list size
+ */
+ TInt64 iListSize;
+
+ /**
+ * Maximun size of the fill list in Bytes
+ */
+ TInt64 iListMaxSize;
+
+ /**
+ * Used to get max count of items
+ */
+ HBufC8* iCountQuery; // Owned
+
+ };
+
+#endif // C_CMSQLCONNECTION_H