secureswitools/swisistools/source/dbmanager/dbprocessor.cpp
branchRCL_3
changeset 66 8b7f4e561641
parent 65 7333d7932ef7
--- a/secureswitools/swisistools/source/dbmanager/dbprocessor.cpp	Tue Aug 31 15:21:33 2010 +0300
+++ b/secureswitools/swisistools/source/dbmanager/dbprocessor.cpp	Wed Sep 01 12:22:02 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -30,130 +30,10 @@
 #include "logs.h"
 #include "util.h"
 #include "symbiantypes.h"
-#include "utf8_wrapper.h"
-#include "../sisxlibrary/utility.h"
+
 #include <string>
 #include <cassert>
 
-#ifdef __linux__
-#include <dlfcn.h>
-
-
-void* GetProcAddress(HINSTANCE aHandle, const char* aSymbol)
-	{
-	return dlsym(aHandle, aSymbol);
-	}
-
-HINSTANCE LoadLibraryA(const char* aLibraryName)
-	{
-	HINSTANCE handleUsingDefaultSearchPath = dlopen(aLibraryName, RTLD_LAZY);
-
-	if( handleUsingDefaultSearchPath == NULL )
-	{
-		// Once the dlopen() fails by not finding the aLibraryName in the default
-		// path specified by LD_LIBRARY_PATH, we will look in the epoc32/tools 
-		// path as the second option.
-
-		const char* epocRoot = getenv("EPOCROOT");		
-		if(NULL == epocRoot)
-			{
-			throw CException("EPOCROOT environment variable not specified.", ExceptionCodes::EEnvNotSpecified);
-			}
-		std::string epocRootStr(epocRoot); 
-
-		std::string absPathToLibrary = epocRootStr + std::string("epoc32/tools/") + std::string(aLibraryName);
-		HINSTANCE handleUsingAbsSearchPath = dlopen(absPathToLibrary.c_str(), RTLD_LAZY);
-
-		return handleUsingAbsSearchPath;
-	}
-
-	return handleUsingDefaultSearchPath;
-	}
-
-int FreeLibrary(HINSTANCE aHandle)
-	{
-	// FreeLibrary returns non-zero value on success whereas
-	// dlcose returns zero on success.
-	return (dlclose(aHandle) == 0)? true: false;
-	}
-
-std::string GetErrorMessage()
-	{
-	return dlerror();
-	}
-
-static utf16WString utf32WString2utf16WString(std::wstring& aParameter)
-{
-	int strLen = aParameter.length();
-	const wchar_t * source = aParameter.c_str();
-	unsigned short int* buffer = new unsigned short int[(strLen + 1) * 2];
-
-	// Using a temp variable in place of buffer as ConvertUTF32toUTF16 modifies the source pointer passed.
-	unsigned short int* temp = buffer;
-
-	ConvertUTF32toUTF16(&source, source + strLen, &temp,  temp + strLen, lenientConversion);
-
-	// Appending NUL to the converted buffer.
-	*temp = 0;
-
-	utf16WString utf16Ws;
-	utf16Ws.resize(strLen);
-
-	// The built-in basic_string template class copy operation
-	// truncates when a NUL is encountered when a c_str() is
-	// used to construct the required string.
-	// So, if aParameter is any hashable string having the
-	// syntax : swtypeName + L'\0' + someId then, we will end
-	// up returning only part of the converted UTF-16 string.
-	// Hence, we resort to the explicit copy operation with
-	// two bytes at a time.
-	while( strLen-- )
-	{
-		utf16Ws[ strLen ] = buffer[ strLen ];
-	}
-
-	delete[] buffer;
-
-	return utf16Ws;
-}
-
-static std::wstring utf16WString2utf32WString(utf16WString& aParameter)
-{	
-	int strLen = aParameter.length();
-	const unsigned short int* source = aParameter.c_str();
-	wchar_t* buffer = new wchar_t[ strLen + 1 ];
-
-	// Using a temp variable in place of buffer as ConvertUTF16toUCS4 modifies the source pointer passed.
-	wchar_t* temp = buffer;
-
-	ConvertUTF16toUCS4(&source, source + strLen, &temp, temp + strLen);
-
-	// Appending NUL to the converted buffer.
-	*temp = 0;
-
-	std::wstring utf32Ws(buffer);
-
-	delete[] buffer;
-
-	return utf32Ws;
-}
-
-#else
-std::string GetErrorMessage()
-	{
-	LPCVOID lpMsgBuf;
-		
-	DWORD err = GetLastError();
-	FormatMessage	(	FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM |
-						FORMAT_MESSAGE_IGNORE_INSERTS, NULL, err,
-						MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf,
-						0, NULL 
-					);
-	std::wstring wErrMsg((wchar_t*)lpMsgBuf);
-	return wstring2string(wErrMsg);
-	}
-#endif // __linux__
-
 TDbLibrary* iLibraryHandler = NULL;
 
 TDbLibrary::TDbLibrary(const std::string& aDllPath)
@@ -175,7 +55,18 @@
 	int retCode = FreeLibrary(sqLiteHndl);
 	if(retCode == 0)
 		{
-		//LOGERROR(GetErrorMessage());
+		LPCVOID lpMsgBuf;
+		
+		DWORD err = GetLastError();
+		FormatMessage	(	FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM |
+							FORMAT_MESSAGE_IGNORE_INSERTS, NULL, err,
+							MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf,
+							0, NULL 
+						);
+		std::wstring wErrMsg((wchar_t*)lpMsgBuf);
+		std::string errMsg = Util::wstring2string(wErrMsg);
+		//LOGERROR(errMsg);
+		
 		}
 	}
 
@@ -276,7 +167,16 @@
 	if(aFnPtr != NULL)
 		return;
 
-	std::string errMsg = GetErrorMessage();
+	LPCVOID lpMsgBuf;
+		
+	DWORD err = GetLastError();
+	FormatMessage	(	FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM |
+						FORMAT_MESSAGE_IGNORE_INSERTS, NULL, err,
+						MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf,
+						0, NULL 
+					);
+	std::wstring wErrMsg((wchar_t*)lpMsgBuf);
+	std::string errMsg = Util::wstring2string(wErrMsg);
 	//LOGERROR(errMsg);
 	throw CException(errMsg,ExceptionCodes::ELibraryLoadError);
 	}
@@ -462,46 +362,9 @@
 	CheckSqlErrCode(err);
 	}
 
-
-#ifdef __TOOLS2_LINUX__
-void CStatement::BindStr(TInt aParameterIndex, const std::wstring &aParameterStr, int aConvertSlash=allowSlashConversion)
-#else
 void CStatement::BindStr(TInt aParameterIndex, const std::wstring &aParameterStr)
-#endif
 	{
-	/*
-	 * Under LINUX : Because of the UTF-32 format of wstring, we can't directly use the sqlite3_bind_text16() which
-	 * requires UTF-16 format. So, we convert the UTF-32 data into UTF-16 before using it.
-	 *
-	 * Under WINDOWS : No conversion required since wstring will be in UTF-16 format itself.
-	 */
-
-    #ifdef __LINUX__
-	// Make sure that the wstring passed to this function is not having any trailing
-	// explicit NUL( Preferably, pass c_str() part of wstring ).
-    //
-	// Only case in which you shouldn't pass c_str() is that the wstring has NUL as
-	// part of its actual string content(like swtypename + L'\0' + someID etc).
-
-	// In order to maintain the consistency of DB contents across the WINDOWS and LINUX platforms, before interacting
-	// with the DB we convert the local paths into WINDOWS specific paths.
-    //
-	// If aParameterStr is not a PATH but contains a forward slash, we should restrain 
-	// from the slash conversion. One such instance is MimeType.
-	//
-	std::wstring temp = aParameterStr;
-	if( aConvertSlash == allowSlashConversion )
-	{
-	    ConvertToWindowsSpecificPaths(temp);
-	}
-
-    utf16WString utf16s = utf32WString2utf16WString(temp);
-
-	TInt err = iLibraryHandler.sqlite3_bind_text16(iStmtHandle, aParameterIndex, utf16s.c_str(), aParameterStr.size()*2, SQLITE_TRANSIENT);
-
-    #else
 	TInt err = iLibraryHandler.sqlite3_bind_text16(iStmtHandle, aParameterIndex, aParameterStr.c_str(), aParameterStr.size()*2, SQLITE_TRANSIENT);
-	#endif
 	// The fifth argument has the value SQLITE_TRANSIENT, it means that SQLite makes its own private copy of the data immediately
 	CheckSqlErrCode(err);
 	}
@@ -513,25 +376,6 @@
 	CheckSqlErrCode(err);
 	}
 
-void CStatement::BindBinary(TInt aParameterIndex, const std::wstring &aParameterStr)
-	{
-	#ifdef __LINUX__
-	// To maintain consistency of the binary equivalent of the wstring
-	// being binded, we convert the wstring with UTF-32 encoding under LINUX
-	// to UTF-16 encoding which is same as that of wstring under WINDOWS.
-	
-	std::wstring temp = aParameterStr;
-	utf16WString utf16s = utf32WString2utf16WString(temp);
-
-	TInt err = iLibraryHandler.sqlite3_bind_blob(iStmtHandle, aParameterIndex, utf16s.c_str(), aParameterStr.size()*2, SQLITE_TRANSIENT);
-	#else
-	TInt err = iLibraryHandler.sqlite3_bind_blob(iStmtHandle, aParameterIndex, aParameterStr.c_str(), aParameterStr.size()*2, SQLITE_TRANSIENT);
-	#endif
-
-	// The fifth argument has the value SQLITE_TRANSIENT, it means that SQLite makes its own private copy of the data immediately
-	CheckSqlErrCode(err);
-	}
-
 void CStatement::Reset()
 	{
 	TInt err = iLibraryHandler.sqlite3_reset(iStmtHandle);
@@ -560,28 +404,8 @@
 
 std::wstring CStatement::StrColumn(int aColumnId ) const
 	{
-	/*
-	 * Under LINUX : While writing onto DB, we bind the wstring after converting it into UTF-16 from
-	 * UTF-32 format. So, now while reading we need to convert the UTF-16 data back to UTF-32
-	 * format so that we can return the required UTF-32 wstring.
-	 *
-	 * Under WINDOWS : No conversion required since wstring will be in UTF-16 format itself.
-	 */
-	#ifdef __LINUX__
-
-	utf16WString utf16S = iLibraryHandler.sqlite3_column_text16(iStmtHandle, aColumnId);
-	std::wstring utf32S = utf16WString2utf32WString(utf16S);
-
-	// The DB will have WINDOWS specific paths to maintain the consistency of DB contents across WINDOWS and LINUX platforms.
-	// So, after reading under LINUX we will convert them into local paths.
-
-    ConvertToLinuxSpecificPaths(utf32S);
-
-	#else
-	std::wstring utf32S(static_cast<const wchar_t*>(iLibraryHandler.sqlite3_column_text16(iStmtHandle, aColumnId)));
-	#endif
-
-	return utf32S;
+	std::wstring columnValue(static_cast<const wchar_t*>(iLibraryHandler.sqlite3_column_text16(iStmtHandle, aColumnId)));
+	return columnValue;
 	}
 
 TInt64 CStatement::Int64Column(int aColumnId ) const