persistentstorage/sql/SRC/Server/SqlSrvConfig.h
changeset 0 08ec8eefde2f
child 9 667e88a979d7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/persistentstorage/sql/SRC/Server/SqlSrvConfig.h	Fri Jan 22 11:06:30 2010 +0200
@@ -0,0 +1,164 @@
+// Copyright (c) 2007-2009 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 __SQLSRVCONFIG_H__
+#define __SQLSRVCONFIG_H__
+
+#include <e32std.h>
+#include <f32file.h> 
+#include "SqlPanic.h"
+#include "SqlUtil.h"
+
+//Forward declarations
+class RFs;
+
+/**
+TSqlSrvConfigParams structure represents a set of configurable SQLITE parameters.
+These are:
+@code
+ - iCacheSize  - page cache size in pages;
+ - iPageSize   - page size in bytes;
+ - iDbEncoding - database encoding - 16-bit or 8-bit;
+ - iSoftHeapLimitKb - soft heap limit in Kb;
+ - iCompactMode - manual, background, automatic;
+ - iFreePageThresholdKb - free page threshold (in Kb) is used by the background compaction framework;
+@endcode
+
+There is only one way a valid TSqlSrvConfigParams object to be created - using TSqlSrvConfig::GetConfigParamsL().
+GetConfigParamsL() uses an algorithm, described in TSqlSrvConfig class' comments, to decide which parameter value,
+shall be used: build time, config file or the client defined one.
+
+@see TSqlSrvConfig
+@see TSqlSrvConfig::GetConfigParamsL()
+@internalComponent
+*/
+NONSHARABLE_STRUCT(TSqlSrvConfigParams)
+	{
+	enum {KConfigPrmValueNotSet = -1};//iCacheSize, iPageSize, iSoftHeapLimitKb are initialized by default with KConfigPrmValueNotSet
+	enum TDbEncoding {EEncNotSet, EEncUtf8, EEncUtf16};//Database encoding: the default value for iDbEncoding is EEncNotSet
+	enum 
+		{
+		KDefaultSoftHeapLimitKb = 1024, 
+#ifdef SYSLIBS_TEST	
+		KMinSoftHeapLimitKb = 8, 
+#else
+		KMinSoftHeapLimitKb = 512,
+#endif
+		KMaxSoftHeapLimitKb = KMaxTInt / 1024
+		};
+	
+	TSqlSrvConfigParams();	
+		
+	TInt				iCacheSize;
+	TInt				iPageSize;
+	TDbEncoding			iDbEncoding;
+	TInt				iSoftHeapLimitKb;
+	TSqlCompactionMode	iCompactionMode;
+	TInt				iFreePageThresholdKb;
+	};
+	
+/**
+TSqlSrvConfig class is used for:
+@code 
+ - keeping the SQL server configuration file parameter values;
+ - producing a TSqlSrvConfigParams object with correct SQLITE parameter values when requested (TSqlSrvConfig::GetConfigParamsL());
+@endcode
+
+If SQL server config file exists at the moment of the SQL server startup, the SQL server will keep 
+a copy of the config file parameter values in a TSqlSrvConfig object.
+
+The SQL server will use the following rules, which config parameter should be used:
+@code
+----------------------------------------------------------------------------------------------
+Server config file parameter | Client config string parameter | What parameter is used
+----------------------------------------------------------------------------------------------
+.No..........................|.No.............................|.Build-time config parameter
+.No..........................|.Yes............................|.Client config string parameter
+.Yes.........................|.No.............................|.Server config file parameter
+.Yes.........................|.Yes............................|.Client config string parameter
+----------------------------------------------------------------------------------------------
+@endcode
+
+TSqlSrvConfig::InitL() should be used once for loading the config parameter values from the SQL server comfiguration file.
+
+TSqlSrvConfig::GetConfigParamsL() can be used for retrieving correctly initialized TSqlSrvConfigParams object.
+The rules described in the tabble above will be used for producing correct set of config parameter values in
+the created TSqlSrvConfigParams object.
+
+There are exceptions from the rules and these are:
+ - the "soft heap limit" parameter, which cannot be set using a configuration string, 
+   it is a config file only parameter;
+ - the "free page threshold" parameter, which cannot be set using a configuration string, 
+   it is a config file only parameter;
+
+The configuration string format is: "PARAM1=VALUE1;PARAM2=VALUE2;...."
+
+@see TSqlSrvConfigParams
+@internalComponent
+*/
+NONSHARABLE_CLASS(TSqlSrvConfig)
+	{	
+public:
+	void InitL(RFs& aFs, const TDesC& aFileName);
+	void GetConfigParamsL(const TDesC8& aConfigStr, TSqlSrvConfigParams& aConfigParams) const;
+	
+private:
+	static void GetConfigStringFromFileL(RFs& aFs, const TDesC& aFileName, TDes8& aConfigStr);
+	static void ExtractConfigParamsFromStringL(const TDesC8& aConfigStr, TSqlSrvConfigParams& aConfigParams);
+	static TBool ExtractParamValuePairL(TPtrC8& aConfigStr, TPtrC8& aParamName, TPtrC8& aParamValue);
+	static void ExtractParamValueL(const TDesC8& aParamName, const TDesC8& aParamValue, TSqlSrvConfigParams& aConfigParams);
+	static TInt GetCacheSizeL(const TDesC8& aParamValue);
+	static TInt GetPageSizeL(const TDesC8& aParamValue);
+	static TSqlSrvConfigParams::TDbEncoding GetEncoding(const TDesC8& aParamValue);
+	static TInt GetSoftHeapLimitL(const TDesC8& aParamValue);
+	static TSqlCompactionMode GetCompactionModeL(const TDesC8& aParamValue);
+	static TPtrC8 TrimAndConstructPtr(const TUint8* aStr, TInt aLength);
+	static TInt GetFreePageThresholdL(const TDesC8& aParamValue);
+	
+private:
+	TSqlSrvConfigParams	iConfigFileParams;
+		
+	};
+
+/**
+CDbConfigFiles class is used to store the name of each database configuration 
+file that exists on the device. Database configuration files are currently 
+supported only for shared, secure databases and the name of a configuration 
+file is the name of the database itself prefixed with the string ‘cfg’ and 
+suffixed with the extension ‘.N’, where N is the version of the configuration 
+file. For example, for the database [12345678]a.db a valid configuration 
+filename is cfg[12345678]a.db.01. All database configuration files must 
+be located in the SQL Server’s private data cage on the Z: drive - 
+namely, Z:\private\10281E17\. 
+
+@internalComponent
+*/
+NONSHARABLE_CLASS(CDbConfigFiles) : public CBase
+{
+public:		
+   	static CDbConfigFiles* NewL(const CDir& aDirEntries);
+	~CDbConfigFiles();
+	HBufC* FindConfigFile(const TDesC& aDbFilename) const;
+	
+private:
+	CDbConfigFiles();
+	void ConstructL(const CDir& aDirEntries);
+	void StoreFileNamesL(const CDir& aDirEntries);
+		
+private:
+	RPointerArray<HBufC> iConfigFileNames;
+};
+
+#endif//__SQLSRVCONFIG_H__