diff -r 000000000000 -r 08ec8eefde2f persistentstorage/sql/SRC/Server/SqlSrvConfig.h --- /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 +#include +#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 iConfigFileNames; +}; + +#endif//__SQLSRVCONFIG_H__