contentstorage/castorage/inc/casqlquery.h
branchRCL_3
changeset 113 0efa10d348c0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentstorage/castorage/inc/casqlquery.h	Tue Aug 31 15:30:51 2010 +0300
@@ -0,0 +1,473 @@
+/*
+ * Copyright (c) 2008 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: CSqlQuery declaration
+ *
+ */
+#ifndef CASQLQUERY_H
+#define CASQLQUERY_H
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+#include <sqldb.h>
+#include "caentryattribute.h"
+#include "castorage_global.h"
+#include "cainnerentry.h"
+CA_STORAGE_TEST_CLASS(CCAStorageTest)
+
+// CLASS DECLARATION
+class RSqlDatabase;
+class RSqlStatement;
+class CCaInnerEntry;
+class CCaInnerQuery;
+class TCaOperationParams;
+class CCaLocalizationEntry;
+/**
+ *  CSqlQuery
+ *
+ */
+const TInt KMaxIntNumLength = 10;
+
+/**
+ *  @ingroup group_catorage.
+ *  CCaSqlQuery represents a query to be executed on the sql database.
+ *
+ */
+NONSHARABLE_CLASS( CCaSqlQuery ) : public CBase
+    {
+    CA_STORAGE_TEST_FRIEND_CLASS(CCAStorageTest)
+
+public:
+
+    /**
+     * The query table types.
+     */
+    enum TTableType
+        {
+        ENoTableType,
+        EEntryTable,
+        EIconTable,
+        EAttributeTable,
+        EGroupTable,
+        EGroupTableRemove,
+        EGroupTableInsert,
+        ELaunchTable
+        };
+
+    /**
+     * The query execution result types.
+     */
+    enum TQueryResultType
+        {
+        EEntry,
+        EAttribute
+        };
+    // Constructors and destructor
+
+    /**
+     * Destructor.
+     */
+    ~CCaSqlQuery();
+
+    /**
+     * Two-phased constructor.
+     */
+    static CCaSqlQuery* NewL( RSqlDatabase& aSql );
+
+    /**
+     * Two-phased constructor.
+     */
+    static CCaSqlQuery* NewLC( RSqlDatabase& aSql );
+
+    /**
+     * Set the query text.
+     *
+     * @param aQuery the new query text.
+     */
+    void SetQueryL( const TDesC& aQuery );
+
+    /**
+     * Sets the table type on which the sql operation
+     * will be performed for this query.
+     *
+     * @param aType the table type.
+     */
+    void SetTableType( TTableType aType )
+        {
+        iType = aType;
+        }
+
+    /**
+     * Returns the table type on which the sql operation 
+     * will be performed for this query.
+     *
+     * @return
+     */
+    TTableType Type()
+        {
+        return iType;
+        }
+
+    /**
+     * Executes prepares for iStatement.
+     */
+    void PrepareL();
+
+    /**
+     * Closes the statement to free resources.
+     */
+    void CloseStatement();
+
+    /**
+     * Reset the statement for future bindings and use.
+     */
+    void ResetStatement();
+
+    /**
+     * Binds values for an add operation.
+     *
+     * @param aEntry The entry from which to get data for bindings.
+     */
+    void BindValuesForAddL( const CCaInnerEntry* aEntry );
+
+    /**
+     * Binds values for an get localization entry
+     *
+     * @param aLocalization The entry from which to get data for bindings.
+     */
+    void BindValuesForGetLocalizationEntryL(
+        const CCaLocalizationEntry& aLocalization);
+    
+    /**
+     * Binds values for an add and update localization entry
+     *
+     * @param aLocalization The entry from which to get data for bindings.
+     */
+    void BindValuesForLocalizationEntryL(
+            const CCaLocalizationEntry& aLocalization);
+    
+    /**
+     * Binds values for an add operation.
+     *
+     * @param aQuery The query from which to get data for bindings.
+     */
+    void BindValuesForGetEntriesL( const CCaInnerQuery* aQuery );
+
+    /**
+     * Binds values for an add operation.
+     *
+     * @param aEntry The entry from which to get data for bindings.
+     */
+    void BindValuesForGetEntriesL( const CCaInnerEntry* aEntry );
+
+    /**
+     * Binds values for an add operation.
+     *
+     * @param aEntry The entry from which to get data for bindings.
+     */
+    void BindValuesForGetIconL( const CCaInnerEntry* aEntry );
+
+    /**
+     * Binds the entry ids from a given entry array.
+     *
+     * @param aEntryArray An array of entries which 
+     * ids to bind with the statement.
+     */
+    void BindEntryIdsL( const RPointerArray<CCaInnerEntry>& aEntryArray );
+
+    /**
+     * Binds the entry ids from a given entry id array.
+     *
+     * @param aEntryIdArray An array of entry ids to bind with the statement.
+     * @param aColName column name with specified id.
+     */
+    void BindIdsL( const RArray<TInt>& aEntryIdArray,
+            const TDesC& aColName );
+
+    /**
+     * Bind one entry id to the statement.
+     *
+     * @param aEntryId the id to bind.
+     */
+    void BindEntryIdL( const TInt& aEntryId );
+
+    /**
+     * Binds values for an add attributes operation.
+     *
+     * @param aEntry The entry from which to get data for bindings.
+     * @param aAttr The attribute data to bind.
+     */
+    void BindValuesForAddAttributeL( const CCaInnerEntry* aEntry,
+            const CCaEntryAttribute* aAttr );
+
+    /**
+     * Binds values for a launch operation.
+     *
+     * @param aEntryId The entry id to bind.
+     * @param aLaunchTime the launch time to bind.
+     */
+    void BindValuesForLaunchL( const TInt aEntryId,
+            const TInt64 aLaunchTime );
+
+    /**
+     * Binds values for a remove operation.
+     *
+     * @param aEntryId The entry id to bind.
+     * @param aIconId the icon id to bind.
+     */
+    void BindValuesForRemoveL( const TInt aEntryId, const TInt aIconId );
+
+    /**
+     * Binds values for an organize operation.
+     *
+     * @param aEntryIds The id array to bind.
+     * @param aParams Organize operation parameters to bind.
+     * @param aEntryId A concrete entry id to bind if needed.
+     */
+    void BindValuesForOrganizeL( const RArray<TInt>& aEntryIds,
+            TCaOperationParams& aParams, const TInt aEntryId = -1 );
+
+    /**
+     * Binds values for a localize operation.
+     *
+     * @param aLocalization Localization data to bind
+     */   
+    void BindValuesForLocalizeL( CCaLocalizationEntry& aLocalization );
+    
+    /**
+     * Binds values for property operation.
+     *
+     * @param aProperty Property data to bind.
+     */   
+    void BindValuesForPropertyL( const TDesC& aProperty );
+    
+    /**
+     * Binds values for property update operation.
+     *
+     * @param aProperty Property data to bind.
+     * @param aPropertyValue Property value data to bind.
+     */  
+    void BindValuesForPropertyUpdateL( const TDesC& aProperty, const TDesC& aPropertyValue );
+    
+    /**
+     * Binds values for remove from localization.
+     *
+     * @param aEntryId.
+     */ 
+    void BindValuesForRemoveFromLocalizationL(  const TInt aEntryId );
+    
+    /**
+     * Binds values for custom sort.
+     *
+     * @param aGroupId.
+     * @param aEntryId.
+     * @param aNewPostion.
+     */ 
+    void BindValuesForCustomSortL( const TInt aGroupId, const TInt aEntryId,
+            const TInt aNewPostion );
+
+    /**
+     *
+     * Executes a statement.
+     *
+     * @return the id of a last insert operation done.
+     */
+    TInt ExecuteL();
+
+    /**
+     * Executes a statement.
+     *
+     * @return ETrue if any data was found
+     */
+    TBool ExecuteEntryPresentL( );
+    
+    /**
+     * Executes a statement.
+     *
+     * @param[out] aId id of single data the query statement queries for.
+     * @return Entry count.
+     */
+    TInt ExecuteL( TInt& aId );
+
+    /**
+     * Executes a statement.
+     *
+     * @param[out] aId id of single data the query statement queries for.
+     * @return Entry count.
+     */
+    TInt ExecuteL( TInt64& aId );
+
+    /**
+     * Executes a statement.
+     *
+     * @param aEntryArray An entry array to be populated 
+     * with data specified by aResultType.
+     * @return Entry count.
+     */
+    TInt ExecuteL( RPointerArray<CCaInnerEntry>& result,
+            TQueryResultType aResultType );
+    
+    /**
+     * Executes a statement.
+     *
+     * @param aResultInput An localization array to be populated.
+     * @return localization count.
+     */
+    TInt ExecuteLocalizationsL(
+            RPointerArray<CCaLocalizationEntry>& aResultInput );
+    
+    /**
+     * Executes a statement.
+     *
+     * @param aPropertyValue An property value. 
+     * @return count.
+     */
+    TInt ExecutePropertyL( TDes& aPropertyValue );
+    
+    /**
+     * Executes a statement.
+     *
+     * @param aEntryArray An ids array to be populated 
+     * with id specified by TableType.
+     * @param aType a table type.
+     * @return Entry count.
+     */
+    TInt ExecuteL( RArray<TInt>& aResultIdArray, TTableType aType );
+
+    /**
+     * Executes a statement.
+     *
+     * @param aIconAttributes an icon attributes.
+     * @return Entry count.
+     */
+    TInt ExecuteL( CCaInnerIconDescription* aInnerIconDescription );
+
+private:
+
+    /**
+     * Executes a statement.
+     *
+     * @param aEntryArray An entry array to be populated.
+     * @return Entry count.
+     */
+    TInt ExecuteEntryL( RPointerArray<CCaInnerEntry>& aEntryArray );
+
+    /**
+     * Executes a statement.
+     *
+     * @param aEntryArray An entry array to be populated.
+     * @return Entry count.
+     */
+    TInt ExecuteAttributeL( RPointerArray<CCaInnerEntry>& aEntryArray );
+
+    /**
+     * Constructor for performing 1st stage construction
+     * @param aSql
+     */
+    CCaSqlQuery( RSqlDatabase& aSql );
+
+    /**
+     * default constructor for performing 2nd stage construction
+     */
+    void ConstructL();
+
+    /**
+     * Binds values for an add entry operation.
+     *
+     * @param aEntry The entry from which to get data for bindings.
+     */
+    void BindValuesForAddEntryL( const CCaInnerEntry* aEntry );
+
+    /**
+     * Binds values for an add icon operation.
+     *
+     * @param aEntry The entry from which to get data for bindings.
+     */
+    void BindValuesForAddIconL( const CCaInnerEntry* aEntry );
+
+    /**
+     * Binds a text value to iStatement.
+     *
+     * @param aParameterIndex The parameter index to bind to.
+     * @param aParameterValue The text to bind.
+     */
+    void BindTextL( TInt aParameterIndex,
+            const TDesC& aParameterValue );
+
+    /**
+     * Binds a int value to iStatement.
+     *
+     * @param aParameterIndex The parameter index to bind to.
+     * @param aParameterValue The number to bind.
+     */
+    void BindIntL( TInt aParameterIndex,
+            TInt aParameterValue );
+
+    /**
+     * Binds a int64 value to iStatement.
+     *
+     * @param aParameterIndex The parameter index to bind to.
+     * @param aParameterValue The number to bind.
+     */
+    void BindInt64L( TInt aParameterIndex,
+            TInt64 aParameterValue );
+
+    /**
+     * Gets the column index for a given column name.
+     *
+     * @param aStmt The statement to search for a column index.
+     * @param aColumnName The name of the column.
+     * @return The column index.
+     */
+    TInt ColumnIndexL( RSqlStatement& aStmt, 
+            const TDesC& aColumnName ) const;
+
+    /**
+     * Sets attributes to entries.
+     *
+     * @param aResultInput A list of entries for which to set attributes.
+     */
+    void SetAttributeToEntriesL(
+            RPointerArray<CCaInnerEntry>& aResultInput );
+
+    /**
+     * Own.
+     * The query text to be executed.
+     */
+    RBuf iQuery;
+
+    /**
+     * The table type on which teh operation is done.
+     * @return
+     */
+    TTableType iType;
+
+    /**
+     * The statement to be executed.
+     * Own.
+     */
+    RSqlStatement iStatement;
+
+    /*not own*/
+    RSqlDatabase& iSqlDb;
+
+    /**
+     * The execute method result type.
+     * Needs to be specified when the same result type in ExecuteL 
+     * is used to perform dufferent operations.
+     */
+    TQueryResultType iQueryResultType;
+
+    };
+
+#endif // CASQLQUERY_H