persistentstorage/sql/SRC/Server/SqlSrvFileData.h
changeset 0 08ec8eefde2f
child 11 667e88a979d7
child 17 55f2396f6d25
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/persistentstorage/sql/SRC/Server/SqlSrvFileData.h	Fri Jan 22 11:06:30 2010 +0200
@@ -0,0 +1,240 @@
+// Copyright (c) 2005-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 __SQLSRVFILEDATA_H__
+#define __SQLSRVFILEDATA_H__
+
+#include <f32file.h>				//TParse, RFs
+#include "SqlSrvStrings.h"			//KFileHandleSeparator
+#include "SqlSrvConfig.h"			//TSqlSrvConfig & TSqlSrvConfigParams
+
+
+/**
+TSqlSrvFileData class.
+
+TSqlSrvFileData class owns two sets of data:
+- data, which never changes during the life time of TSqlSrvFileData object - file session instance, 
+  system drive name, SQL server private data path, config file parameters, a store of names of existing 
+  database configuration files. These permanent TSqlSrvFileData properties are initialized by calling 
+  TSqlSrvFileData::InitL(). 
+  The SQL server owns only one TSqlSrvFileData instance whose permanent properties are initialized during 
+  the server startup and that TSqlSrvFileData instance is available to the other SQL server classes 
+  via a call to CSqServer::FileData();
+- data, which changes with every call to TSqlSrvFileData::SetL(const RMessage2& aMessage, TInt aArgNum). 
+  The TSqlSrvFileData instance expects that argument aArgNum of aMessage object contains a file name.
+  The file name will be parsed by the TSqlSrvFileData instance and then the full file name is made available
+  through TSqlSrvFileData::FileName() and TSqlSrvFileData::FileNameZ() (zero-terminated file name);
+  
+The TSqlSrvFileData instance also can be used for (after calling TSqlSrvFileData::SetL() or TSqlSrvFileData::SetFromHandleL()):
+- retrieving the full file name;
+- retrieving the system drive name;
+- retrieving the server private path;
+- checking the file name format type - secure or non-secure;
+- retrieving the SID of the file name, if that is a secure file name;
+
+With TSqlSrvFileData class we can:
+- Minimize the stack usage (there is only one, heap based TSqlSrvFileData instance, owned by the SQL server);
+- Keep in one place all data needed for opening/creating/attaching/copying/deleting a database file;
+
+@see CSqlServer
+@see CSqlServer::FileData()
+@see TSqlSrvFileData::SetL()
+@see TSqlSrvFileData::SetFromHandleL()
+@see TSqlSrvFileData::Fs()
+@see TSqlSrvFileData::PrivatePath()
+@see TSqlSrvFileData::Drive()
+@see TSqlSrvFileData::FileName()
+@see TSqlSrvFileData::FileNameZ()
+@see TSqlSrvFileData::IsSecureFileNameFmt()
+@see TSqlSrvFileData::SecureUid()
+@see TSqlSrvFileData::IsCreated()
+@see TSqlSrvFileData::IsReadOnly()
+@see TSqlSrvFileData::ContainHandles()
+@see TSqlSrvFileData::ConfigParams()
+@see TSqlSrvFileData::DbConfigFiles()
+
+@internalComponent
+*/
+NONSHARABLE_CLASS(TSqlSrvFileData)
+	{
+public:
+	inline void InitL(RFs& aFs, const TDriveName& aSysDriveName, const TDesC& aServerPrivatePath, 
+					  const TDesC& aConfigFileName, const CDbConfigFiles* aDbConfigFiles);
+	void SetL(const RMessage2& aMessage, TInt aFileNameLen, TInt aFileNameArgNum, const TDesC8* aConfigStr = NULL);
+  	void SetFromHandleL(const RMessage2& aMessage, const TDesC& aDbFileName, TBool aCreated, TBool aReadOnly, const TDesC8* aConfigStr = NULL);
+
+	inline RFs& Fs() const;
+	inline TPtrC PrivatePath() const;
+	inline TDriveNumber Drive() const;
+	inline TPtrC FileName() const;
+	inline TPtrC FileNameZ() const;
+	inline TBool IsSecureFileNameFmt() const;
+	inline TUid SecureUid() const;
+	inline TBool IsCreated() const;
+	inline TBool IsReadOnly() const;
+	inline TBool ContainHandles() const;
+	inline const TSqlSrvConfigParams& ConfigParams() const;
+	inline const CDbConfigFiles* DbConfigFiles() const;
+
+private:
+	RFs						iFs;
+	TParse					iSysDrivePrivatePath;// <System drive name> + <Private directory>
+	TSqlSrvConfig			iConfig;			 // Contains the config file parameters (not used directly. TSqlSrvConfig::GetConfigParamsL()
+												 // should be used to get the right set of configuration parameters)	
+	TBuf<KMaxFileName + 1>	iFileName;
+	TDriveNumber 			iDrive;
+	TBool					iIsSecureFileNameFmt;
+	TUid					iSecureUid;
+	TBool					iCreated;			// If the file is a private database, iCreated is true if the file was created,
+												// false if the file was opened by the client side
+	TBool					iReadOnly;
+	TSqlSrvConfigParams		iConfigParams;		// Contains the configuration parameters, which shall be used 
+												// for the database connection (when creating/openning)
+	const CDbConfigFiles*	iDbConfigFilesPtr;  // Pointer to server's store of existing database config file names, NULL if there are no config files
+	};
+
+/**
+Initializes the permanent data of TSqlSrvFileData instance.
+This type of initialization happens during the SQL server startup.
+Once initialized, the permanent set of data stays unchanged for the whole life time of TSqlSrvFileData instance.
+
+@code
+The permanent set of data includes:
+- a file session instance;
+- system drive name;
+- SQL server private data path;
+- config file parameters;
+- a store of names of existing database configuration files
+@endcode
+
+@param aFs A reference to a file session instance
+@param aSysDriveName A reference to the system drive name
+@param aServerPrivatePath A reference to SQL server private data path
+@param aConfigFileName SQL server configuration file name
+@param aDbConfigFiles A pointer to the server's store of existing database configuration file names
+*/
+inline void TSqlSrvFileData::InitL(RFs& aFs, const TDriveName& aSysDriveName, const TDesC& aServerPrivatePath, 
+								   const TDesC& aConfigFileName, const CDbConfigFiles* aDbConfigFiles)
+	{
+	iFs = aFs;
+	iSysDrivePrivatePath.Set(aSysDriveName, &aServerPrivatePath, 0);
+	iConfig.InitL(aFs, aConfigFileName);
+	iConfig.GetConfigParamsL(KNullDesC8, iConfigParams);//iConfigParams initialized with the config file params 
+														//(because an empty configuration string is passed as an argument)
+	iDbConfigFilesPtr = aDbConfigFiles;
+	}
+
+/**
+@return A reference to the file session instance
+*/
+inline RFs& TSqlSrvFileData::Fs() const
+	{
+	return const_cast <RFs&> (iFs);	
+	}
+
+/**
+@return SQL server private path.
+*/
+inline TPtrC TSqlSrvFileData::PrivatePath() const
+	{
+	return iSysDrivePrivatePath.Path();
+	}
+	
+/**
+@return The file drive.
+*/
+inline TDriveNumber TSqlSrvFileData::Drive() const
+	{
+	return iDrive;	
+	}
+
+/**
+@return A read-only descriptor pointing to the file name.
+*/
+inline TPtrC TSqlSrvFileData::FileName() const
+	{
+	return iFileName.Left(iFileName.Length() - 1);
+	}
+
+/**
+@return A read-only descriptor pointing to the file name, zero-terminated.
+*/
+inline TPtrC TSqlSrvFileData::FileNameZ() const
+	{
+	return iFileName;
+	}
+
+/**
+@return True if the file name format refers to a secure file name.
+*/
+inline TBool TSqlSrvFileData::IsSecureFileNameFmt() const
+	{
+	return iIsSecureFileNameFmt;
+	}
+	
+/**
+@return The secure UID, if the file name is a secure file name, KNullUid otherwise.
+*/
+inline TUid TSqlSrvFileData::SecureUid() const
+	{
+	return iSecureUid;
+	}
+
+/**
+Returns true if the file was created, false if the file was opened by the client side.
+This function should be used only for private databases, e.g. for which ContainHandles() returns true.
+@return True if the file was created, false if the file was opened by the client side.
+
+@see TSqlSrvFileData::ContainHandles()
+*/
+inline TBool TSqlSrvFileData::IsCreated() const
+	{
+	return iCreated;
+	}
+
+/**
+@return True if the file is a read-only file.
+*/
+inline TBool TSqlSrvFileData::IsReadOnly() const
+	{
+	return iReadOnly;
+	}
+
+/**
+@return True if the file name contains file and session handles
+*/
+inline TBool TSqlSrvFileData::ContainHandles() const
+	{
+	return iFileName[0] == KFileHandleSeparator;
+	}
+
+/**
+@return A reference to the configuration parameters.
+*/
+inline const TSqlSrvConfigParams& TSqlSrvFileData::ConfigParams() const
+	{
+	return iConfigParams;
+	}
+
+/**
+@return A pointer to the server's store of existing database configuration file names 
+        (will be NULL if there are no existing configuration files)
+*/	
+inline const CDbConfigFiles* TSqlSrvFileData::DbConfigFiles() const
+	{
+	return iDbConfigFilesPtr;
+	}
+
+#endif//__SQLSRVFILEDATA_H__