diff -r 28839de615b4 -r 26645d81f48d persistentstorage/sql/SRC/Common/SqlAssert.h --- a/persistentstorage/sql/SRC/Common/SqlAssert.h Thu Aug 19 11:36:21 2010 +0300 +++ b/persistentstorage/sql/SRC/Common/SqlAssert.h Tue Aug 31 16:57:14 2010 +0300 @@ -17,17 +17,68 @@ #define __SQLASSERT_H__ #include -#include "UTraceSql.h" +#include "SqlPanic.h" //TSqlPanic + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +//Enable _SQLPROFILER if you want to use the TSqlResourceProfiler functions. Do not forget the same macro declaration in os_symbian.cpp file. + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +//All macros in this header will have a non-void definition only if the OST_TRACE_COMPILER_IN_USE macro +//is defined. +//In order to get the traces enabled, the OST_TRACE_COMPILER_IN_USE macro has to be defined in +//OstTraceDefinitions.h file. +//After that, the trace output can be redirected by defining _SQL_RDEBUG_PRINT or specific categories +//of traces can be enabled/disabled. + +//Enable _SQL_RDEBUG_PRINT if you want to redirect the tracing output via RDebug::Print() +//#define _SQL_RDEBUG_PRINT -//#define _SQLPROFILER //Enable _SQLPROFILER if you want to use the TSqlResourceProfiler functions. Do not forget the same macro declaration in os_symbian.cpp file. +//Enable _SQL_BORDER_TRACE_ENABLED if you want to get the entry/exit traces compiled in the binary +//#define _SQL_BORDER_TRACE_ENABLED + +//Enable _SQL_INTERNALS_TRACE_ENABLED if you want to get the internal traces compiled in the binary +//#define _SQL_INTERNALS_TRACE_ENABLED + +//Enable _SQL_BUR_TRACE_ENABLED if you want to get the backup&restore traces compiled in the binary +//#define _SQL_BUR_TRACE_ENABLED + +//Enable _SQL_COMPACT_TRACE_ENABLED if you want to get the background compaction traces compiled in the binary +//#define _SQL_COMPACT_TRACE_ENABLED + +//Enable _SQL_SESSION_TRACE_ENABLED if you want to get the client and server sessions traces compiled in the binary +//#define _SQL_SESSION_TRACE_ENABLED + +//Enable _SQL_AUTHORIZER_TRACE_ENABLED if you want to trace the authorizer parameters +//#define _SQL_AUTHORIZER_TRACE_ENABLED + +//Enable _SQL_BLOB_TRACE_ENABLED if you want to trace the server side BLOB calls +//#define _SQL_BLOB_TRACE_ENABLED #ifdef _DEBUG -#define _ASSERTIONS -//#define _LOGGING -//#define _NOTIFY //Enable _NOTIFY if you want to get more detailed output in _DEBUG mode + //Enable _SQL_PANIC_TRACE_ENABLED if you want to get more detailed output regarding panics + //#define _SQL_PANIC_TRACE_ENABLED + + //Enable _SQL_LEAVE_TRACE_ENABLED if you want to get more detailed output regarding leaving locations + //#define _SQL_LEAVE_TRACE_ENABLED #endif -const TInt KSqlLeavePanic = -359;//The (last-1) error code from the reserved area for the SQL component. +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +//Wrap every string (file name, file path, etc.) you want to trace, in a __SQLPRNSTR()/__SQLPRNSTR8() macro. +//There is a difference how RDebug::Print() and OstTraceExt() work. +#if defined _SQL_RDEBUG_PRINT + const TInt KSqlMaxPrnStrLen = 512; + #define __SQLPRNSTR(des) &des + const TDesC* SqlDes8to16Ptr(const TDesC8& aDes, TDes& aOut); + #define __SQLPRNSTR8(des, out) SqlDes8to16Ptr(des, out) +#else + #define __SQLPRNSTR(des) des + #define __SQLPRNSTR8(des, out) des +#endif + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //Forward declarations class RMessage2; @@ -37,98 +88,104 @@ @internalComponent */ -class Util +class TSqlUtil { friend void UtilFileNameTest(); public: static void GetTimeStr(TDes& aWhere); - static TInt Assert(const TText* aFile, TInt aLine, TInt aPanicCode); - static void Leave(const TText* aFile, TInt aLine, TInt aError); - static TInt LeaveIfError(const TText* aFile, TInt aLine, TInt aError); - static const void* LeaveIfNull(const TText* aFile, TInt aLine, const void* aPtr); - static TInt PanicClientL(const TText* aFile, TInt aLine, const RMessage2& aMessage, TInt aPanicCode); - static void ErrorPrint(const TDesC& aMsg, TInt aErr); - static void ErrorPrint(const TDesC& aMsg, const TDesC& aStr); + static TInt Panic(const TText* aFile, TInt aLine, TInt aPanicCode, TUint aHandle); + static void Leave(const TText* aFile, TInt aLine, TInt aError, TUint aHandle); + static TInt LeaveIfError(const TText* aFile, TInt aLine, TInt aError, TUint aHandle); + static void* LeaveIfNull(const TText* aFile, TInt aLine, void* aPtr, TUint aHandle); + static TInt PanicClientL(const TText* aFile, TInt aLine, const RMessage2& aMessage, TInt aPanicCode, TUint aHandle); private: - static TPtrC Filename(const TText* aFile); + static TPtrC FileName(const TText* aFile); }; -#define __STRING(str) _S(str) - -//This macro should be used when there is a need to panic the client/server if "expr" condition is not satisfied. -//Works in both debug and release modes. -#define __SQLASSERT_ALWAYS(expr, panicCode) (void)((expr) || Util::Assert(__STRING(__FILE__), __LINE__, panicCode)) - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -////////////////////////////// _ASSERTIONS ///////////////////////////////////////////////////////// -#ifdef _ASSERTIONS -//This macro should be used when there is a need to panic the client/server if "expr" condition is not satisfied. -//Works in only in debug mode. In release mode evaluates to nothing. -#define __SQLASSERT(expr, panicCode) (void)((expr) || Util::Assert(__STRING(__FILE__), __LINE__, panicCode)) - -#else - -#define __SQLASSERT(expr, panicCode) void(0) - -#endif //_ASSERTIONS +#define __SQLSTRING(str) _S(str) /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -////////////////////////////// _LOGGING ////////////////////////////////////////////////////////// -#if defined _LOGGING || defined SYMBIAN_TRACE_SQL_ERR -//This macro should be used to log the message "msg" containing the "err" error code. -//The message "msg" should contain the format specifier %d. -//Works only in debug mode. In release mode evaluates to nothing. -#define __SQLLOG_ERR(msg, err) Util::ErrorPrint(msg, err) - -//This macro should be used to log the message "msg" containing the "str" string. -//The message "msg" should contain the format specifier %S. -//Works only in debug mode. In release mode evaluates to nothing. -#define __SQLLOG_STRING(msg, str) Util::ErrorPrint(msg, str) - -#else - -#define __SQLLOG_ERR(msg, err) do {} while(0) -#define __SQLLOG_STRING(msg, str) do {} while(0) - -#endif //_LOGGING || SYMBIAN_TRACE_SQL_ERR +//__SQLPANIC/__SQLPANIC2 macro is used for printing out additional information when panic occurs in SQL: +//source file name, line number, "this" pointer, panic category. +#define __SQLPANIC(aPanicCode) TSqlUtil::Panic(__SQLSTRING(__FILE__), __LINE__, aPanicCode, (TUint)this) +#define __SQLPANIC2(aPanicCode) TSqlUtil::Panic(__SQLSTRING(__FILE__), __LINE__, aPanicCode, 0) /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -////////////////////////////// _NOTIFY /////////////////////////////////////////////////////////// -#if defined _NOTIFY || defined SYMBIAN_TRACE_SQL_ERR //This macro should be used to leave with "err" error code. //In debug mode prints the file name and the line number where the leaving occurs and then leaves. //In release mode only leaves. -#define __SQLLEAVE(err) Util::Leave(__STRING(__FILE__), __LINE__, err) +#define __SQLLEAVE(err) TSqlUtil::Leave(__SQLSTRING(__FILE__), __LINE__, err, (TUint)this) +#define __SQLLEAVE2(err) TSqlUtil::Leave(__SQLSTRING(__FILE__), __LINE__, err, 0) //This macro should be used to leave with "err" error code, if the error code is negative. //In debug mode prints the file name and the line number where the leaving occurs and then leaves. //In release mode only leaves. -#define __SQLLEAVE_IF_ERROR(err) Util::LeaveIfError(__STRING(__FILE__), __LINE__, err) +#define __SQLLEAVE_IF_ERROR(err) TSqlUtil::LeaveIfError(__SQLSTRING(__FILE__), __LINE__, err, (TUint)this) +#define __SQLLEAVE_IF_ERROR2(err) TSqlUtil::LeaveIfError(__SQLSTRING(__FILE__), __LINE__, err, 0) //This macro should be used to leave with KErrNoMemory if "ptr" argument is NULL. //In debug mode prints the file name and the line number where the leaving occurs and then leaves. //In release mode only leaves. -#define __SQLLEAVE_IF_NULL(ptr) Util::LeaveIfNull(__STRING(__FILE__), __LINE__, ptr) +#define __SQLLEAVE_IF_NULL(ptr) TSqlUtil::LeaveIfNull(__SQLSTRING(__FILE__), __LINE__, ptr, (TUint)this) //This macro should be used to panic the client and leave if "expr" condition is not satisfied. //In debug mode prints the file name and the line number where the leaving occurs and then //panics the client and leaves. //In release mode only panics the client and leaves. -#define __SQLPANIC_CLIENT(expr, msg, panicCode) (void)((expr) || Util::PanicClientL(__STRING(__FILE__), __LINE__, msg, panicCode)) +#define __SQLPANIC_CLIENT(expr, msg, panicCode) (void)((expr) || TSqlUtil::PanicClientL(__SQLSTRING(__FILE__), __LINE__, msg, panicCode, (TUint)this)) +#define __SQLPANIC_CLIENT2(expr, msg, panicCode) (void)((expr) || TSqlUtil::PanicClientL(__SQLSTRING(__FILE__), __LINE__, msg, panicCode, 0)) + +//=================================================================================== + +#ifdef _SQL_BORDER_TRACE_ENABLED + #define SQL_TRACE_BORDER(trace) trace +#else + #define SQL_TRACE_BORDER(trace) do {} while(0) +#endif +#ifdef _SQL_INTERNALS_TRACE_ENABLED + #define SQL_TRACE_INTERNALS(trace) trace #else + #define SQL_TRACE_INTERNALS(trace) do {} while(0) +#endif + +#ifdef _SQL_BUR_TRACE_ENABLED + #define SQL_TRACE_BUR(trace) trace +#else + #define SQL_TRACE_BUR(trace) do {} while(0) +#endif -#define __SQLLEAVE(err) User::Leave(err) -#define __SQLLEAVE_IF_ERROR(err) User::LeaveIfError(err) -#define __SQLLEAVE_IF_NULL(ptr) User::LeaveIfNull(ptr) -#define __SQLPANIC_CLIENT(expr, msg, panicCode) (void)((expr) || ::SqlPanicClientL(msg, panicCode)) +#ifdef _SQL_COMPACT_TRACE_ENABLED + #define SQL_TRACE_COMPACT(trace) trace +#else + #define SQL_TRACE_COMPACT(trace) do {} while(0) +#endif + +#ifdef _SQL_SESSION_TRACE_ENABLED + #define SQL_TRACE_SESSION(trace) trace +#else + #define SQL_TRACE_SESSION(trace) do {} while(0) +#endif -#endif //_NOTIFY || SYMBIAN_TRACE_SQL_ERR +#ifdef _SQL_AUTHORIZER_TRACE_ENABLED + #define SQL_TRACE_AUTHORIZER(trace) trace +#else + #define SQL_TRACE_AUTHORIZER(trace) do {} while(0) +#endif + +#ifdef _SQL_BLOB_TRACE_ENABLED + #define SQL_TRACE_BLOB(trace) trace +#else + #define SQL_TRACE_BLOB(trace) do {} while(0) +#endif + +//=================================================================================== #endif//__SQLASSERT_H__