diff -r 000000000000 -r 08ec8eefde2f persistentstorage/sql/SRC/Common/SqlAssert.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/persistentstorage/sql/SRC/Common/SqlAssert.h Fri Jan 22 11:06:30 2010 +0200 @@ -0,0 +1,134 @@ +// 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 __SQLASSERT_H__ +#define __SQLASSERT_H__ + +#include +#include "UTraceSql.h" + +//#define _SQLPROFILER //Enable _SQLPROFILER if you want to use the TSqlResourceProfiler functions. Do not forget the same macro declaration in os_symbian.cpp file. + +#ifdef _DEBUG +#define _ASSERTIONS +//#define _LOGGING +//#define _NOTIFY //Enable _NOTIFY if you want to get more detailed output in _DEBUG mode +#endif + +const TInt KSqlLeavePanic = -359;//The (last-1) error code from the reserved area for the SQL component. + +//Forward declarations +class RMessage2; + +/** +Set of useful functions to print diagnostic messages on the console when an error/leaving occurs. + +@internalComponent +*/ +class Util + { + 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 void* LeaveIfNull(const TText* aFile, TInt aLine, 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); + +private: + 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 + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////// _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 + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////// _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) + +//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) + +//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) + +//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)) + +#else + +#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)) + +#endif //_NOTIFY || SYMBIAN_TRACE_SQL_ERR + +#endif//__SQLASSERT_H__