persistentstorage/sql/SRC/Common/SqlAssert.h
changeset 0 08ec8eefde2f
child 12 6b6fd149daa2
--- /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 <e32std.h>
+#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__