diff -r 000000000000 -r c53acadfccc6 metadataengine/server/src/mdslogger.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/metadataengine/server/src/mdslogger.cpp Mon Jan 18 20:34:07 2010 +0200 @@ -0,0 +1,334 @@ +/* +* 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: Metadata server logger class* +*/ + +#include "mdslogger.h" +#include "mdsclausebuffer.h" +#include "mdssqliteconnection.h" + + +#ifdef LOG_MASTER_FLAG + +// ========================= MEMBER FUNCTIONS ================================== + +// ------------------------------------------------ +// NewInstanceL +// ------------------------------------------------ +// +CMdSLogger* CMdSLogger::NewInstanceL() + { + static CMdSLogger* singleton; + if ( singleton == NULL ) + { + singleton = new (ELeave) CMdSLogger(); + CleanupStack::PushL(singleton); + singleton->ConstructL(); + CleanupStack::Pop(singleton); + } + return singleton; + } + +// ------------------------------------------------ +// Default constructor +// ------------------------------------------------ +// +CMdSLogger::CMdSLogger() + : iAltFileFlag(EFalse), iValid(EFalse) + { + } + +// ------------------------------------------------ +// Destructor +// ------------------------------------------------ +// +CMdSLogger::~CMdSLogger() + { + iLog.CloseLog(); + iLog.Close(); + } + +// ------------------------------------------------ +// ConstructL +// ------------------------------------------------ +// +void CMdSLogger::ConstructL() + { + User::LeaveIfError( iLog.Connect() ); + iLog.CreateLog(KDirectory, KFilename, EFileLoggingModeOverwrite); + iLog.SetDateAndTime(EFalse, ETrue); + + iValid = iLog.LogValid(); + + // set up logging categories + Activate( ELogAlways ); +#ifdef LOG_QUERY + Activate( ELogQuery ); +#endif +#ifdef LOG_DB + Activate( ELogDb ); +#endif +#ifdef LOG_MUTEX + Activate( ELogMutex ); +#endif +#ifdef LOG_SERVER + Activate( ELogServer ); +#endif + } + +// ------------------------------------------------ +// LogLit +// ------------------------------------------------ +// +void CMdSLogger::LogLit( const TDesC8& aText ) + { + if (!iValid) + { + return; + } + + TInt offset = 0; + TInt linecount = 0; + TInt length = aText.Length(); + while( offset < length ) + { + TInt partLength = Min( length-offset, KLineLength ); +#ifdef MDE_FILE_LOGGING + iLog.Write( aText.Mid( offset, partLength ) ); +#else + TBuf buffer; + buffer.Copy( aText.Mid( offset, partLength ) ); + RDebug::Print( buffer ); +#endif + ++linecount; + offset += partLength; + } + CheckSize( linecount ); + } + +// ------------------------------------------------ +// LogLit +// ------------------------------------------------ +// +void CMdSLogger::LogLit( const TDesC16& aText ) + { + if (!iValid) + { + return; + } + + TInt offset = 0; + TInt linecount = 0; + TInt length = aText.Length(); + while( offset < length ) + { + TInt partLength = Min( length-offset, KLineLength ); +#ifdef MDE_FILE_LOGGING + iLog.Write( aText.Mid( offset, partLength ) ); +#else + RDebug::Print( aText.Mid( offset, partLength ) ); +#endif + ++linecount; + offset += partLength; + } + CheckSize( linecount ); + } + +// ------------------------------------------------ +// CheckSize +// ------------------------------------------------ +// +void CMdSLogger::CheckSize( TInt aLines ) + { +#ifdef MDE_FILE_LOGGING + iLineCounter += aLines; + if ( iLineCounter < KLogfileMaxLength ) return; // no worries + + iLineCounter = 0; + + iLog.CloseLog(); + + if ( !iAltFileFlag ) + { + iLog.CreateLog(KDirectory, KAltFilename, EFileLoggingModeOverwrite); + iAltFileFlag = ETrue; + } + else + { + iLog.CreateLog(KDirectory, KFilename, EFileLoggingModeOverwrite); + iAltFileFlag = EFalse; + } + iLog.SetDateAndTime(EFalse, ETrue); +#else + aLines = 0; +#endif + } + +// --------------------------------------------------------------------------- +// DescribeL Returns sql clause with variables +// --------------------------------------------------------------------------- +// +CMdsClauseBuffer* CMdSLogger::DescribeL( const CMdsClauseBuffer& aBuffer, const RRowData& aRowData ) + { + if (!iValid) + { + return NULL; + } + + CMdsClauseBuffer* buf = CMdsClauseBuffer::NewLC( aBuffer.ConstBufferL().Length() + 1024 ); + buf->BufferL().Copy( aBuffer.ConstBufferL() ); + buf->AppendL( _L(" variables=") ); + for( TInt i=0; i0 ) buf->AppendL( _L(", ") ); + LogVariableL( *buf, aRowData.Column(i) ); + } + CleanupStack::Pop( buf ); + return buf; + } + +// --------------------------------------------------------------------------- +// DescribeL Returns sql clause with variables +// --------------------------------------------------------------------------- +// +CMdsClauseBuffer* CMdSLogger::DescribeFullL( const TDesC& aBuffer, const RRowData& aRowData ) + { + if (!iValid) + { + return NULL; + } + + const TChar KQuestionMark = '?'; + TPtrC buffer( aBuffer ); + const TInt aBufferLength = aBuffer.Length(); + CMdsClauseBuffer* buf = CMdsClauseBuffer::NewLC( aBufferLength *2 ); + TInt columnNumber = 0; + TInt qpos = buffer.Locate( KQuestionMark ); + while( qpos >= 0 ) + { + buf->ReserveSpaceL( buf->ConstBufferL().Length() + qpos ); + buf->BufferL().Append( buffer.Left( qpos ) ); + LogVariableL( *buf, aRowData.Column(columnNumber++) ); + buffer.Set( buffer.Mid( qpos + 1 ) ); + qpos = buffer.Locate( KQuestionMark ); + } + buf->ReserveSpaceL( buf->ConstBufferL().Length() + buffer.Length() ); + buf->BufferL().Append( buffer ); + + CleanupStack::Pop( buf ); + return buf; + } + +// --------------------------------------------------------------------------- +// LogVariableL Logging method for query variables +// --------------------------------------------------------------------------- +// +void CMdSLogger::LogVariableL( CMdsClauseBuffer& aBuf, const TColumn& aColumn ) + { + _LIT( KApostrophe, "\'" ); + switch( aColumn.Type() ) + { + case EColumnNotUsed: + { + aBuf.ReserveSpaceL( aBuf.ConstBufferL().Length() + 8 ); + _LIT( KMessageUnused, "" ); + aBuf.BufferL().Append( KMessageUnused ); + break; + } + case EColumnBool: + { + TBool val=0; + aColumn.Get( val ); + aBuf.ReserveSpaceL( aBuf.ConstBufferL().Length() + 4 ); + aBuf.BufferL().AppendNum( val ); + } + break; + case EColumnInt32: + { + TInt32 val=0; + aColumn.Get( val ); + aBuf.ReserveSpaceL( aBuf.ConstBufferL().Length() + 16 ); + aBuf.BufferL().AppendNum( static_cast(val) ); + } + break; + case EColumnUint32: + { + TUint32 val=0; + aColumn.Get( val ); + aBuf.ReserveSpaceL( aBuf.ConstBufferL().Length() + 16 ); + aBuf.BufferL().AppendNum( val, EDecimal ); + } + break; + case EColumnTime: + { + TTime val(0); + TBuf<128> tmp; + aColumn.Get( val ); + _LIT(KTimeFormat, "%D%1.%M%2.%Y%3 %H:%T:%S"); + val.FormatL(tmp, KTimeFormat); + aBuf.ReserveSpaceL( aBuf.ConstBufferL().Length() + 20 ); + aBuf.BufferL().Append( tmp ); + } + break; + case EColumnInt64: + { + TInt64 val=0; + aColumn.Get( val ); + aBuf.ReserveSpaceL( aBuf.ConstBufferL().Length() + 32 ); + aBuf.BufferL().AppendNum( val ); + } + break; + case EColumnReal32: + { + TReal32 val=0; + aColumn.Get( val ); + aBuf.ReserveSpaceL( aBuf.ConstBufferL().Length() + 32 ); + aBuf.BufferL().AppendNum( val, TRealFormat() ); + } + break; + case EColumnReal64: + { + TReal64 val=0; + aColumn.Get( val ); + aBuf.ReserveSpaceL( aBuf.ConstBufferL().Length() + 32 ); + aBuf.BufferL().AppendNum( val, TRealFormat() ); + } + break; + case EColumnDes16: + { + TPtrC16 val= TPtr16((TUint16*)0, 0); //KNullPtr16; + aColumn.Get( val ); + if( val.Ptr() ) + { + aBuf.ReserveSpaceL( aBuf.ConstBufferL().Length() + + val.Length() + 2 * KApostrophe().Length() ); // for '' + aBuf.BufferL().Append( KApostrophe ); + aBuf.BufferL().Append( val ); + aBuf.BufferL().Append( KApostrophe ); + } + else + { + _LIT( KNull, "NULL" ); + aBuf.ReserveSpaceL( aBuf.ConstBufferL().Length() + + KNull().Length() ); + aBuf.BufferL().Append( KNull ); + } + } + break; + default: + User::Leave( KErrCorrupt ); + } + } + +#endif // LOG_MASTER_FLAG