loggingservices/eventlogger/LogServ/inc/LOGFILTQ.H
changeset 0 08ec8eefde2f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/loggingservices/eventlogger/LogServ/inc/LOGFILTQ.H	Fri Jan 22 11:06:30 2010 +0200
@@ -0,0 +1,75 @@
+// Copyright (c) 2002-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 __LOGFILTQ__
+#define __LOGFILTQ__
+
+#include <badesca.h>
+#include <logwrap.h>
+#include "LogDynBuf.h"
+#include "LogCliServShared.h"
+
+// Classes referenced
+class CLogFilter;
+class CLogFilterList;
+class MLogServDatabaseTransactionInterface;
+
+/**
+This class provides only one public method (apart from constructor) - BuildExprLC().
+BuildExprLC() accepts as an input parameter a list with view filters and constructs from them
+a "WHERE" SQL expression that is returned to the caller into the RLogDynBuf output parameter. 
+
+@see CLogFilterList
+@see RLogDynBuf
+@see MLogServDatabaseTransactionInterface
+@internalComponent
+*/
+class TLogFilterExprBuilder
+	{
+public:
+    TLogFilterExprBuilder(MLogServDatabaseTransactionInterface& aDatabase);
+	void BuildExprLC(RLogDynBuf& aExpr, const CLogFilterList& aFilterList, const TDesC& aInitial, 
+                     TLogFilterConstructionType aType = ELogFilterConstructFilterByFilterFieldByField);
+	
+private:
+	void DoNextProcessFilterByFilterFieldByFieldL(RLogDynBuf& aExpr);
+	void DoNextProcessFieldByFieldFilterByFilterL(RLogDynBuf& aExpr);
+	void MakePredicatesL();
+	void MakeConditionL(RLogDynBuf& aExpr);
+	void MakeFlagPredicatesL();
+	const TDesC& ColumnName() const;
+    void MakeNullPredicate(TDes& aDes);
+	void MakePredicateL(TDes& aDes, const CLogFilter& aFilter);
+    TBool IsDuplicateNullField() const;
+	TBool IsDuplicateField(const CLogFilter& aFilter) const;
+	TBool IsFieldEmpty(const CLogFilter& aFilter) const;
+	TBool IsDuplicate(const CLogFilter& aFilter1, const CLogFilter& aFilter2) const;
+	void Invariant() const;
+
+private:
+	MLogServDatabaseTransactionInterface& iDatabase;
+    const CLogFilterList* iFilterList;
+    const TDesC* iInitial;
+    TLogFilterConstructionType iConstructionType;
+	TInt iFilterIndex;
+	TUint16 iField; //It must be 16-bit. The iField value is read from a resource file. 
+					//See CLogServRecentCondition::ConstructL() implementation. 
+					//The iField type width then restricts the max number of field macro values - 
+					//ELogContactField...ELogSimIdField. 
+	TInt iFlagIndex;
+    CDesCArrayFlat* iPredicateList;
+	};
+
+#endif