--- /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<KLineLength> 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; i<aRowData.Size(); ++i )
+ {
+ if ( i>0 ) 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, "<unused>" );
+ 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<TInt>(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