contentstorage/castorage/src/casqlquerycreator.cpp
author hgs
Fri, 14 May 2010 17:24:44 +0300
changeset 94 dbb8300717f7
parent 92 782e3408c2ab
child 99 7aaf39b772ac
permissions -rw-r--r--
201019
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
85
7feec50967db 201003_02
hgs
parents:
diff changeset
     1
/*
7feec50967db 201003_02
hgs
parents:
diff changeset
     2
 * Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
7feec50967db 201003_02
hgs
parents:
diff changeset
     3
 * All rights reserved.
7feec50967db 201003_02
hgs
parents:
diff changeset
     4
 * This component and the accompanying materials are made available
7feec50967db 201003_02
hgs
parents:
diff changeset
     5
 * under the terms of "Eclipse Public License v1.0"
7feec50967db 201003_02
hgs
parents:
diff changeset
     6
 * which accompanies this distribution, and is available
7feec50967db 201003_02
hgs
parents:
diff changeset
     7
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
7feec50967db 201003_02
hgs
parents:
diff changeset
     8
 *
7feec50967db 201003_02
hgs
parents:
diff changeset
     9
 * Initial Contributors:
7feec50967db 201003_02
hgs
parents:
diff changeset
    10
 * Nokia Corporation - initial contribution.
7feec50967db 201003_02
hgs
parents:
diff changeset
    11
 *
7feec50967db 201003_02
hgs
parents:
diff changeset
    12
 * Contributors:
7feec50967db 201003_02
hgs
parents:
diff changeset
    13
 *
7feec50967db 201003_02
hgs
parents:
diff changeset
    14
 * Description: CASqlQueryCreator implementation
7feec50967db 201003_02
hgs
parents:
diff changeset
    15
 *
7feec50967db 201003_02
hgs
parents:
diff changeset
    16
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
    17
7feec50967db 201003_02
hgs
parents:
diff changeset
    18
#include <e32cmn.h>
7feec50967db 201003_02
hgs
parents:
diff changeset
    19
#include <badesca.h>
7feec50967db 201003_02
hgs
parents:
diff changeset
    20
7feec50967db 201003_02
hgs
parents:
diff changeset
    21
#include "casqlquerycreator.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    22
#include "casqlcommands.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    23
#include "cainnerentry.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    24
#include "cainnerquery.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    25
#include "caarraycleanup.inl"
7feec50967db 201003_02
hgs
parents:
diff changeset
    26
#include "casqlquery.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    27
#include "cadebug.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    28
#include "cadef.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    29
#include "caoperationparams.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    30
7feec50967db 201003_02
hgs
parents:
diff changeset
    31
7feec50967db 201003_02
hgs
parents:
diff changeset
    32
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    33
//
7feec50967db 201003_02
hgs
parents:
diff changeset
    34
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    35
//
7feec50967db 201003_02
hgs
parents:
diff changeset
    36
void CaSqlQueryCreator::CreateAddQueryL( CCaInnerEntry* aEntry,
7feec50967db 201003_02
hgs
parents:
diff changeset
    37
        RPointerArray<CCaSqlQuery>& aSqlQuery, RSqlDatabase& aSqlDb )
7feec50967db 201003_02
hgs
parents:
diff changeset
    38
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
    39
    DEBUG(("_CA_:CASqlQueryCreator::CreateAddQueryL"));
7feec50967db 201003_02
hgs
parents:
diff changeset
    40
    CCaSqlQuery* queryIcon = CCaSqlQuery::NewLC( aSqlDb );
7feec50967db 201003_02
hgs
parents:
diff changeset
    41
    
7feec50967db 201003_02
hgs
parents:
diff changeset
    42
    TIconType iconType = CaSqlQueryCreator::CheckIconType( aEntry );
7feec50967db 201003_02
hgs
parents:
diff changeset
    43
    
7feec50967db 201003_02
hgs
parents:
diff changeset
    44
    if( iconType == EProperIcon )
7feec50967db 201003_02
hgs
parents:
diff changeset
    45
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
    46
        CreateAddIconQueryL( aEntry, queryIcon, aSqlDb );
7feec50967db 201003_02
hgs
parents:
diff changeset
    47
        //add new icon to DB
7feec50967db 201003_02
hgs
parents:
diff changeset
    48
        aSqlQuery.AppendL( queryIcon );
7feec50967db 201003_02
hgs
parents:
diff changeset
    49
        CleanupStack::Pop( queryIcon );
7feec50967db 201003_02
hgs
parents:
diff changeset
    50
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
    51
    else
7feec50967db 201003_02
hgs
parents:
diff changeset
    52
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
    53
        // icon added to DB by another entry or not added
7feec50967db 201003_02
hgs
parents:
diff changeset
    54
        CleanupStack::PopAndDestroy( queryIcon );
7feec50967db 201003_02
hgs
parents:
diff changeset
    55
        queryIcon = NULL;
7feec50967db 201003_02
hgs
parents:
diff changeset
    56
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
    57
7feec50967db 201003_02
hgs
parents:
diff changeset
    58
    if( aEntry->GetId() != -1 )
7feec50967db 201003_02
hgs
parents:
diff changeset
    59
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
    60
        // check if entry is new and has to be added to DB or just updated
7feec50967db 201003_02
hgs
parents:
diff changeset
    61
        CCaSqlQuery* query = CCaSqlQuery::NewLC( aSqlDb );
7feec50967db 201003_02
hgs
parents:
diff changeset
    62
        if( aEntry->GetId() > 0 )
7feec50967db 201003_02
hgs
parents:
diff changeset
    63
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
    64
            //Update query is faster than replace query
7feec50967db 201003_02
hgs
parents:
diff changeset
    65
            CreateUpdateQueryEntryL( aEntry, query );
7feec50967db 201003_02
hgs
parents:
diff changeset
    66
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
    67
        else
7feec50967db 201003_02
hgs
parents:
diff changeset
    68
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
    69
            // check if entry's Uid was set
7feec50967db 201003_02
hgs
parents:
diff changeset
    70
            if( aEntry->GetUid() == 0 )
7feec50967db 201003_02
hgs
parents:
diff changeset
    71
                {
7feec50967db 201003_02
hgs
parents:
diff changeset
    72
                if( ( aEntry->GetIconId() == 0 ) && ( queryIcon == NULL ) )
7feec50967db 201003_02
hgs
parents:
diff changeset
    73
                    {
7feec50967db 201003_02
hgs
parents:
diff changeset
    74
                    query->SetQueryL( 
7feec50967db 201003_02
hgs
parents:
diff changeset
    75
                            KSQLInsertToEntryUniqueUidWithoutIcon );
7feec50967db 201003_02
hgs
parents:
diff changeset
    76
                    }
7feec50967db 201003_02
hgs
parents:
diff changeset
    77
                else
7feec50967db 201003_02
hgs
parents:
diff changeset
    78
                    {
7feec50967db 201003_02
hgs
parents:
diff changeset
    79
                    query->SetQueryL( KSQLInsertToEntryUniqueUid );
7feec50967db 201003_02
hgs
parents:
diff changeset
    80
                    }
7feec50967db 201003_02
hgs
parents:
diff changeset
    81
                }
7feec50967db 201003_02
hgs
parents:
diff changeset
    82
            else
7feec50967db 201003_02
hgs
parents:
diff changeset
    83
                {
7feec50967db 201003_02
hgs
parents:
diff changeset
    84
                if( ( aEntry->GetIconId() == 0 ) && ( queryIcon == NULL ) )
7feec50967db 201003_02
hgs
parents:
diff changeset
    85
                    {
7feec50967db 201003_02
hgs
parents:
diff changeset
    86
                    query->SetQueryL( KSQLInsertToEntryWithoutIcon );
7feec50967db 201003_02
hgs
parents:
diff changeset
    87
                    }
7feec50967db 201003_02
hgs
parents:
diff changeset
    88
                else
7feec50967db 201003_02
hgs
parents:
diff changeset
    89
                    {
7feec50967db 201003_02
hgs
parents:
diff changeset
    90
                    query->SetQueryL( KSQLInsertToEntry );
7feec50967db 201003_02
hgs
parents:
diff changeset
    91
                    }
7feec50967db 201003_02
hgs
parents:
diff changeset
    92
                }
7feec50967db 201003_02
hgs
parents:
diff changeset
    93
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
    94
        query->SetTableType( CCaSqlQuery::EEntryTable );
7feec50967db 201003_02
hgs
parents:
diff changeset
    95
        aSqlQuery.AppendL( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
    96
        CleanupStack::Pop( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
    97
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
    98
    // remove all entry's attributs from DB
7feec50967db 201003_02
hgs
parents:
diff changeset
    99
    CCaSqlQuery* query = CCaSqlQuery::NewLC( aSqlDb );
7feec50967db 201003_02
hgs
parents:
diff changeset
   100
    query->SetQueryL( KSQLDeleteAttribute );
7feec50967db 201003_02
hgs
parents:
diff changeset
   101
    aSqlQuery.Append( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   102
    query->SetTableType( CCaSqlQuery::EAttributeTable );
7feec50967db 201003_02
hgs
parents:
diff changeset
   103
    CleanupStack::Pop( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   104
7feec50967db 201003_02
hgs
parents:
diff changeset
   105
    if( aEntry->GetAttributes().Count() > 0 )
7feec50967db 201003_02
hgs
parents:
diff changeset
   106
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   107
        CCaSqlQuery* query = CCaSqlQuery::NewLC( aSqlDb );
7feec50967db 201003_02
hgs
parents:
diff changeset
   108
        query->SetQueryL( KSQLInsertToAttribute );
7feec50967db 201003_02
hgs
parents:
diff changeset
   109
        aSqlQuery.AppendL( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   110
        query->SetTableType( CCaSqlQuery::EAttributeTable );
7feec50967db 201003_02
hgs
parents:
diff changeset
   111
        CleanupStack::Pop( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   112
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   113
    
7feec50967db 201003_02
hgs
parents:
diff changeset
   114
    if( iconType == ENullIconToRemove )
7feec50967db 201003_02
hgs
parents:
diff changeset
   115
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   116
        RBuf queryRemoveIcon;
7feec50967db 201003_02
hgs
parents:
diff changeset
   117
        queryRemoveIcon.CleanupClosePushL();
7feec50967db 201003_02
hgs
parents:
diff changeset
   118
        queryRemoveIcon.CreateL( KSQLDeleteIconWhereIconId().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   119
        queryRemoveIcon.Append( KSQLDeleteIconWhereIconId );
7feec50967db 201003_02
hgs
parents:
diff changeset
   120
        queryRemoveIcon.ReAllocL( KSQLDeleteIconWhereIconId().Length() + KMaxIntNumLength );
7feec50967db 201003_02
hgs
parents:
diff changeset
   121
        queryRemoveIcon.AppendNum( aEntry->GetIconId() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   122
        
7feec50967db 201003_02
hgs
parents:
diff changeset
   123
        CCaSqlQuery* query = CCaSqlQuery::NewLC( aSqlDb );
7feec50967db 201003_02
hgs
parents:
diff changeset
   124
        query->SetQueryL( queryRemoveIcon );
7feec50967db 201003_02
hgs
parents:
diff changeset
   125
        aSqlQuery.AppendL( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   126
        query->SetTableType( CCaSqlQuery::EIconTable );
7feec50967db 201003_02
hgs
parents:
diff changeset
   127
        
7feec50967db 201003_02
hgs
parents:
diff changeset
   128
        CleanupStack::Pop( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   129
        CleanupStack::PopAndDestroy( &queryRemoveIcon );
7feec50967db 201003_02
hgs
parents:
diff changeset
   130
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   131
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   132
7feec50967db 201003_02
hgs
parents:
diff changeset
   133
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   134
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   135
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   136
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   137
void CaSqlQueryCreator::CreateUpdateQueryEntryL(
7feec50967db 201003_02
hgs
parents:
diff changeset
   138
        const CCaInnerEntry* aEntry, CCaSqlQuery* aQuery )
7feec50967db 201003_02
hgs
parents:
diff changeset
   139
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   140
    DEBUG( ("_CA_:CASqlQueryCreator::CreateUpdateQueryEntryL") );
7feec50967db 201003_02
hgs
parents:
diff changeset
   141
    RBuf query;
7feec50967db 201003_02
hgs
parents:
diff changeset
   142
    query.CleanupClosePushL();
7feec50967db 201003_02
hgs
parents:
diff changeset
   143
    query.CreateL( KSQLUpdateEntry().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   144
    query.Append( KSQLUpdateEntry );
7feec50967db 201003_02
hgs
parents:
diff changeset
   145
    // text
7feec50967db 201003_02
hgs
parents:
diff changeset
   146
    if( aEntry->GetText().Length() != 0 )
7feec50967db 201003_02
hgs
parents:
diff changeset
   147
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   148
        query.ReAllocL( query.Length() + KSQLUpdateEntryText().Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   149
                + KComma().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   150
        query.Append( KSQLUpdateEntryText );
7feec50967db 201003_02
hgs
parents:
diff changeset
   151
        query.Append( KComma );
7feec50967db 201003_02
hgs
parents:
diff changeset
   152
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   153
    // description
7feec50967db 201003_02
hgs
parents:
diff changeset
   154
    query.ReAllocL( query.Length() + KSQLUpdateEntryDescription().Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   155
            + KComma().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   156
    query.Append( KSQLUpdateEntryDescription );
7feec50967db 201003_02
hgs
parents:
diff changeset
   157
    query.Append( KComma );
7feec50967db 201003_02
hgs
parents:
diff changeset
   158
    // role
7feec50967db 201003_02
hgs
parents:
diff changeset
   159
    query.ReAllocL( query.Length() + KSQLUpdateEntryRole().Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   160
            + KComma().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   161
    query.Append( KSQLUpdateEntryRole );
7feec50967db 201003_02
hgs
parents:
diff changeset
   162
    query.Append( KComma );
7feec50967db 201003_02
hgs
parents:
diff changeset
   163
    // type_name
7feec50967db 201003_02
hgs
parents:
diff changeset
   164
    if( aEntry->GetEntryTypeName().Length() != 0 )
7feec50967db 201003_02
hgs
parents:
diff changeset
   165
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   166
        query.ReAllocL( query.Length() + KSQLUpdateEntryTypeName().Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   167
                + KComma().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   168
        query.Append( KSQLUpdateEntryTypeName );
7feec50967db 201003_02
hgs
parents:
diff changeset
   169
        query.Append( KComma );
7feec50967db 201003_02
hgs
parents:
diff changeset
   170
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   171
    // id_icon
7feec50967db 201003_02
hgs
parents:
diff changeset
   172
    TIconType iconType = CaSqlQueryCreator::CheckIconType( aEntry );
7feec50967db 201003_02
hgs
parents:
diff changeset
   173
    if( iconType == ENullIconToRemove || iconType == ENullIcon )
7feec50967db 201003_02
hgs
parents:
diff changeset
   174
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   175
        query.ReAllocL( query.Length( ) + 
7feec50967db 201003_02
hgs
parents:
diff changeset
   176
                KSQLUpdateEntryIdIconNull().Length() + KComma().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   177
        query.Append( KSQLUpdateEntryIdIconNull );
7feec50967db 201003_02
hgs
parents:
diff changeset
   178
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   179
    else
7feec50967db 201003_02
hgs
parents:
diff changeset
   180
        { 
7feec50967db 201003_02
hgs
parents:
diff changeset
   181
        query.ReAllocL( query.Length( ) + KSQLUpdateEntryIdIcon().Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   182
                + KComma().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   183
        query.Append( KSQLUpdateEntryIdIcon );
7feec50967db 201003_02
hgs
parents:
diff changeset
   184
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   185
    query.Append( KComma );
7feec50967db 201003_02
hgs
parents:
diff changeset
   186
    // check if entry's Uid was set
7feec50967db 201003_02
hgs
parents:
diff changeset
   187
    if( aEntry->GetUid() )
7feec50967db 201003_02
hgs
parents:
diff changeset
   188
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   189
        query.ReAllocL( query.Length() + KSQLUpdateEntryUid().Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   190
                + KComma().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   191
        query.Append( KSQLUpdateEntryUid );
7feec50967db 201003_02
hgs
parents:
diff changeset
   192
        query.Append( KComma );
7feec50967db 201003_02
hgs
parents:
diff changeset
   193
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   194
    else
7feec50967db 201003_02
hgs
parents:
diff changeset
   195
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   196
        query.ReAllocL( query.Length() + KSQLUpdateEntryUidNULL().Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   197
                + KComma().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   198
        query.Append( KSQLUpdateEntryUidNULL );
7feec50967db 201003_02
hgs
parents:
diff changeset
   199
        query.Append( KComma );
7feec50967db 201003_02
hgs
parents:
diff changeset
   200
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   201
    //flags
7feec50967db 201003_02
hgs
parents:
diff changeset
   202
    query.ReAllocL( query.Length() + KSQLUpdateEntryFlags().Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   203
            + KComma().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   204
    query.Append( KSQLUpdateEntryFlags );
7feec50967db 201003_02
hgs
parents:
diff changeset
   205
7feec50967db 201003_02
hgs
parents:
diff changeset
   206
    query.ReAllocL( query.Length() + KSQLUpdateWhere().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   207
    query.Append( KSQLUpdateWhere );
7feec50967db 201003_02
hgs
parents:
diff changeset
   208
7feec50967db 201003_02
hgs
parents:
diff changeset
   209
    aQuery->SetQueryL( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   210
    CleanupStack::PopAndDestroy( &query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   211
    }
92
hgs
parents: 89
diff changeset
   212
hgs
parents: 89
diff changeset
   213
// ---------------------------------------------------------------------------
hgs
parents: 89
diff changeset
   214
//
hgs
parents: 89
diff changeset
   215
// ---------------------------------------------------------------------------
hgs
parents: 89
diff changeset
   216
//
hgs
parents: 89
diff changeset
   217
void CaSqlQueryCreator::CreateFindIconQueryL( CCaInnerEntry* aEntry,
hgs
parents: 89
diff changeset
   218
        CCaSqlQuery* aQuery)
hgs
parents: 89
diff changeset
   219
    {
hgs
parents: 89
diff changeset
   220
    RBuf iconQuery;
hgs
parents: 89
diff changeset
   221
    iconQuery.CleanupClosePushL();
hgs
parents: 89
diff changeset
   222
    iconQuery.CreateL( KSQLGetIconIdWhere );
hgs
parents: 89
diff changeset
   223
hgs
parents: 89
diff changeset
   224
    if( aEntry->Icon()->FileName().Compare( KNullDesC ) )
hgs
parents: 89
diff changeset
   225
        {
hgs
parents: 89
diff changeset
   226
        iconQuery.ReAllocL( iconQuery.Length() + KSQLUpdateIconFileName().Length()
hgs
parents: 89
diff changeset
   227
                + KAnd().Length() );
hgs
parents: 89
diff changeset
   228
        iconQuery.Append( KSQLUpdateIconFileName );
hgs
parents: 89
diff changeset
   229
        iconQuery.Append( KAnd );
hgs
parents: 89
diff changeset
   230
        }
hgs
parents: 89
diff changeset
   231
    else
hgs
parents: 89
diff changeset
   232
        { 
hgs
parents: 89
diff changeset
   233
        iconQuery.ReAllocL( iconQuery.Length() + KSQLEmptyIconFileName().Length()
hgs
parents: 89
diff changeset
   234
                + KAnd().Length() );
hgs
parents: 89
diff changeset
   235
        iconQuery.Append( KSQLEmptyIconFileName );
hgs
parents: 89
diff changeset
   236
        iconQuery.Append( KAnd );
hgs
parents: 89
diff changeset
   237
        }
hgs
parents: 89
diff changeset
   238
hgs
parents: 89
diff changeset
   239
    if( aEntry->Icon()->SkinId().Compare( KNullDesC ) )
hgs
parents: 89
diff changeset
   240
        {
hgs
parents: 89
diff changeset
   241
        iconQuery.ReAllocL( iconQuery.Length() + KSQLUpdateIconSkinId().Length()
hgs
parents: 89
diff changeset
   242
                + KAnd().Length() );
hgs
parents: 89
diff changeset
   243
        iconQuery.Append( KSQLUpdateIconSkinId );
hgs
parents: 89
diff changeset
   244
        iconQuery.Append( KAnd );
hgs
parents: 89
diff changeset
   245
        }
hgs
parents: 89
diff changeset
   246
    else
hgs
parents: 89
diff changeset
   247
        {
hgs
parents: 89
diff changeset
   248
        iconQuery.ReAllocL( iconQuery.Length() + KSQLEmptyIconSkinId().Length()
hgs
parents: 89
diff changeset
   249
                + KAnd().Length() );
hgs
parents: 89
diff changeset
   250
        iconQuery.Append( KSQLEmptyIconSkinId );
hgs
parents: 89
diff changeset
   251
        iconQuery.Append( KAnd );
hgs
parents: 89
diff changeset
   252
        }
hgs
parents: 89
diff changeset
   253
hgs
parents: 89
diff changeset
   254
    if( aEntry->Icon()->ApplicationId().Compare( KNullDesC ) )
hgs
parents: 89
diff changeset
   255
        {
hgs
parents: 89
diff changeset
   256
        iconQuery.ReAllocL( iconQuery.Length() + KSQLUpdateIconAppId().Length()
hgs
parents: 89
diff changeset
   257
                + KAnd().Length() );
hgs
parents: 89
diff changeset
   258
        iconQuery.Append( KSQLUpdateIconAppId );
hgs
parents: 89
diff changeset
   259
        iconQuery.Append( KAnd );
hgs
parents: 89
diff changeset
   260
        }
hgs
parents: 89
diff changeset
   261
    else
hgs
parents: 89
diff changeset
   262
        {
hgs
parents: 89
diff changeset
   263
        iconQuery.ReAllocL( iconQuery.Length() + KSQLEmptyIconAppId().Length()
hgs
parents: 89
diff changeset
   264
                + KAnd().Length() );
hgs
parents: 89
diff changeset
   265
        iconQuery.Append( KSQLEmptyIconAppId );
hgs
parents: 89
diff changeset
   266
        iconQuery.Append( KAnd );
hgs
parents: 89
diff changeset
   267
        }
hgs
parents: 89
diff changeset
   268
hgs
parents: 89
diff changeset
   269
    if (!iconQuery.Right(KAnd().Length()).Compare(KAnd))
hgs
parents: 89
diff changeset
   270
        {    
hgs
parents: 89
diff changeset
   271
        iconQuery.Delete( iconQuery.Length() - KAnd().Length(), KAnd().Length() );
hgs
parents: 89
diff changeset
   272
        }
hgs
parents: 89
diff changeset
   273
    
hgs
parents: 89
diff changeset
   274
    aQuery->SetQueryL( iconQuery );
hgs
parents: 89
diff changeset
   275
    CleanupStack::PopAndDestroy( &iconQuery );
hgs
parents: 89
diff changeset
   276
    }
hgs
parents: 89
diff changeset
   277
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   278
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   279
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   280
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   281
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   282
void CaSqlQueryCreator::CreateAddIconQueryForNewL( CCaInnerEntry* aEntry,
7feec50967db 201003_02
hgs
parents:
diff changeset
   283
        CCaSqlQuery* aQuery, RSqlDatabase& aSqlDb )
7feec50967db 201003_02
hgs
parents:
diff changeset
   284
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   285
    DEBUG( ("_CA_:CASqlQueryCreator::CreateAddIconQueryForNewL") );
7feec50967db 201003_02
hgs
parents:
diff changeset
   286
    CCaSqlQuery* query = CCaSqlQuery::NewLC( aSqlDb );
92
hgs
parents: 89
diff changeset
   287
hgs
parents: 89
diff changeset
   288
    CreateFindIconQueryL(aEntry, query);
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   289
    query->SetTableType( CCaSqlQuery::EIconTable );
7feec50967db 201003_02
hgs
parents:
diff changeset
   290
    query->PrepareL();
7feec50967db 201003_02
hgs
parents:
diff changeset
   291
    query->BindValuesForGetIconL( aEntry );
7feec50967db 201003_02
hgs
parents:
diff changeset
   292
    TInt idIcon( 0 );
7feec50967db 201003_02
hgs
parents:
diff changeset
   293
    query->ExecuteL( idIcon );
7feec50967db 201003_02
hgs
parents:
diff changeset
   294
    CleanupStack::PopAndDestroy( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   295
7feec50967db 201003_02
hgs
parents:
diff changeset
   296
    if( idIcon == 0 )  
7feec50967db 201003_02
hgs
parents:
diff changeset
   297
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   298
        // entry's icon data is not in DB
92
hgs
parents: 89
diff changeset
   299
        if( ( aEntry->Icon()->FileName().Length() != 0 ) ||
hgs
parents: 89
diff changeset
   300
            ( aEntry->Icon()->SkinId().Length() != 0 ) ||
hgs
parents: 89
diff changeset
   301
            ( aEntry->Icon()->ApplicationId().Length() != 0 )
88
hgs
parents: 85
diff changeset
   302
             )
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   303
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   304
            // icon is not null, so that insert it to storage
7feec50967db 201003_02
hgs
parents:
diff changeset
   305
            aQuery->SetQueryL( KSQLInsertToIcon );
7feec50967db 201003_02
hgs
parents:
diff changeset
   306
            aQuery->SetTableType( CCaSqlQuery::EIconTable );
7feec50967db 201003_02
hgs
parents:
diff changeset
   307
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   308
        else
7feec50967db 201003_02
hgs
parents:
diff changeset
   309
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   310
            // icon is null
7feec50967db 201003_02
hgs
parents:
diff changeset
   311
            aQuery->SetTableType( CCaSqlQuery::ENoTableType );
7feec50967db 201003_02
hgs
parents:
diff changeset
   312
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   313
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   314
    else if( idIcon > 0 )
7feec50967db 201003_02
hgs
parents:
diff changeset
   315
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   316
        aEntry->SetIconId( idIcon );
7feec50967db 201003_02
hgs
parents:
diff changeset
   317
        aQuery->SetTableType( CCaSqlQuery::ENoTableType );
7feec50967db 201003_02
hgs
parents:
diff changeset
   318
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   319
    }
92
hgs
parents: 89
diff changeset
   320
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   321
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   322
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   323
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   324
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   325
void CaSqlQueryCreator::CreateAddIconQueryForUpdateL(CCaInnerEntry* aEntry,
7feec50967db 201003_02
hgs
parents:
diff changeset
   326
        CCaSqlQuery* aQuery, RSqlDatabase& aSqlDb )
7feec50967db 201003_02
hgs
parents:
diff changeset
   327
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   328
    DEBUG( ("_CA_:CASqlQueryCreator::CreateAddIconQueryForUpdateL") );
7feec50967db 201003_02
hgs
parents:
diff changeset
   329
    CCaSqlQuery* query = CCaSqlQuery::NewLC( aSqlDb );
7feec50967db 201003_02
hgs
parents:
diff changeset
   330
    query->SetQueryL( KSQLGetIconDataByIdIcon );
7feec50967db 201003_02
hgs
parents:
diff changeset
   331
    query->SetTableType( CCaSqlQuery::EIconTable );
7feec50967db 201003_02
hgs
parents:
diff changeset
   332
7feec50967db 201003_02
hgs
parents:
diff changeset
   333
    query->PrepareL();
7feec50967db 201003_02
hgs
parents:
diff changeset
   334
    query->BindValuesForGetEntriesL( aEntry );
92
hgs
parents: 89
diff changeset
   335
    
hgs
parents: 89
diff changeset
   336
    CCaInnerIconDescription* innerIcon = CCaInnerIconDescription::NewLC();
hgs
parents: 89
diff changeset
   337
    
hgs
parents: 89
diff changeset
   338
    query->ExecuteL( innerIcon );
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   339
    query->CloseStatement();
92
hgs
parents: 89
diff changeset
   340
    if( !(     !innerIcon->FileName().Compare( aEntry->Icon()->FileName() )
hgs
parents: 89
diff changeset
   341
            && (!innerIcon->SkinId().Compare( aEntry->Icon()->SkinId() ))
hgs
parents: 89
diff changeset
   342
            && (!innerIcon->ApplicationId().Compare( aEntry->Icon()->ApplicationId() ))
88
hgs
parents: 85
diff changeset
   343
                    ) )
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   344
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   345
        // entry's icon data is updated
7feec50967db 201003_02
hgs
parents:
diff changeset
   346
        // if icon is used by another entry(s), new icon'll added to DB and
7feec50967db 201003_02
hgs
parents:
diff changeset
   347
        // new Id_Icon'll set to entry, otherwise it'll just updated
7feec50967db 201003_02
hgs
parents:
diff changeset
   348
        query->SetQueryL( KSQLGetIconsItems );
7feec50967db 201003_02
hgs
parents:
diff changeset
   349
        query->SetTableType( CCaSqlQuery::EEntryTable );
7feec50967db 201003_02
hgs
parents:
diff changeset
   350
7feec50967db 201003_02
hgs
parents:
diff changeset
   351
        query->PrepareL();
7feec50967db 201003_02
hgs
parents:
diff changeset
   352
        query->BindValuesForGetEntriesL( aEntry );
7feec50967db 201003_02
hgs
parents:
diff changeset
   353
        RPointerArray<CCaInnerEntry> innerEntries;
7feec50967db 201003_02
hgs
parents:
diff changeset
   354
        CleanupResetAndDestroyPushL( innerEntries );
7feec50967db 201003_02
hgs
parents:
diff changeset
   355
        TInt count = query->ExecuteL( innerEntries, CCaSqlQuery::EEntry );
7feec50967db 201003_02
hgs
parents:
diff changeset
   356
        query->CloseStatement();
7feec50967db 201003_02
hgs
parents:
diff changeset
   357
        if( count > 1 )
7feec50967db 201003_02
hgs
parents:
diff changeset
   358
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   359
            //icon's data is used by another entry(s)
7feec50967db 201003_02
hgs
parents:
diff changeset
   360
            aQuery->SetQueryL( KSQLInsertToIcon );
7feec50967db 201003_02
hgs
parents:
diff changeset
   361
            aQuery->SetTableType( CCaSqlQuery::EIconTable );
7feec50967db 201003_02
hgs
parents:
diff changeset
   362
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   363
        else
7feec50967db 201003_02
hgs
parents:
diff changeset
   364
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   365
            // icon's data is used just by this entry
7feec50967db 201003_02
hgs
parents:
diff changeset
   366
            CreateUpdateIconQueryL( aEntry, aQuery );
7feec50967db 201003_02
hgs
parents:
diff changeset
   367
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   368
7feec50967db 201003_02
hgs
parents:
diff changeset
   369
        CleanupStack::PopAndDestroy( &innerEntries );
7feec50967db 201003_02
hgs
parents:
diff changeset
   370
        }
92
hgs
parents: 89
diff changeset
   371
    CleanupStack::PopAndDestroy( innerIcon );
hgs
parents: 89
diff changeset
   372
    
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   373
    CleanupStack::PopAndDestroy( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   374
    }
92
hgs
parents: 89
diff changeset
   375
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   376
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   377
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   378
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   379
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   380
void CaSqlQueryCreator::CreateAddIconQueryL( CCaInnerEntry* aEntry,
7feec50967db 201003_02
hgs
parents:
diff changeset
   381
        CCaSqlQuery* aQuery, RSqlDatabase& aSqlDb )
7feec50967db 201003_02
hgs
parents:
diff changeset
   382
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   383
    DEBUG( ("_CA_:CASqlQueryCreator::CreateAddIconQueryL") );
7feec50967db 201003_02
hgs
parents:
diff changeset
   384
    // check if entry's icon id was set
7feec50967db 201003_02
hgs
parents:
diff changeset
   385
    if( aEntry->GetIconId() == 0 )
7feec50967db 201003_02
hgs
parents:
diff changeset
   386
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   387
        // if entry doesn't have id_icon yet
7feec50967db 201003_02
hgs
parents:
diff changeset
   388
        // check if entry's icon data doesn't exist in DB
7feec50967db 201003_02
hgs
parents:
diff changeset
   389
        CreateAddIconQueryForNewL( aEntry, aQuery, aSqlDb );
7feec50967db 201003_02
hgs
parents:
diff changeset
   390
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   391
    else if( aEntry->GetIconId() > 0 )
7feec50967db 201003_02
hgs
parents:
diff changeset
   392
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   393
        // entry has id_icon set
7feec50967db 201003_02
hgs
parents:
diff changeset
   394
        // check if entry's icon data are the same as in database
7feec50967db 201003_02
hgs
parents:
diff changeset
   395
        CreateAddIconQueryForUpdateL( aEntry, aQuery, aSqlDb );
7feec50967db 201003_02
hgs
parents:
diff changeset
   396
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   397
    }
92
hgs
parents: 89
diff changeset
   398
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   399
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   400
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   401
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   402
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   403
void CaSqlQueryCreator::CreateUpdateIconQueryL(
7feec50967db 201003_02
hgs
parents:
diff changeset
   404
        const CCaInnerEntry* aEntry, CCaSqlQuery* aQuery )
7feec50967db 201003_02
hgs
parents:
diff changeset
   405
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   406
    DEBUG(("_CA_:CASqlQueryCreator::CreateUpdateIconQueryL"));
7feec50967db 201003_02
hgs
parents:
diff changeset
   407
    RBuf query;
7feec50967db 201003_02
hgs
parents:
diff changeset
   408
    query.CleanupClosePushL();
7feec50967db 201003_02
hgs
parents:
diff changeset
   409
    query.CreateL( KSQLUpdateIcon().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   410
    query.Append( KSQLUpdateIcon );
92
hgs
parents: 89
diff changeset
   411
    if( aEntry->Icon()->FileName().Compare( KNullDesC ) )
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   412
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   413
        query.ReAllocL( query.Length() + KSQLUpdateIconFileName().Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   414
                + KComma().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   415
        query.Append( KSQLUpdateIconFileName );
7feec50967db 201003_02
hgs
parents:
diff changeset
   416
        query.Append( KComma );
7feec50967db 201003_02
hgs
parents:
diff changeset
   417
        }
92
hgs
parents: 89
diff changeset
   418
    if( aEntry->Icon()->SkinId().Compare( KNullDesC ) )
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   419
        {
88
hgs
parents: 85
diff changeset
   420
        query.ReAllocL( query.Length() + KSQLUpdateIconSkinId().Length()
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   421
                + KComma().Length() );
88
hgs
parents: 85
diff changeset
   422
        query.Append( KSQLUpdateIconSkinId );
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   423
        query.Append( KComma );
7feec50967db 201003_02
hgs
parents:
diff changeset
   424
        }
92
hgs
parents: 89
diff changeset
   425
     if( aEntry->Icon()->ApplicationId().Compare(KNullDesC) )
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   426
        {
88
hgs
parents: 85
diff changeset
   427
        query.ReAllocL( query.Length() + KSQLUpdateIconAppId().Length()
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   428
                + KComma().Length() );
88
hgs
parents: 85
diff changeset
   429
        query.Append( KSQLUpdateIconAppId );
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   430
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   431
    if( !query.Right( KComma().Length() ).Compare( KComma ) )
7feec50967db 201003_02
hgs
parents:
diff changeset
   432
        {
92
hgs
parents: 89
diff changeset
   433
        query.Delete( query.Length() - KComma().Length(), KComma().Length() );
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   434
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   435
    // add WHERE expr
7feec50967db 201003_02
hgs
parents:
diff changeset
   436
    query.ReAllocL( query.Length() + KSQLUpdateIconWhere().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   437
    query.Append( KSQLUpdateIconWhere );
7feec50967db 201003_02
hgs
parents:
diff changeset
   438
7feec50967db 201003_02
hgs
parents:
diff changeset
   439
    aQuery->SetQueryL( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   440
    aQuery->SetTableType( CCaSqlQuery::EIconTable );
7feec50967db 201003_02
hgs
parents:
diff changeset
   441
7feec50967db 201003_02
hgs
parents:
diff changeset
   442
    CleanupStack::PopAndDestroy( &query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   443
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   444
7feec50967db 201003_02
hgs
parents:
diff changeset
   445
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   446
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   447
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   448
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   449
void CaSqlQueryCreator::CreateGetEntriesQueryL(
7feec50967db 201003_02
hgs
parents:
diff changeset
   450
        const CCaInnerQuery* aQuery, CCaSqlQuery* aSqlQuery )
7feec50967db 201003_02
hgs
parents:
diff changeset
   451
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   452
    DEBUG( ("_CA_:CASqlQueryCreator::CreateGetEntriesQueryL") );
7feec50967db 201003_02
hgs
parents:
diff changeset
   453
    if( aQuery->GetIds().Count() >= 1 )
7feec50967db 201003_02
hgs
parents:
diff changeset
   454
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   455
        //        just one or more ids so select just those items. easy case.
7feec50967db 201003_02
hgs
parents:
diff changeset
   456
        CreateGetEntriesQueryByIdL( aQuery->GetIds().Count(), aSqlQuery );
7feec50967db 201003_02
hgs
parents:
diff changeset
   457
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   458
    else
7feec50967db 201003_02
hgs
parents:
diff changeset
   459
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   460
        //        create a sql query for a list of items to return.
7feec50967db 201003_02
hgs
parents:
diff changeset
   461
        CreateGetEntriesQueryByQueryL( aQuery, aSqlQuery );
7feec50967db 201003_02
hgs
parents:
diff changeset
   462
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   463
7feec50967db 201003_02
hgs
parents:
diff changeset
   464
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   465
7feec50967db 201003_02
hgs
parents:
diff changeset
   466
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   467
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   468
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   469
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   470
void CaSqlQueryCreator::CreateGetParentsIdsQueryL(
7feec50967db 201003_02
hgs
parents:
diff changeset
   471
        const RArray<TInt>& aEntryIdArray, CCaSqlQuery* aSqlQuery,
7feec50967db 201003_02
hgs
parents:
diff changeset
   472
        const RArray<TInt>& aParentIdArray )
7feec50967db 201003_02
hgs
parents:
diff changeset
   473
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   474
    DEBUG(("_CA_:CASqlQueryCreator::CreateGetParentsIdsQueryL"));
7feec50967db 201003_02
hgs
parents:
diff changeset
   475
    RBuf entryIdList;
7feec50967db 201003_02
hgs
parents:
diff changeset
   476
    entryIdList.CleanupClosePushL();
7feec50967db 201003_02
hgs
parents:
diff changeset
   477
    CreateIdListL( aEntryIdArray.Count(), entryIdList, KSQLGEEntryId );
7feec50967db 201003_02
hgs
parents:
diff changeset
   478
    RBuf parentIdList;
7feec50967db 201003_02
hgs
parents:
diff changeset
   479
    parentIdList.CleanupClosePushL();
7feec50967db 201003_02
hgs
parents:
diff changeset
   480
    CreateIdListL( aParentIdArray.Count(), parentIdList, KSQLGEIdGroup );
7feec50967db 201003_02
hgs
parents:
diff changeset
   481
7feec50967db 201003_02
hgs
parents:
diff changeset
   482
    RBuf query;
7feec50967db 201003_02
hgs
parents:
diff changeset
   483
    query.CleanupClosePushL();
7feec50967db 201003_02
hgs
parents:
diff changeset
   484
    query.CreateL( KSQLGetParentIds().Length() + entryIdList.Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   485
    query.AppendFormat( KSQLGetParentIds, &entryIdList );
7feec50967db 201003_02
hgs
parents:
diff changeset
   486
    if( aParentIdArray.Count() > 0 )
7feec50967db 201003_02
hgs
parents:
diff changeset
   487
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   488
        query.ReAllocL( query.Length() + parentIdList.Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   489
                + KSQLNotINIds().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   490
        query.AppendFormat( KSQLNotINIds, &parentIdList );
7feec50967db 201003_02
hgs
parents:
diff changeset
   491
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   492
7feec50967db 201003_02
hgs
parents:
diff changeset
   493
    aSqlQuery->SetQueryL( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   494
7feec50967db 201003_02
hgs
parents:
diff changeset
   495
    CleanupStack::PopAndDestroy( &query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   496
    CleanupStack::PopAndDestroy( &parentIdList );
7feec50967db 201003_02
hgs
parents:
diff changeset
   497
    CleanupStack::PopAndDestroy( &entryIdList );
7feec50967db 201003_02
hgs
parents:
diff changeset
   498
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   499
7feec50967db 201003_02
hgs
parents:
diff changeset
   500
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   501
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   502
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   503
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   504
void CaSqlQueryCreator::CreateGetAttributesQueryL(
7feec50967db 201003_02
hgs
parents:
diff changeset
   505
        const TInt aIdEntryCount, CCaSqlQuery* aSqlQuery )
7feec50967db 201003_02
hgs
parents:
diff changeset
   506
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   507
    DEBUG(("_CA_:CASqlQueryCreator::CreateGetAttributesQueryL"));
7feec50967db 201003_02
hgs
parents:
diff changeset
   508
    PopulateQueryWithIdListL( aIdEntryCount, aSqlQuery,
7feec50967db 201003_02
hgs
parents:
diff changeset
   509
            KSQLGetAttributesByEntryId );
7feec50967db 201003_02
hgs
parents:
diff changeset
   510
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   511
7feec50967db 201003_02
hgs
parents:
diff changeset
   512
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   513
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   514
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   515
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   516
void CaSqlQueryCreator::CreateRemoveQueryL(
7feec50967db 201003_02
hgs
parents:
diff changeset
   517
        RPointerArray<CCaSqlQuery>& aSqlQuery, RSqlDatabase& aSqlDb )
7feec50967db 201003_02
hgs
parents:
diff changeset
   518
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   519
    DEBUG(("_CA_:CASqlQueryCreator::CreateRemoveQueryL"));
7feec50967db 201003_02
hgs
parents:
diff changeset
   520
7feec50967db 201003_02
hgs
parents:
diff changeset
   521
    CCaSqlQuery* query = CCaSqlQuery::NewLC( aSqlDb );
7feec50967db 201003_02
hgs
parents:
diff changeset
   522
    query->SetQueryL( KSQLDeleteLaunch );
7feec50967db 201003_02
hgs
parents:
diff changeset
   523
    aSqlQuery.Append( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   524
    CleanupStack::Pop( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   525
7feec50967db 201003_02
hgs
parents:
diff changeset
   526
    query = CCaSqlQuery::NewLC( aSqlDb );
7feec50967db 201003_02
hgs
parents:
diff changeset
   527
    query->SetQueryL( KSQLDeleteEntryFromGroup );
7feec50967db 201003_02
hgs
parents:
diff changeset
   528
    aSqlQuery.Append( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   529
    CleanupStack::Pop( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   530
7feec50967db 201003_02
hgs
parents:
diff changeset
   531
    query = CCaSqlQuery::NewLC( aSqlDb );
7feec50967db 201003_02
hgs
parents:
diff changeset
   532
    query->SetQueryL( KSQLDeleteGroupFromGroup );
7feec50967db 201003_02
hgs
parents:
diff changeset
   533
    aSqlQuery.Append( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   534
    CleanupStack::Pop( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   535
7feec50967db 201003_02
hgs
parents:
diff changeset
   536
    query = CCaSqlQuery::NewLC( aSqlDb );
7feec50967db 201003_02
hgs
parents:
diff changeset
   537
    query->SetQueryL( KSQLDeleteAttribute );
7feec50967db 201003_02
hgs
parents:
diff changeset
   538
    aSqlQuery.Append( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   539
    CleanupStack::Pop( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   540
7feec50967db 201003_02
hgs
parents:
diff changeset
   541
    query = CCaSqlQuery::NewLC( aSqlDb );
7feec50967db 201003_02
hgs
parents:
diff changeset
   542
    query->SetQueryL( KSQLDeleteEntry );
7feec50967db 201003_02
hgs
parents:
diff changeset
   543
    aSqlQuery.Append( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   544
    CleanupStack::Pop( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   545
7feec50967db 201003_02
hgs
parents:
diff changeset
   546
    query = CCaSqlQuery::NewLC( aSqlDb );
7feec50967db 201003_02
hgs
parents:
diff changeset
   547
    query->SetQueryL( KSQLDeleteIcon );
7feec50967db 201003_02
hgs
parents:
diff changeset
   548
    query->SetTableType( CCaSqlQuery::EIconTable );
7feec50967db 201003_02
hgs
parents:
diff changeset
   549
    aSqlQuery.Append( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   550
    CleanupStack::Pop( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   551
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   552
7feec50967db 201003_02
hgs
parents:
diff changeset
   553
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   554
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   555
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   556
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   557
void CaSqlQueryCreator::CreateTouchQueryL(
7feec50967db 201003_02
hgs
parents:
diff changeset
   558
        RPointerArray<CCaSqlQuery>& aSqlQuery, RSqlDatabase& aSqlDb )
7feec50967db 201003_02
hgs
parents:
diff changeset
   559
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   560
    DEBUG(("_CA_:CASqlQueryCreator::CreateTouchQueryL"));
7feec50967db 201003_02
hgs
parents:
diff changeset
   561
7feec50967db 201003_02
hgs
parents:
diff changeset
   562
    CCaSqlQuery* query = CCaSqlQuery::NewLC( aSqlDb );
7feec50967db 201003_02
hgs
parents:
diff changeset
   563
    query->SetQueryL( KSQLInsertToLaunch );
7feec50967db 201003_02
hgs
parents:
diff changeset
   564
    aSqlQuery.Append( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   565
    CleanupStack::Pop( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   566
7feec50967db 201003_02
hgs
parents:
diff changeset
   567
    query = CCaSqlQuery::NewLC( aSqlDb );
7feec50967db 201003_02
hgs
parents:
diff changeset
   568
    query->SetQueryL( KSQLUpdateEntryUsedFlag );
7feec50967db 201003_02
hgs
parents:
diff changeset
   569
    aSqlQuery.Append( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   570
    CleanupStack::Pop( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   571
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   572
7feec50967db 201003_02
hgs
parents:
diff changeset
   573
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   574
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   575
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   576
//
94
hgs
parents: 92
diff changeset
   577
void CaSqlQueryCreator::CreateLocalizationTableQueryL( CCaSqlQuery* aSqlQuery,
hgs
parents: 92
diff changeset
   578
        const TDesC& aStatement)
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   579
    {
94
hgs
parents: 92
diff changeset
   580
    DEBUG(("_CA_:CASqlQueryCreator::CreateLocalizationTableQueryL"));
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   581
    RBuf query;
7feec50967db 201003_02
hgs
parents:
diff changeset
   582
    query.CleanupClosePushL();
94
hgs
parents: 92
diff changeset
   583
    query.CreateL( aStatement.Length() );
hgs
parents: 92
diff changeset
   584
    query.Append( aStatement );
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   585
    aSqlQuery->SetQueryL( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   586
    CleanupStack::PopAndDestroy( &query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   587
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   588
7feec50967db 201003_02
hgs
parents:
diff changeset
   589
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   590
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   591
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   592
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   593
void CaSqlQueryCreator::CreateGetEntriesQueryByIdL(
7feec50967db 201003_02
hgs
parents:
diff changeset
   594
        const TInt aIdEntryCount, CCaSqlQuery* aSqlQuery )
7feec50967db 201003_02
hgs
parents:
diff changeset
   595
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   596
    DEBUG(("_CA_:CASqlQueryCreator::CreateGetEntriesQueryByIdL"));
7feec50967db 201003_02
hgs
parents:
diff changeset
   597
    PopulateQueryWithIdListL( aIdEntryCount, aSqlQuery,
7feec50967db 201003_02
hgs
parents:
diff changeset
   598
            KSQLGetListByEntryIds );
7feec50967db 201003_02
hgs
parents:
diff changeset
   599
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   600
7feec50967db 201003_02
hgs
parents:
diff changeset
   601
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   602
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   603
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   604
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   605
void CaSqlQueryCreator::PopulateQueryWithIdListL( const TInt aIdEntryCount,
7feec50967db 201003_02
hgs
parents:
diff changeset
   606
        CCaSqlQuery* aQuery, const TDesC& aSqlQueryText )
7feec50967db 201003_02
hgs
parents:
diff changeset
   607
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   608
    DEBUG(("_CA_:CASqlQueryCreator::PopulateQueryWithIdListL"));
7feec50967db 201003_02
hgs
parents:
diff changeset
   609
    RBuf entryIdList;
7feec50967db 201003_02
hgs
parents:
diff changeset
   610
    entryIdList.CleanupClosePushL();
7feec50967db 201003_02
hgs
parents:
diff changeset
   611
7feec50967db 201003_02
hgs
parents:
diff changeset
   612
    CreateIdListL( aIdEntryCount, entryIdList, KSQLEntryId );
7feec50967db 201003_02
hgs
parents:
diff changeset
   613
7feec50967db 201003_02
hgs
parents:
diff changeset
   614
    RBuf query;
7feec50967db 201003_02
hgs
parents:
diff changeset
   615
    query.CleanupClosePushL();
7feec50967db 201003_02
hgs
parents:
diff changeset
   616
    query.CreateL( aSqlQueryText.Length() + entryIdList.Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   617
    query.AppendFormat( aSqlQueryText, &entryIdList );
7feec50967db 201003_02
hgs
parents:
diff changeset
   618
7feec50967db 201003_02
hgs
parents:
diff changeset
   619
    aQuery->SetQueryL( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   620
7feec50967db 201003_02
hgs
parents:
diff changeset
   621
    CleanupStack::PopAndDestroy( &query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   622
    CleanupStack::PopAndDestroy( &entryIdList );
7feec50967db 201003_02
hgs
parents:
diff changeset
   623
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   624
7feec50967db 201003_02
hgs
parents:
diff changeset
   625
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   626
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   627
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   628
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   629
void CaSqlQueryCreator::CreateIdListL( const TInt aIdEntryCount,
7feec50967db 201003_02
hgs
parents:
diff changeset
   630
        RBuf& aEntryIdList, const TDesC& aColName )
7feec50967db 201003_02
hgs
parents:
diff changeset
   631
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   632
    DEBUG(("_CA_:CASqlQueryCreator::CreateIdListL"));
7feec50967db 201003_02
hgs
parents:
diff changeset
   633
    //    Create an list of ids seperated by commas
7feec50967db 201003_02
hgs
parents:
diff changeset
   634
    if( aIdEntryCount > 0 )
7feec50967db 201003_02
hgs
parents:
diff changeset
   635
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   636
        aEntryIdList.CreateL( aIdEntryCount * ( aColName.Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   637
                + KMaxIntNumLength ) - 1 );
7feec50967db 201003_02
hgs
parents:
diff changeset
   638
        for( TInt i = 0; i < aIdEntryCount; i++ )
7feec50967db 201003_02
hgs
parents:
diff changeset
   639
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   640
            aEntryIdList.Append( aColName );
7feec50967db 201003_02
hgs
parents:
diff changeset
   641
            aEntryIdList.AppendNum( i );
7feec50967db 201003_02
hgs
parents:
diff changeset
   642
            if( i != aIdEntryCount - 1 )
7feec50967db 201003_02
hgs
parents:
diff changeset
   643
                {
7feec50967db 201003_02
hgs
parents:
diff changeset
   644
                aEntryIdList.Append( KComma );
7feec50967db 201003_02
hgs
parents:
diff changeset
   645
                }
7feec50967db 201003_02
hgs
parents:
diff changeset
   646
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   647
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   648
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   649
7feec50967db 201003_02
hgs
parents:
diff changeset
   650
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   651
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   652
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   653
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   654
void CaSqlQueryCreator::CreateGetEntriesQueryByQueryL(
7feec50967db 201003_02
hgs
parents:
diff changeset
   655
        const CCaInnerQuery* aQuery, CCaSqlQuery* aSqlQuery )
7feec50967db 201003_02
hgs
parents:
diff changeset
   656
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   657
    DEBUG(("_CA_:CASqlQueryCreator::CreateGetEntriesQueryByQueryL"));
7feec50967db 201003_02
hgs
parents:
diff changeset
   658
    RBuf whereStatement;
7feec50967db 201003_02
hgs
parents:
diff changeset
   659
    whereStatement.CleanupClosePushL();
7feec50967db 201003_02
hgs
parents:
diff changeset
   660
7feec50967db 201003_02
hgs
parents:
diff changeset
   661
    TUint flagsOn = aQuery->GetFlagsOn();
7feec50967db 201003_02
hgs
parents:
diff changeset
   662
    if( flagsOn != 0 )
7feec50967db 201003_02
hgs
parents:
diff changeset
   663
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   664
        whereStatement.ReAllocL( KAnd().Length() + whereStatement.Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   665
                + KSQLGetEntryFlagsOn().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   666
        whereStatement.Append( KAnd );
7feec50967db 201003_02
hgs
parents:
diff changeset
   667
        whereStatement.Append( KSQLGetEntryFlagsOn );
7feec50967db 201003_02
hgs
parents:
diff changeset
   668
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   669
7feec50967db 201003_02
hgs
parents:
diff changeset
   670
    TUint flagsOff = aQuery->GetFlagsOff();
7feec50967db 201003_02
hgs
parents:
diff changeset
   671
    if( flagsOff != 0 )
7feec50967db 201003_02
hgs
parents:
diff changeset
   672
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   673
        whereStatement.ReAllocL( KAnd().Length() + whereStatement.Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   674
                + KSQLGetEntryFlagsOff().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   675
        whereStatement.Append( KAnd );
7feec50967db 201003_02
hgs
parents:
diff changeset
   676
        whereStatement.Append( KSQLGetEntryFlagsOff );
7feec50967db 201003_02
hgs
parents:
diff changeset
   677
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   678
7feec50967db 201003_02
hgs
parents:
diff changeset
   679
    TInt role = aQuery->GetRole();
7feec50967db 201003_02
hgs
parents:
diff changeset
   680
    if( role != 0 )
7feec50967db 201003_02
hgs
parents:
diff changeset
   681
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   682
        whereStatement.ReAllocL( KAnd().Length() + whereStatement.Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   683
                + KSQLGetEntryRole().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   684
        whereStatement.Append( KAnd );
7feec50967db 201003_02
hgs
parents:
diff changeset
   685
        whereStatement.Append( KSQLGetEntryRole );
7feec50967db 201003_02
hgs
parents:
diff changeset
   686
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   687
7feec50967db 201003_02
hgs
parents:
diff changeset
   688
    TUint uid = aQuery->GetUid();
7feec50967db 201003_02
hgs
parents:
diff changeset
   689
    if( uid != 0 )
7feec50967db 201003_02
hgs
parents:
diff changeset
   690
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   691
        whereStatement.ReAllocL( KAnd().Length() + whereStatement.Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   692
                + KSQLGetEntryUid().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   693
        whereStatement.Append( KAnd );
7feec50967db 201003_02
hgs
parents:
diff changeset
   694
        whereStatement.Append( KSQLGetEntryUid );
7feec50967db 201003_02
hgs
parents:
diff changeset
   695
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   696
7feec50967db 201003_02
hgs
parents:
diff changeset
   697
    const CDesC16ArrayFlat* typeNames = aQuery->GetEntryTypeNames();
7feec50967db 201003_02
hgs
parents:
diff changeset
   698
7feec50967db 201003_02
hgs
parents:
diff changeset
   699
    if( typeNames && typeNames->MdcaCount() > 0 )
7feec50967db 201003_02
hgs
parents:
diff changeset
   700
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   701
        RBuf typeNameWhereStatement;
7feec50967db 201003_02
hgs
parents:
diff changeset
   702
        typeNameWhereStatement.CleanupClosePushL();
7feec50967db 201003_02
hgs
parents:
diff changeset
   703
        for( TInt i = 0; i < typeNames->MdcaCount(); i++ )
7feec50967db 201003_02
hgs
parents:
diff changeset
   704
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   705
            typeNameWhereStatement.ReAllocL(
7feec50967db 201003_02
hgs
parents:
diff changeset
   706
                    typeNameWhereStatement.Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   707
                    + typeNames->MdcaPoint( i ).Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   708
                    + KSingleQuotes().Length() * 2 + KComma().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   709
            typeNameWhereStatement.Append( KSingleQuotes );
7feec50967db 201003_02
hgs
parents:
diff changeset
   710
            typeNameWhereStatement.Append( typeNames->MdcaPoint( i ) );
7feec50967db 201003_02
hgs
parents:
diff changeset
   711
            typeNameWhereStatement.Append( KSingleQuotes );
7feec50967db 201003_02
hgs
parents:
diff changeset
   712
            if( i != typeNames->MdcaCount() - 1 )
7feec50967db 201003_02
hgs
parents:
diff changeset
   713
                {
7feec50967db 201003_02
hgs
parents:
diff changeset
   714
                typeNameWhereStatement.Append( KComma );
7feec50967db 201003_02
hgs
parents:
diff changeset
   715
                }
7feec50967db 201003_02
hgs
parents:
diff changeset
   716
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   717
        whereStatement.ReAllocL( KAnd().Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   718
                + KSQLGetEntryTypeNames().Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   719
                + typeNameWhereStatement.Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   720
                + whereStatement.Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   721
        whereStatement.Append( KAnd );
7feec50967db 201003_02
hgs
parents:
diff changeset
   722
        whereStatement.AppendFormat( KSQLGetEntryTypeNames,
7feec50967db 201003_02
hgs
parents:
diff changeset
   723
                &typeNameWhereStatement );
7feec50967db 201003_02
hgs
parents:
diff changeset
   724
        CleanupStack::PopAndDestroy( &typeNameWhereStatement );
7feec50967db 201003_02
hgs
parents:
diff changeset
   725
        }
89
hgs
parents: 88
diff changeset
   726
    
hgs
parents: 88
diff changeset
   727
    if( aQuery->GetAttributes().Count() )
hgs
parents: 88
diff changeset
   728
        {
hgs
parents: 88
diff changeset
   729
        RBuf whereAttributes;
hgs
parents: 88
diff changeset
   730
        whereAttributes.CleanupClosePushL();
hgs
parents: 88
diff changeset
   731
        whereAttributes.CreateL( KEmpty );
hgs
parents: 88
diff changeset
   732
        
hgs
parents: 88
diff changeset
   733
        for( TInt j=1; j <= aQuery->GetAttributes().Count(); j++ )
hgs
parents: 88
diff changeset
   734
            {
hgs
parents: 88
diff changeset
   735
            // at1.AT_NAME = 'Attribute_Name_1' AND at1.AT_VALUE = 'Attribute_VALUE_1'
hgs
parents: 88
diff changeset
   736
            TPtrC atrName( aQuery->GetAttributes().operator [](j-1)->Name() );
hgs
parents: 88
diff changeset
   737
            TPtrC atrValue( aQuery->GetAttributes().operator [](j-1)->Value() );
hgs
parents: 88
diff changeset
   738
hgs
parents: 88
diff changeset
   739
            whereAttributes.ReAllocL( whereAttributes.Length() + 2 * KAnd().Length() + 
hgs
parents: 88
diff changeset
   740
                    4 * KSingleQuotes().Length() +
hgs
parents: 88
diff changeset
   741
                    2 * KMaxIntNumLength + 
hgs
parents: 88
diff changeset
   742
                    2 * KAt().Length() + 2 * KDot().Length() + 2 * KEqual().Length() +
hgs
parents: 88
diff changeset
   743
                    KColumnAttrName().Length() + KColumnAttrValue().Length() +
hgs
parents: 88
diff changeset
   744
                    atrName.Length() + atrValue.Length() );
hgs
parents: 88
diff changeset
   745
            
hgs
parents: 88
diff changeset
   746
            whereAttributes.Append( KAnd );
hgs
parents: 88
diff changeset
   747
            
hgs
parents: 88
diff changeset
   748
            whereAttributes.Append( KAt );
hgs
parents: 88
diff changeset
   749
            whereAttributes.AppendNum( j );
hgs
parents: 88
diff changeset
   750
            whereAttributes.Append( KDot );
hgs
parents: 88
diff changeset
   751
            whereAttributes.Append( KColumnAttrName );
hgs
parents: 88
diff changeset
   752
            whereAttributes.Append( KEqual );
hgs
parents: 88
diff changeset
   753
            whereAttributes.Append( KSingleQuotes );
hgs
parents: 88
diff changeset
   754
            whereAttributes.Append( atrName );
hgs
parents: 88
diff changeset
   755
            whereAttributes.Append( KSingleQuotes );
hgs
parents: 88
diff changeset
   756
            
hgs
parents: 88
diff changeset
   757
            whereAttributes.Append( KAnd );
hgs
parents: 88
diff changeset
   758
            
hgs
parents: 88
diff changeset
   759
            whereAttributes.Append( KAt );
hgs
parents: 88
diff changeset
   760
            whereAttributes.AppendNum( j );
hgs
parents: 88
diff changeset
   761
            whereAttributes.Append( KDot );
hgs
parents: 88
diff changeset
   762
            whereAttributes.Append( KColumnAttrValue );
hgs
parents: 88
diff changeset
   763
            whereAttributes.Append( KEqual );
hgs
parents: 88
diff changeset
   764
            whereAttributes.Append( KSingleQuotes );
hgs
parents: 88
diff changeset
   765
            whereAttributes.Append( atrValue );
hgs
parents: 88
diff changeset
   766
            whereAttributes.Append( KSingleQuotes );
hgs
parents: 88
diff changeset
   767
            
hgs
parents: 88
diff changeset
   768
            }
hgs
parents: 88
diff changeset
   769
        
hgs
parents: 88
diff changeset
   770
        whereStatement.ReAllocL( whereStatement.Length() + whereAttributes.Length() );
hgs
parents: 88
diff changeset
   771
        whereStatement.Append( whereAttributes );
hgs
parents: 88
diff changeset
   772
        
hgs
parents: 88
diff changeset
   773
        CleanupStack::PopAndDestroy( &whereAttributes );
hgs
parents: 88
diff changeset
   774
        }
hgs
parents: 88
diff changeset
   775
hgs
parents: 88
diff changeset
   776
    RBuf leftJoins;
hgs
parents: 88
diff changeset
   777
    leftJoins.CleanupClosePushL();
hgs
parents: 88
diff changeset
   778
    leftJoins.CreateL( KEmpty );
hgs
parents: 88
diff changeset
   779
    if( aQuery->GetAttributes().Count() )
hgs
parents: 88
diff changeset
   780
        {
hgs
parents: 88
diff changeset
   781
        for( TInt j=1; j <= aQuery->GetAttributes().Count(); j++ )
hgs
parents: 88
diff changeset
   782
            {
hgs
parents: 88
diff changeset
   783
            // LEFT JOIN CA_ATTRIBUTE as at1 ON ENTRY_ID = at1.AT_ENTRY_ID
hgs
parents: 88
diff changeset
   784
            leftJoins.ReAllocL( leftJoins.Length() + 
hgs
parents: 88
diff changeset
   785
                    KLeftJoinCaAttrubute1().Length() + KMaxIntNumLength +
hgs
parents: 88
diff changeset
   786
                    KLeftJoinCaAttrubute2().Length() + KMaxIntNumLength +
hgs
parents: 88
diff changeset
   787
                    KLeftJoinCaAttrubute3().Length()
hgs
parents: 88
diff changeset
   788
                    );
hgs
parents: 88
diff changeset
   789
            
hgs
parents: 88
diff changeset
   790
            leftJoins.Append( KLeftJoinCaAttrubute1 );
hgs
parents: 88
diff changeset
   791
            leftJoins.AppendNum( j );
hgs
parents: 88
diff changeset
   792
            leftJoins.Append( KLeftJoinCaAttrubute2 );
hgs
parents: 88
diff changeset
   793
            leftJoins.AppendNum( j );
hgs
parents: 88
diff changeset
   794
            leftJoins.Append( KLeftJoinCaAttrubute3 );
hgs
parents: 88
diff changeset
   795
            }
hgs
parents: 88
diff changeset
   796
        }
hgs
parents: 88
diff changeset
   797
    
hgs
parents: 88
diff changeset
   798
    
hgs
parents: 88
diff changeset
   799
    whereStatement.ReAllocL( whereStatement.Length() + 
hgs
parents: 88
diff changeset
   800
            KGroupBy().Length() + KColumnEntryId().Length() );
hgs
parents: 88
diff changeset
   801
    whereStatement.Append( KGroupBy );
hgs
parents: 88
diff changeset
   802
    whereStatement.Append( KColumnEntryId );
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   803
7feec50967db 201003_02
hgs
parents:
diff changeset
   804
    TInt groupId = aQuery->GetParentId();
7feec50967db 201003_02
hgs
parents:
diff changeset
   805
    RBuf query;
7feec50967db 201003_02
hgs
parents:
diff changeset
   806
    query.CleanupClosePushL();
7feec50967db 201003_02
hgs
parents:
diff changeset
   807
    if( groupId > 0 )
7feec50967db 201003_02
hgs
parents:
diff changeset
   808
        {
89
hgs
parents: 88
diff changeset
   809
        RBuf getListByParentId2withWhere;
hgs
parents: 88
diff changeset
   810
        getListByParentId2withWhere.CleanupClosePushL();
hgs
parents: 88
diff changeset
   811
        getListByParentId2withWhere.CreateL( KSQLGetListByParentId2().Length() + whereStatement.Length() );
hgs
parents: 88
diff changeset
   812
        getListByParentId2withWhere.AppendFormat( KSQLGetListByParentId2, &whereStatement );
hgs
parents: 88
diff changeset
   813
        
hgs
parents: 88
diff changeset
   814
        query.ReAllocL( KSQLGetListByParentId1().Length() +  leftJoins.Length() +
hgs
parents: 88
diff changeset
   815
                getListByParentId2withWhere.Length() );
hgs
parents: 88
diff changeset
   816
        query.Append( KSQLGetListByParentId1 );
hgs
parents: 88
diff changeset
   817
        query.Append( leftJoins );
hgs
parents: 88
diff changeset
   818
        query.Append( getListByParentId2withWhere );
hgs
parents: 88
diff changeset
   819
        CleanupStack::PopAndDestroy( &getListByParentId2withWhere );
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   820
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   821
    else
7feec50967db 201003_02
hgs
parents:
diff changeset
   822
        {
89
hgs
parents: 88
diff changeset
   823
        query.CreateL( KSQLGetList1().Length() );
hgs
parents: 88
diff changeset
   824
        query.Append( KSQLGetList1 );
hgs
parents: 88
diff changeset
   825
        query.ReAllocL( query.Length() + leftJoins.Length() + KSQLGetList2().Length() );
hgs
parents: 88
diff changeset
   826
        query.Append( leftJoins );
hgs
parents: 88
diff changeset
   827
        query.Append( KSQLGetList2 );
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   828
        if( whereStatement.Length() >= KAnd().Length() )
7feec50967db 201003_02
hgs
parents:
diff changeset
   829
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   830
            TPtrC ptrWhereStatement( whereStatement.Right(
7feec50967db 201003_02
hgs
parents:
diff changeset
   831
                    whereStatement.Length() - KAnd().Length() ) );
89
hgs
parents: 88
diff changeset
   832
            query.ReAllocL( query.Length() +  KWhere().Length()
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   833
                    + ptrWhereStatement.Length() );
89
hgs
parents: 88
diff changeset
   834
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   835
            query.Append( KWhere );
7feec50967db 201003_02
hgs
parents:
diff changeset
   836
            query.Append( ptrWhereStatement );
7feec50967db 201003_02
hgs
parents:
diff changeset
   837
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   838
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   839
7feec50967db 201003_02
hgs
parents:
diff changeset
   840
    CCaInnerQuery::TSortAttribute sort = aQuery->GetSort();
7feec50967db 201003_02
hgs
parents:
diff changeset
   841
    ModifyQueryForSortOrderL( sort, query, groupId > 0 );
7feec50967db 201003_02
hgs
parents:
diff changeset
   842
7feec50967db 201003_02
hgs
parents:
diff changeset
   843
    if( aQuery->GetCount() > 0 )
7feec50967db 201003_02
hgs
parents:
diff changeset
   844
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   845
        query.ReAllocL( query.Length() + KLimit().Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   846
                + KMaxIntNumLength );
7feec50967db 201003_02
hgs
parents:
diff changeset
   847
        query.Append( KLimit );
7feec50967db 201003_02
hgs
parents:
diff changeset
   848
        TInt limitCount = aQuery->GetCount();
7feec50967db 201003_02
hgs
parents:
diff changeset
   849
        query.AppendNum( limitCount );
7feec50967db 201003_02
hgs
parents:
diff changeset
   850
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   851
7feec50967db 201003_02
hgs
parents:
diff changeset
   852
    aSqlQuery->SetQueryL( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   853
    CleanupStack::PopAndDestroy( &query );
89
hgs
parents: 88
diff changeset
   854
    CleanupStack::PopAndDestroy( &leftJoins );
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   855
    CleanupStack::PopAndDestroy( &whereStatement );
7feec50967db 201003_02
hgs
parents:
diff changeset
   856
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   857
7feec50967db 201003_02
hgs
parents:
diff changeset
   858
7feec50967db 201003_02
hgs
parents:
diff changeset
   859
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   860
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   861
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   862
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   863
void CaSqlQueryCreator::CreateCustomSortQueryL(
7feec50967db 201003_02
hgs
parents:
diff changeset
   864
        const RArray<TInt>& aEntryIds,
7feec50967db 201003_02
hgs
parents:
diff changeset
   865
        RPointerArray<CCaSqlQuery>& aSqlQuery,
7feec50967db 201003_02
hgs
parents:
diff changeset
   866
        RSqlDatabase& aSqlDb )
7feec50967db 201003_02
hgs
parents:
diff changeset
   867
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   868
    for( TInt i = 0; i < aEntryIds.Count(); i++ )
7feec50967db 201003_02
hgs
parents:
diff changeset
   869
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   870
        CCaSqlQuery* query = CCaSqlQuery::NewLC( aSqlDb );
7feec50967db 201003_02
hgs
parents:
diff changeset
   871
        query->SetQueryL( KSQLUpdatePositionInGroup );
7feec50967db 201003_02
hgs
parents:
diff changeset
   872
        aSqlQuery.Append( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   873
        CleanupStack::Pop( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   874
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   875
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   876
7feec50967db 201003_02
hgs
parents:
diff changeset
   877
7feec50967db 201003_02
hgs
parents:
diff changeset
   878
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   879
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   880
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   881
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   882
void CaSqlQueryCreator::ModifyQueryForSortOrderL(
7feec50967db 201003_02
hgs
parents:
diff changeset
   883
        const CCaInnerQuery::TSortAttribute aSortType, RBuf& aQuery,
7feec50967db 201003_02
hgs
parents:
diff changeset
   884
        TBool aSortByGroup )
7feec50967db 201003_02
hgs
parents:
diff changeset
   885
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   886
    DEBUG(("_CA_:CASqlQueryCreator::ModifyQueryForSortOrderL"));
7feec50967db 201003_02
hgs
parents:
diff changeset
   887
    switch ( aSortType )
7feec50967db 201003_02
hgs
parents:
diff changeset
   888
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   889
        case CCaInnerQuery::Name:
7feec50967db 201003_02
hgs
parents:
diff changeset
   890
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   891
            aQuery.ReAllocL( aQuery.Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   892
                    + KSQLSortOrderNameAsc().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   893
            aQuery.Append( KSQLSortOrderNameAsc );
7feec50967db 201003_02
hgs
parents:
diff changeset
   894
            break;
7feec50967db 201003_02
hgs
parents:
diff changeset
   895
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   896
        case CCaInnerQuery::NameDesc:
7feec50967db 201003_02
hgs
parents:
diff changeset
   897
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   898
            aQuery.ReAllocL( aQuery.Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   899
                    + KSQLSortOrderNameDesc().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   900
            aQuery.Append( KSQLSortOrderNameDesc );
7feec50967db 201003_02
hgs
parents:
diff changeset
   901
            break;
7feec50967db 201003_02
hgs
parents:
diff changeset
   902
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   903
        case CCaInnerQuery::CreatedTimestamp:
7feec50967db 201003_02
hgs
parents:
diff changeset
   904
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   905
            aQuery.ReAllocL( aQuery.Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   906
                    + KSQLSortOrderCreatedTimestampAsc().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   907
            aQuery.Append( KSQLSortOrderCreatedTimestampAsc );
7feec50967db 201003_02
hgs
parents:
diff changeset
   908
            break;
7feec50967db 201003_02
hgs
parents:
diff changeset
   909
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   910
        case CCaInnerQuery::CreatedTimestampDesc:
7feec50967db 201003_02
hgs
parents:
diff changeset
   911
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   912
            aQuery.ReAllocL( aQuery.Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   913
                    + KSQLSortOrderCreatedTimestampDesc().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   914
            aQuery.Append( KSQLSortOrderCreatedTimestampDesc );
7feec50967db 201003_02
hgs
parents:
diff changeset
   915
            break;
7feec50967db 201003_02
hgs
parents:
diff changeset
   916
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   917
        case CCaInnerQuery::MostUsed:
7feec50967db 201003_02
hgs
parents:
diff changeset
   918
        case CCaInnerQuery::MostUsedDesc:
7feec50967db 201003_02
hgs
parents:
diff changeset
   919
        case CCaInnerQuery::LastUsed:
7feec50967db 201003_02
hgs
parents:
diff changeset
   920
        case CCaInnerQuery::LastUsedDesc:
7feec50967db 201003_02
hgs
parents:
diff changeset
   921
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   922
            ModifyQueryForSortOrderLastMostUsedL( aSortType, aQuery );
7feec50967db 201003_02
hgs
parents:
diff changeset
   923
            break;
7feec50967db 201003_02
hgs
parents:
diff changeset
   924
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   925
        case CCaInnerQuery::DefaultDesc:
7feec50967db 201003_02
hgs
parents:
diff changeset
   926
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   927
            if( aSortByGroup )
7feec50967db 201003_02
hgs
parents:
diff changeset
   928
                {
7feec50967db 201003_02
hgs
parents:
diff changeset
   929
                aQuery.ReAllocL( aQuery.Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   930
                        + KSQLSortOrderDefaultDesc().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   931
                aQuery.Append( KSQLSortOrderDefaultDesc );
7feec50967db 201003_02
hgs
parents:
diff changeset
   932
                }
7feec50967db 201003_02
hgs
parents:
diff changeset
   933
            else
7feec50967db 201003_02
hgs
parents:
diff changeset
   934
                {
7feec50967db 201003_02
hgs
parents:
diff changeset
   935
                aQuery.ReAllocL( aQuery.Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   936
                        + KSQLSortOrderIdDesc().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   937
                aQuery.Append( KSQLSortOrderIdDesc );
7feec50967db 201003_02
hgs
parents:
diff changeset
   938
                }
7feec50967db 201003_02
hgs
parents:
diff changeset
   939
            break;
7feec50967db 201003_02
hgs
parents:
diff changeset
   940
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   941
        case CCaInnerQuery::Default:
7feec50967db 201003_02
hgs
parents:
diff changeset
   942
        default:
7feec50967db 201003_02
hgs
parents:
diff changeset
   943
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   944
            if( aSortByGroup )
7feec50967db 201003_02
hgs
parents:
diff changeset
   945
                {
7feec50967db 201003_02
hgs
parents:
diff changeset
   946
                aQuery.ReAllocL( aQuery.Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   947
                        + KSQLSortOrderDefault().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   948
                aQuery.Append( KSQLSortOrderDefault );
7feec50967db 201003_02
hgs
parents:
diff changeset
   949
                }
7feec50967db 201003_02
hgs
parents:
diff changeset
   950
            else
7feec50967db 201003_02
hgs
parents:
diff changeset
   951
                {
7feec50967db 201003_02
hgs
parents:
diff changeset
   952
                aQuery.ReAllocL( aQuery.Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   953
                        + KSQLSortOrderIdAsc().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   954
                aQuery.Append( KSQLSortOrderIdAsc );
7feec50967db 201003_02
hgs
parents:
diff changeset
   955
                }
7feec50967db 201003_02
hgs
parents:
diff changeset
   956
            break;
7feec50967db 201003_02
hgs
parents:
diff changeset
   957
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   958
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   959
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   960
7feec50967db 201003_02
hgs
parents:
diff changeset
   961
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   962
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   963
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   964
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   965
void CaSqlQueryCreator::ModifyQueryForSortOrderLastMostUsedL(
7feec50967db 201003_02
hgs
parents:
diff changeset
   966
        const CCaInnerQuery::TSortAttribute aSortType, RBuf& aQuery )
7feec50967db 201003_02
hgs
parents:
diff changeset
   967
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   968
    DEBUG(("_CA_:CASqlQueryCreator::ModifyQueryForSortOrderLastMostUsedL"));
7feec50967db 201003_02
hgs
parents:
diff changeset
   969
7feec50967db 201003_02
hgs
parents:
diff changeset
   970
    RBuf descPart;
7feec50967db 201003_02
hgs
parents:
diff changeset
   971
    descPart.CleanupClosePushL();
7feec50967db 201003_02
hgs
parents:
diff changeset
   972
    if( aSortType == CCaInnerQuery::MostUsedDesc || 
7feec50967db 201003_02
hgs
parents:
diff changeset
   973
         aSortType == CCaInnerQuery::LastUsedDesc )
7feec50967db 201003_02
hgs
parents:
diff changeset
   974
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   975
        descPart.CreateL( KDesc );
7feec50967db 201003_02
hgs
parents:
diff changeset
   976
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   977
    else
7feec50967db 201003_02
hgs
parents:
diff changeset
   978
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   979
        descPart.CreateL( KNullDesC );
7feec50967db 201003_02
hgs
parents:
diff changeset
   980
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   981
7feec50967db 201003_02
hgs
parents:
diff changeset
   982
    RBuf usageDataQuery;
7feec50967db 201003_02
hgs
parents:
diff changeset
   983
    usageDataQuery.CleanupClosePushL();
7feec50967db 201003_02
hgs
parents:
diff changeset
   984
    if( aSortType == CCaInnerQuery::MostUsed || 
7feec50967db 201003_02
hgs
parents:
diff changeset
   985
         aSortType == CCaInnerQuery::MostUsedDesc )
7feec50967db 201003_02
hgs
parents:
diff changeset
   986
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   987
        usageDataQuery.CreateL( KSQLGetMostUsed );
7feec50967db 201003_02
hgs
parents:
diff changeset
   988
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   989
    else
7feec50967db 201003_02
hgs
parents:
diff changeset
   990
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   991
        usageDataQuery.CreateL( KSQLGetLastUsed );
7feec50967db 201003_02
hgs
parents:
diff changeset
   992
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   993
7feec50967db 201003_02
hgs
parents:
diff changeset
   994
    RBuf newQuery;
7feec50967db 201003_02
hgs
parents:
diff changeset
   995
    newQuery.CleanupClosePushL();
7feec50967db 201003_02
hgs
parents:
diff changeset
   996
    newQuery.CreateL( KSQLGetListByLaunchDataPart1().Length() +
7feec50967db 201003_02
hgs
parents:
diff changeset
   997
            KSQLGetListByLaunchDataPart1().Length() +
7feec50967db 201003_02
hgs
parents:
diff changeset
   998
            KSQLGetListByLaunchDataPart3().Length() +
7feec50967db 201003_02
hgs
parents:
diff changeset
   999
            usageDataQuery.Length() +
7feec50967db 201003_02
hgs
parents:
diff changeset
  1000
            descPart.Length() +
7feec50967db 201003_02
hgs
parents:
diff changeset
  1001
            aQuery.Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1002
    newQuery.Append( KSQLGetListByLaunchDataPart1 );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1003
    newQuery.Append( aQuery );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1004
    newQuery.Append( KSQLGetListByLaunchDataPart2 );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1005
    newQuery.Append( usageDataQuery );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1006
    newQuery.Append( KSQLGetListByLaunchDataPart3 );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1007
    newQuery.Append( descPart );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1008
    aQuery.Close();
7feec50967db 201003_02
hgs
parents:
diff changeset
  1009
    aQuery.CreateL( newQuery );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1010
7feec50967db 201003_02
hgs
parents:
diff changeset
  1011
    CleanupStack::PopAndDestroy( &newQuery );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1012
    CleanupStack::PopAndDestroy( &usageDataQuery );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1013
    CleanupStack::PopAndDestroy( &descPart );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1014
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
  1015
7feec50967db 201003_02
hgs
parents:
diff changeset
  1016
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
  1017
//
7feec50967db 201003_02
hgs
parents:
diff changeset
  1018
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
  1019
//
7feec50967db 201003_02
hgs
parents:
diff changeset
  1020
TBool CaSqlQueryCreator::CreateOrganizeQueryL(
7feec50967db 201003_02
hgs
parents:
diff changeset
  1021
        const RArray<TInt>& aEntryIds, TCaOperationParams aParams,
7feec50967db 201003_02
hgs
parents:
diff changeset
  1022
        RSqlDatabase& aSqlDb, RPointerArray<CCaSqlQuery>& aSqlQueries )
7feec50967db 201003_02
hgs
parents:
diff changeset
  1023
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
  1024
    DEBUG(("_CA_:CASqlQueryCreator::CreateOrganizeQueryL"));
7feec50967db 201003_02
hgs
parents:
diff changeset
  1025
    TBool revereseInsertOrder = false;
7feec50967db 201003_02
hgs
parents:
diff changeset
  1026
    TInt idCount( aEntryIds.Count() );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1027
7feec50967db 201003_02
hgs
parents:
diff changeset
  1028
    CCaSqlQuery * query = CCaSqlQuery::NewLC( aSqlDb );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1029
    PopulateQueryWithIdListL( idCount, query,
7feec50967db 201003_02
hgs
parents:
diff changeset
  1030
            KSQLOrganizeRemoveEntriesFromGroup );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1031
    query->SetTableType( CCaSqlQuery::EGroupTableRemove );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1032
    aSqlQueries.AppendL( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1033
    CleanupStack::Pop( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1034
7feec50967db 201003_02
hgs
parents:
diff changeset
  1035
    switch( aParams.iOperationType )
7feec50967db 201003_02
hgs
parents:
diff changeset
  1036
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
  1037
        case TCaOperationParams::EInsert:
7feec50967db 201003_02
hgs
parents:
diff changeset
  1038
7feec50967db 201003_02
hgs
parents:
diff changeset
  1039
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
  1040
            if( aParams.iBeforeEntryId <= 0 )
7feec50967db 201003_02
hgs
parents:
diff changeset
  1041
                {
7feec50967db 201003_02
hgs
parents:
diff changeset
  1042
                User::Leave( KErrNotSupported );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1043
                }
7feec50967db 201003_02
hgs
parents:
diff changeset
  1044
7feec50967db 201003_02
hgs
parents:
diff changeset
  1045
            query = CCaSqlQuery::NewLC( aSqlDb );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1046
            query->SetQueryL( KSQLOrganizeInsertToGroupBasic );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1047
            query->SetTableType( CCaSqlQuery::EGroupTableInsert );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1048
            aSqlQueries.AppendL( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1049
            CleanupStack::Pop( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1050
            break;
7feec50967db 201003_02
hgs
parents:
diff changeset
  1051
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
  1052
        case TCaOperationParams::EAppend:
7feec50967db 201003_02
hgs
parents:
diff changeset
  1053
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
  1054
            CCaSqlQuery * query = CCaSqlQuery::NewLC( aSqlDb );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1055
            query->SetQueryL( KSQLOrganizeAppendToGroup );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1056
            query->SetTableType( CCaSqlQuery::EGroupTableInsert );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1057
            aSqlQueries.AppendL( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1058
            CleanupStack::Pop( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1059
            break;
7feec50967db 201003_02
hgs
parents:
diff changeset
  1060
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
  1061
        case TCaOperationParams::EPrepend:
7feec50967db 201003_02
hgs
parents:
diff changeset
  1062
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
  1063
            query = CCaSqlQuery::NewLC( aSqlDb );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1064
            query->SetQueryL( KSQLOrganizeInsertToGroupPrepend );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1065
            query->SetTableType( CCaSqlQuery::EGroupTableInsert );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1066
            aSqlQueries.AppendL( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1067
            CleanupStack::Pop( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1068
7feec50967db 201003_02
hgs
parents:
diff changeset
  1069
            revereseInsertOrder = true;
7feec50967db 201003_02
hgs
parents:
diff changeset
  1070
7feec50967db 201003_02
hgs
parents:
diff changeset
  1071
            break;
7feec50967db 201003_02
hgs
parents:
diff changeset
  1072
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
  1073
        case TCaOperationParams::ERemove:
7feec50967db 201003_02
hgs
parents:
diff changeset
  1074
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
  1075
            break;
7feec50967db 201003_02
hgs
parents:
diff changeset
  1076
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
  1077
        default:
7feec50967db 201003_02
hgs
parents:
diff changeset
  1078
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
  1079
            User::Leave( KErrNotSupported );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1080
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
  1081
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
  1082
    return revereseInsertOrder;
7feec50967db 201003_02
hgs
parents:
diff changeset
  1083
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
  1084
7feec50967db 201003_02
hgs
parents:
diff changeset
  1085
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
  1086
//
7feec50967db 201003_02
hgs
parents:
diff changeset
  1087
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
  1088
//
7feec50967db 201003_02
hgs
parents:
diff changeset
  1089
CaSqlQueryCreator::TIconType CaSqlQueryCreator::CheckIconType( const CCaInnerEntry* aEntry )
7feec50967db 201003_02
hgs
parents:
diff changeset
  1090
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
  1091
    CaSqlQueryCreator::TIconType iconType;
88
hgs
parents: 85
diff changeset
  1092
    if( 
92
hgs
parents: 89
diff changeset
  1093
        aEntry->Icon()->ApplicationId().Length() == 0 &&
hgs
parents: 89
diff changeset
  1094
        aEntry->Icon()->SkinId().Length() == 0 &&
hgs
parents: 89
diff changeset
  1095
        aEntry->Icon()->FileName().Length() == 0 )
85
7feec50967db 201003_02
hgs
parents:
diff changeset
  1096
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
  1097
        if( aEntry->GetIconId() > 0 )
7feec50967db 201003_02
hgs
parents:
diff changeset
  1098
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
  1099
            iconType = ENullIconToRemove;
7feec50967db 201003_02
hgs
parents:
diff changeset
  1100
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
  1101
        else
7feec50967db 201003_02
hgs
parents:
diff changeset
  1102
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
  1103
            iconType = ENullIcon;
7feec50967db 201003_02
hgs
parents:
diff changeset
  1104
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
  1105
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
  1106
    else
7feec50967db 201003_02
hgs
parents:
diff changeset
  1107
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
  1108
        iconType = EProperIcon;
7feec50967db 201003_02
hgs
parents:
diff changeset
  1109
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
  1110
    return iconType;
7feec50967db 201003_02
hgs
parents:
diff changeset
  1111
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
  1112
7feec50967db 201003_02
hgs
parents:
diff changeset
  1113