srsf/sisrscontrollerplugin/src/sicommondb.h
branchRCL_3
changeset 19 e36f3802f733
parent 0 bf1d17376201
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/srsf/sisrscontrollerplugin/src/sicommondb.h	Wed Sep 01 12:29:17 2010 +0100
@@ -0,0 +1,241 @@
+/*
+* Copyright (c) 2004-2007 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:  This class is the baseclass for all SI Controller Plugin DB classes.
+*				It implements the common database functionalities.
+*
+*/
+
+
+#ifndef SICOMMONDB_H
+#define SICOMMONDB_H
+
+//  INCLUDES
+#include <d32dbms.h>
+#include <e32svr.h>
+#include <sysutil.h> // Critical Level check
+#include <f32file.h>
+#include "s32strm.h" // Streams
+#include "s32mem.h"  // Buffer streams
+#include "nsssispeechrecognitiondatacommon.h"
+#include "nsssispeechrecognitiondatadevasr.h"
+
+// CONSTANTS
+const TInt KSDDatabaseDrive = EDriveC;
+
+_LIT(KClientUidColumn, "clientUid");
+_LIT(KUsedColumn, "used");
+_LIT(KCounterColumn, "counter");
+
+_LIT(KOpenParen, " (");
+_LIT(KCloseParen, ")");
+_LIT(KEqual, " = ");
+_LIT(KNext, ", ");
+
+
+_LIT(KSIGrammarTable, "siGrammarTable");
+_LIT(KBinaryGrammarColumn, "BinaryGrammarId");
+_LIT(KBinaryGrammarColumnSize, "BinaryGrammarSize");
+_LIT(KGrammarIdTable, "siGrammarIdTable");
+_LIT(KGrammarIdColumn, "grammarId");
+_LIT(KGrammarIndex, "grammarIndex");
+
+_LIT(KSILexiconTable, "siLexiconTable");
+_LIT(KBinaryLexiconColumn, "BinaryLexiconId");
+_LIT(KBinaryLexiconColumnSize, "BinaryLexiconSize");
+_LIT(KLexiconIdTable, "siLexiconIdTable");
+_LIT(KLexiconIdColumn, "lexiconId");
+_LIT(KLexiconIndex, "lexiconIndex");
+
+_LIT(KSIModelBankTable, "siModelBankTable");
+_LIT(KBinaryModelBankColumn, "BinaryModelBankId");
+_LIT(KBinaryModelBankColumnSize, "BinaryModelBankSize");
+_LIT(KModelBankIdTable, "siModelBankIdTable");
+_LIT(KModelBankTable, "siModelBankTable");
+_LIT(KModelBankIdColumn, "modelBankId");
+
+_LIT(KHmmColumn, "hmm");
+_LIT(KHmmChecksumColumn, "hmmChecksum");
+_LIT(KModelBankIndex, "modelBankIndex");
+_LIT(KModelIndex, "modelIndex");
+
+const TInt KNotUsed = 0;
+const TInt KUsed = 1;
+const TSIModelID KModelID=1;
+// CLASS DECLARATION
+
+/**
+*  This class is the base class for all SI Controller Plugin DB classes.
+*  It provides the common functionality for the DB classes.
+*
+*  @lib SIControllerPlugin.lib
+*  @since 2.0
+*/
+class CSICommonDB : public CBase
+    {
+    public:  // Constructors and destructor
+
+        /**
+        * C++ default constructor.
+        */
+        CSICommonDB( RDbNamedDatabase& aDatabase, RDbs& aDbSession, TInt aDrive );
+
+ 		/**
+        * Destructor.
+        */
+        virtual ~CSICommonDB();
+
+    public: // New functions
+
+        /**
+        * Checks if the specified ID table exists or not.  If it doesn't exist, it creates one.
+        * @since 2.0
+        * @param	aIdTable		descriptor containing tabel name
+		* @param	aIdColumn		descriptor containing ID column name
+		* @param	aIndex			descriptor containing table index name
+        * @return	-
+        */
+		void CreateIDTableL( const TDesC& aIdTable, const TDesC& aIdColumn, const TDesC& aIndex );
+
+        /**
+        * Creates a new ID in the specified table.
+        * @since 2.0
+        * @param	aTableName		descriptor containing table name
+		* @param	aIdColumn		descriptor containing ID column name
+		* @param	aClientUid		client Uid for data ownership
+        * @return	A new ID
+        */
+		TUint32 CreateNewIDL( const TDesC& aTableName, const TDesC& aIdColumn, TUid aClientUid );
+
+        /**
+        * Returns the counter column value after searching for the aKey in the specified table.
+        * @since 2.0
+        * @param	aTableName		descriptor containing tabel name
+		* @param	aIndex			descriptor containing table index name
+		* @param	aKey			key to search in the table
+        * @return	Counter
+        */
+		TInt CountL( const TDesC& aTableName, const TDesC& aIndex, TUint aKey );
+
+        /**
+        * Checks if an unused Id exists in the given table.  If found, row is set to
+		* the found row.
+        * @since 2.0
+        * @param	"RDbTable& aDbTable"
+        * @return	ETrue if found
+        */
+        TBool FindUnusedIDL( RDbTable& aDbTable );
+
+        /**
+        * Returns all Ids in the specified table that belong to the specified client.
+        * @since 2.0
+        * @param	aTableName		descriptor containing table name
+		* @param	aIdColumn		descriptor containing ID column name
+        * @param	aClientUid		client's Uid for data ownership
+		* @param	aIDs			reference where Ids are stored
+        */
+		void GetAllClientIDsL( const TDesC& aIdTable, const TDesC& aIdColumn, TUid aClientUid, RArray<TUint32>& aIDs );
+
+        /**
+        * Returns all Ids in the specified table.
+        * @since 2.0
+        * @param	aTableName		descriptor containing table name
+		* @param	aIdColumn		descriptor containing ID column name
+		* @param	aIDs			reference where Ids are stored
+        */
+		void GetAllIDsL( const TDesC& aIdTable, const TDesC& aIdColumn, RArray<TUint32>& aIDs );
+
+        /**
+        * Checks if the specified key exists in the specified table.
+        * @since 2.0
+        * @param	aTableName		descriptor containing tabel name
+		* @param	aIndex			descriptor containing table index name
+		* @param	aKey			key to search in the table
+        * @return	ETrue if found.
+        */
+		TBool IsValidL( const TDesC& aTableName, const TDesC& aIndex, TUint aKey );
+
+        /**
+        * Sets the specified ID as unused in the specified table.
+        * @since 2.0
+        * @param	aTableName		descriptor containing tabel name
+		* @param	aIdColumn		descriptor containing ID column name
+		* @param	aId				ID to be marked as unused
+        */
+		void ReleaseIdL( const TDesC& aTableName, const TDesC& aIdColumn, TUint32 aId );
+
+        /**
+        * Updates the counter value after finding the aKey in the specified table.
+        * @since 2.0
+        * @param	aTableName		descriptor containing tabel name
+		* @param	aIndex			descriptor containing table index name
+		* @param	aKey			key to search in the table
+		* @param	aIncrement		Increment if ETrue, decrement otherwise.
+        */
+		void UpdateCounterL( const TDesC& aTableName, const TDesC& aIndex, TUint aKey,
+					TBool aIncrement );
+
+        /**
+        * Checks for data ownership.  Leaves with KErrAsrDataRightViolation if not
+		* owned by this client.
+        * @since 2.0
+		* @param	aClientUid		client's Uid for data ownership
+        * @param	aTableName		descriptor containing tabel name
+		* @param	aIndex			descriptor containing table index name
+		* @param	aKey			key to search in the table
+        */
+		void VerifyOwnershipL( TUid aClientUid, const TDesC& aTableName, const TDesC& aIndex,
+					TUint aKey );
+
+    public:    // Data
+
+		// Database
+        RDbNamedDatabase& iDb;
+
+        // DB session
+        RDbs& iDbSession;
+
+        // drive
+        TInt iDrive;
+        
+    private:  // New functions
+    
+        /**
+        * Creates a new ID in the specified table.
+        * @since 2.0
+        * @param	aTableName		descriptor containing table name
+		* @param	aIdColumn		descriptor containing ID column name
+		* @param	aClientUid		client Uid for data ownership
+        * @return	A new ID
+        */
+		TUint32 DoCreateNewIDL( const TDesC& aTableName, const TDesC& aIdColumn, TUid aClientUid );
+		
+		/**
+        * Sets the specified ID as unused in the specified table.
+        * @since 2.0
+        * @param	aTableName		descriptor containing tabel name
+		* @param	aIdColumn		descriptor containing ID column name
+		* @param	aId				ID to be marked as unused
+        */
+		void DoReleaseIdL( const TDesC& aTableName, const TDesC& aIdColumn, TUint32 aId );
+		
+    private:  // Data
+    
+        // Mutex for DB write lock
+        // Makes sure that only one process gets the DB lock
+        RMutex iMutex;
+    };
+
+#endif // SICOMMONDB_H
+
+// End of File