--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/metadataengine/server/inc/mdsfindsqlclause.h Mon Jan 18 20:34:07 2010 +0200
@@ -0,0 +1,476 @@
+/*
+* Copyright (c) 2007-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: Constructs SQL clauses for object find*
+*/
+
+#ifndef __MDSFINDSQLCLAUSE_H__
+#define __MDSFINDSQLCLAUSE_H__
+
+#include <e32base.h>
+#include <badesca.h>
+
+#include "mdccommon.h"
+#include "mdssqliteconnection.h"
+
+// FORWARD DECLARATIONS
+class CMdCSerializationBuffer;
+class CMdsSchema;
+class CMdsNamespaceDef;
+class CMdsObjectDef;
+class CMdsClauseBuffer;
+class CMdsPropertyDef;
+class TMdCSearchCriteria;
+class TMdCRelationCondition;
+
+// CLASS DECLARATION
+/**
+* CMdSFindSqlClause.
+* Class constructs SQL search clauses.
+*/
+class CMdSFindSqlClause : public CBase
+ //public MMdSFindCriteria
+ {
+ private:
+ enum TAppendIn
+ {
+ EAppendInFalse,
+ EAppendInTrue,
+ EAppendInRelationLeft,
+ EAppendInRelationRight
+ };
+
+ enum TRangeValueType
+ {
+ EInt32RangeValue,
+ EUint32RangeValue,
+ EInt64RangeValue
+ };
+
+ public: // Constructors and destructor
+
+ /**
+ * NewL.
+ * Two-phased constructor.
+ * @param aSchema reference to metadata server's internal schema.
+ * @return Pointer to created CMdSFindEngine object.
+ */
+ static CMdSFindSqlClause* NewL(CMdsSchema& aSchema);
+
+ /**
+ * NewLC.
+ * Two-phased constructor.
+ * @param aSchema reference to metadata server's internal schema.
+ * @return Pointer to created CMdSManipulationEngine object.
+ */
+ static CMdSFindSqlClause* NewLC(CMdsSchema& aSchema);
+
+ /**
+ * Destructor.
+ */
+ virtual ~CMdSFindSqlClause();
+
+ private: // Private constructors
+
+ /**
+ * CMdSSqlClause.
+ * C++ default constructor.
+ * @param aSchema reference to metadata server's internal schema.
+ */
+ CMdSFindSqlClause(CMdsSchema& aSchema);
+
+ /**
+ * ConstructL.
+ * 2nd phase constructor.
+ */
+ void ConstructL();
+
+ public: // Public functions
+
+ /**
+ * Constructs criteria the LONG way. ALL criteria and rule params
+ * are taken in account.
+ * @param aSerializedCriteria search criteria in serialized form.
+ * @param aUserLevel
+ */
+ void CreateL(
+ CMdCSerializationBuffer& aSerializedCriteria,
+ TUserLevel aUserLevel );
+
+ /**
+ * Returns the decoded value as some kind of textual description
+ * @return search clause as TDesC8 descriptor
+ */
+ const TDesC& AsTextL() const;
+
+ /**
+ * Returns constructed variable stack.
+ * @return clause variables.
+ */
+ RRowData& Variables();
+
+ /**
+ * Returns constructed result row stack.
+ * @return clause variables.
+ */
+ RRowData& ResultRow();
+
+ /**
+ * Returns limit count.
+ * @return limit.
+ */
+ TUint32 Limit();
+
+ /**
+ * Does SQL clause include freetext count and total length
+ * @return SQL clause includes freetext count and total length
+ */
+ TBool IncludesFreetexts();
+
+ /**
+ * Returns object query's object definition.
+ * @return Object definition if query is object query else NULL.
+ */
+ CMdsObjectDef* ObjectDef();
+
+ /**
+ * Returns object query's property denitions used in property filter.
+ * @return Object definition if query is object query else NULL.
+ */
+ RPointerArray<CMdsPropertyDef>& PropertyFilters();
+
+ /**
+ * Returns query's namespace definition.
+ * @return Namespace definition if NULL query buffer is corrupted.
+ */
+ CMdsNamespaceDef* NamespaceDef();
+
+ /**
+ * Returns query type.
+ * @return Query type
+ */
+ TQueryType QueryType();
+
+ /**
+ * Returns query result mode.
+ * @return Query result mode
+ */
+ TQueryResultMode ResultMode();
+
+ /**
+ * Returns query freetext array
+ * @return freetext array
+ */
+ RPointerArray<HBufC>& QueryFreeText();
+
+ /**
+ * Result objects are not locked
+ * @return object locking status
+ */
+ TBool NoObjectLocking();
+
+ private: // Private functions
+
+ /**
+ * appends an array of OR'ed aColumn=ID conditions.
+ * @param aColumn A column of variable set where id is appended
+ * @param aSet container of item ids
+ */
+ void AppendArrayL( /*const TDesC& aColumn, const RArray<TItemId>& aSet*/ );
+
+ void AppendPropertyFiltersL( TBool aDistinct = EFalse );
+
+ /**
+ * Creates "SELECT column list FROM table name" SQL clause query
+ * based on iType.
+ */
+ void AppendSelectStatementL();
+
+ /**
+ * Creates "SELECT count(*) FROM table name" SQL clause query
+ * based on iType.
+ */
+ void AppendSelectCountStatementL();
+
+ /**
+ * Creates "SELECT * FROM table name" SQL clause query
+ * based on iType.
+ */
+ void AppendSelectAllFromEventStatementL();
+
+ void AppendSelectAllFromRelationStatementL();
+
+ void AppendSelectEventItemStatementL();
+
+ void AppendSelectRealtionItemStatementL();
+
+ /**
+ * Creates "SELECT DISTINCT "wanted property's column" FROM table name"
+ * SQL clause query based on iType.
+ */
+ void AppendSelectDistinctStatementL();
+
+ void AppendSelectObjectItemStatementL();
+
+ void AppendSelectObjectIdStatementL();
+
+ void AppendFromForObjectL();
+
+ void AppendFromForEventL();
+
+ void AppendFromForRelationL();
+
+ /**
+ * Creates "WHERE(...)"
+ */
+ void AppendWhereStatementL();
+
+ /**
+ * Helper which creates "SELECT statement for object query.
+ */
+ void AppendSelectForObjectL();
+
+ /**
+ * Helper which creates "SELECT statement for relation query.
+ * @param aRules find rules
+ */
+ void AppendSelectForRelationL( /*const TMdCFolder& aRules*/ );
+
+ /**
+ * Helper which creates "SELECT statement for event query.
+ * @param aRules find rules
+ */
+ void AppendSelectForEventL( /*const TMdCFolder& aRules*/ );
+
+ /**
+ * Help method for where clause parsing and is used recursively.
+ */
+ void WhereStatementL();
+
+ void ConditionStatementL(TBool aNegated = EFalse, TAppendIn aAppendIdIn = EAppendInTrue);
+
+ void AppendObjectIdL();
+
+ void AppendIdInL();
+
+ /**
+ * Help method for appending logic condition.
+ * @param aNegated is condition negated
+ */
+ void AppendLogicConditionL(TBool aNegated, TAppendIn aAppendIdIn = EAppendInTrue);
+
+ /**
+ * Help method for appending object condition.
+ * @param aNegated is condition negated
+ */
+ void AppendObjectConditionL(TBool aNegated);
+
+ /**
+ * Help method for appending range.
+ * @param aRangeValueType type of range's values
+ */
+ void AppendRangeL(TRangeValueType aRangeValueType);
+
+ /**
+ * Help method for appending property condition.
+ *
+ * @param aNegated is condition negated
+ */
+ void AppendPropertyConditionL(TBool aNegated);
+
+ /**
+ * Helper method for getting object definition for property condition.
+ *
+ * @param aObjectDefId property condition's object definition
+ *
+ * @return object definition for query
+ */
+ TDefId ObjectDefForPropertyCondition(TDefId aObjectDefId);
+
+ /**
+ * Help method for appending property range condition.
+ *
+ * @param aNegated is condition negated
+ */
+ void AppendPropertyRangeConditionL(TBool aNegated);
+
+ /**
+ * Help method for appending property text condition.
+ * @param aNegated is condition negated
+ */
+ void AppendPropertyTextConditionL(TBool aNegated);
+
+ /**
+ * Help method for appending property bool condition.
+ * @param aNegated is condition negated
+ */
+ void AppendPropertyBoolConditionL(TBool aNegated);
+
+ /**
+ * Help method for appending event condition for object query.
+ * @param aNegated is condition negated
+ */
+ void AppendEventConditionL(TBool aNegated);
+
+ /**
+ * Help method for appending relation condition for object query.
+ * @param aNegated is condition negated
+ */
+ void AppendRelationConditionL(TBool aNegated);
+
+ void AppendRelationSideConditionL(TBool aRelationConditions,
+ const TMdCRelationCondition& aRelationCondition,
+ TBool aLeftSide, TUint32 aRelationObjectConditionOffset);
+
+ /**
+ * Help method for searching object definition's table,
+ * based on object definition's ID, and appending those to buffer.
+ * @param aObjectDefId object definition's ID
+ */
+ void AppendTableByObjectDefIdL(TDefId aObjectDefId);
+
+ /**
+ * Help method for searching property definition's column,
+ * based on property definition's ID, and appending those to buffer.
+ * @param aPropertyDefId property definition's ID
+ * @param aObjectDefId object definition's ID
+ * @param aResult append property to expected result row
+ */
+ void AppendColumnByPropertyDefIdL(TDefId aPropertyDefId, TDefId aObjectDefId = KNoDefId, TBool aResult = EFalse);
+
+ /**
+ * Help method which appends GROUP BY statements.
+ */
+ void AppendGroupByL();
+
+ /**
+ * Help method which appends ORDER BY statements.
+ */
+ void AppendOrderByL();
+
+ /**
+ * Help method which appends LIMIT and OFFSET.
+ */
+ void AppendLimitAndOffsetL();
+
+ /**
+ * Help method that copies the rightmost part of the variables to
+ * RowData. The function does not cut or remove any data but doubles
+ * a number of variables.
+ * @param aStart index of the first variable to be copied.
+ * @param aEnd index of the last variable to be copied.
+ */
+ void CopyVariablesL( TInt aStart, TInt aEnd );
+
+ private: // Member data
+
+ /**
+ * variables used in the clause.
+ * Note: RRowData constructor cannot leave, since it is initialized (aInStack==EFalse)
+ */
+ RRowData iVariables;
+
+ /**
+ * Expected result row from the clause.
+ * Note: RRowData constructor cannot leave, since it is initialized (aInStack==EFalse)
+ */
+ RRowData iResultRow;
+
+ /**
+ * Text buffer for whole query clause. CMdsClauseBuffer class takes care
+ * of memory allocation for buffer.
+ */
+ CMdsClauseBuffer* iQueryBuf;
+
+ /**
+ * Metadata Server's internal schema
+ */
+ CMdsSchema& iSchema;
+
+ /**
+ * Serialized query critertia
+ */
+ TMdCSearchCriteria* iSearchCriteria;
+
+ /**
+ * Serialized query critertia
+ */
+ CMdCSerializationBuffer* iSerializedBuffer;
+
+ /**
+ * Client application's user level
+ */
+ TUserLevel iUserLevel;
+
+ /**
+ * Namespace definition where to search
+ */
+ CMdsNamespaceDef* iNamespaceDef;
+
+ /**
+ * Object definition for where to (WHERE expression) search in object
+ * queries
+ */
+ CMdsObjectDef* iObjectDef;
+
+ /**
+ * Object definition for what to (SELECT result and FROM table list)
+ * search in object queries
+ */
+ CMdsObjectDef* iSourceObjectDef;
+
+ /**
+ * Object definitions IDs for what to (SELECT result and FROM table list)
+ * search in object queries
+ */
+ RArray<TDefId>* iSourceObjectDefs;
+
+ /**
+ * Append columns to result row (ETrue only for first ID from iSourceObjectDefs).
+ */
+ TBool iAppendToResultRow;
+
+ /**
+ * Descriptor which contains namespace definition's ID in text format
+ */
+ TBuf16<16> iNamespaceIdDes;
+
+ /**
+ * Filter property definition references
+ */
+ RPointerArray<CMdsPropertyDef> iPropertyFilters;
+
+ /**
+ * Include freetexts to result.
+ */
+ TBool iIncludeFreetexts;
+
+ /**
+ * Include not present items to result.
+ */
+ TBool iIncludeNotPresent;
+
+ /**
+ * Free text which belong to query.
+ */
+ RPointerArray<HBufC> iFreeText;
+
+ /**
+ * Result objects are not locked.
+ */
+ TBool iNoObjectLocking;
+
+ TBool iPlaceholdersOnly;
+ };
+
+#endif //__MDSFINDSQLCLAUSE_H__