contentstorage/castorage/src/casqlquerycreator.cpp
author hgs
Fri, 06 Aug 2010 13:40:46 +0300
changeset 107 b34d53f6acdf
parent 99 7aaf39b772ac
child 127 7b66bc3c6dc9
permissions -rw-r--r--
201031
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(
107
hgs
parents: 99
diff changeset
   558
        RPointerArray<CCaSqlQuery>& aSqlQuery, RSqlDatabase& aSqlDb, 
hgs
parents: 99
diff changeset
   559
        TBool aRemovable )
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   560
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   561
    DEBUG(("_CA_:CASqlQueryCreator::CreateTouchQueryL"));
7feec50967db 201003_02
hgs
parents:
diff changeset
   562
7feec50967db 201003_02
hgs
parents:
diff changeset
   563
    CCaSqlQuery* query = CCaSqlQuery::NewLC( aSqlDb );
7feec50967db 201003_02
hgs
parents:
diff changeset
   564
    query->SetQueryL( KSQLInsertToLaunch );
7feec50967db 201003_02
hgs
parents:
diff changeset
   565
    aSqlQuery.Append( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   566
    CleanupStack::Pop( query );
107
hgs
parents: 99
diff changeset
   567
    if( aRemovable )
hgs
parents: 99
diff changeset
   568
        {
hgs
parents: 99
diff changeset
   569
        query = CCaSqlQuery::NewLC( aSqlDb );
hgs
parents: 99
diff changeset
   570
        query->SetQueryL( KSQLUpdateEntryUsedFlag );
hgs
parents: 99
diff changeset
   571
        aSqlQuery.Append( query );
hgs
parents: 99
diff changeset
   572
        CleanupStack::Pop( query );
hgs
parents: 99
diff changeset
   573
        }
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   574
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   575
7feec50967db 201003_02
hgs
parents:
diff changeset
   576
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   577
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   578
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   579
//
94
hgs
parents: 92
diff changeset
   580
void CaSqlQueryCreator::CreateLocalizationTableQueryL( CCaSqlQuery* aSqlQuery,
hgs
parents: 92
diff changeset
   581
        const TDesC& aStatement)
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   582
    {
94
hgs
parents: 92
diff changeset
   583
    DEBUG(("_CA_:CASqlQueryCreator::CreateLocalizationTableQueryL"));
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   584
    RBuf query;
7feec50967db 201003_02
hgs
parents:
diff changeset
   585
    query.CleanupClosePushL();
94
hgs
parents: 92
diff changeset
   586
    query.CreateL( aStatement.Length() );
hgs
parents: 92
diff changeset
   587
    query.Append( aStatement );
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   588
    aSqlQuery->SetQueryL( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   589
    CleanupStack::PopAndDestroy( &query );
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
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   594
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   595
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   596
void CaSqlQueryCreator::CreateGetEntriesQueryByIdL(
7feec50967db 201003_02
hgs
parents:
diff changeset
   597
        const TInt aIdEntryCount, CCaSqlQuery* aSqlQuery )
7feec50967db 201003_02
hgs
parents:
diff changeset
   598
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   599
    DEBUG(("_CA_:CASqlQueryCreator::CreateGetEntriesQueryByIdL"));
7feec50967db 201003_02
hgs
parents:
diff changeset
   600
    PopulateQueryWithIdListL( aIdEntryCount, aSqlQuery,
7feec50967db 201003_02
hgs
parents:
diff changeset
   601
            KSQLGetListByEntryIds );
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
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   606
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   607
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   608
void CaSqlQueryCreator::PopulateQueryWithIdListL( const TInt aIdEntryCount,
7feec50967db 201003_02
hgs
parents:
diff changeset
   609
        CCaSqlQuery* aQuery, const TDesC& aSqlQueryText )
7feec50967db 201003_02
hgs
parents:
diff changeset
   610
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   611
    DEBUG(("_CA_:CASqlQueryCreator::PopulateQueryWithIdListL"));
7feec50967db 201003_02
hgs
parents:
diff changeset
   612
    RBuf entryIdList;
7feec50967db 201003_02
hgs
parents:
diff changeset
   613
    entryIdList.CleanupClosePushL();
7feec50967db 201003_02
hgs
parents:
diff changeset
   614
7feec50967db 201003_02
hgs
parents:
diff changeset
   615
    CreateIdListL( aIdEntryCount, entryIdList, KSQLEntryId );
7feec50967db 201003_02
hgs
parents:
diff changeset
   616
7feec50967db 201003_02
hgs
parents:
diff changeset
   617
    RBuf query;
7feec50967db 201003_02
hgs
parents:
diff changeset
   618
    query.CleanupClosePushL();
7feec50967db 201003_02
hgs
parents:
diff changeset
   619
    query.CreateL( aSqlQueryText.Length() + entryIdList.Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   620
    query.AppendFormat( aSqlQueryText, &entryIdList );
7feec50967db 201003_02
hgs
parents:
diff changeset
   621
7feec50967db 201003_02
hgs
parents:
diff changeset
   622
    aQuery->SetQueryL( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   623
7feec50967db 201003_02
hgs
parents:
diff changeset
   624
    CleanupStack::PopAndDestroy( &query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   625
    CleanupStack::PopAndDestroy( &entryIdList );
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
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   630
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   631
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   632
void CaSqlQueryCreator::CreateIdListL( const TInt aIdEntryCount,
7feec50967db 201003_02
hgs
parents:
diff changeset
   633
        RBuf& aEntryIdList, const TDesC& aColName )
7feec50967db 201003_02
hgs
parents:
diff changeset
   634
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   635
    DEBUG(("_CA_:CASqlQueryCreator::CreateIdListL"));
7feec50967db 201003_02
hgs
parents:
diff changeset
   636
    //    Create an list of ids seperated by commas
7feec50967db 201003_02
hgs
parents:
diff changeset
   637
    if( aIdEntryCount > 0 )
7feec50967db 201003_02
hgs
parents:
diff changeset
   638
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   639
        aEntryIdList.CreateL( aIdEntryCount * ( aColName.Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   640
                + KMaxIntNumLength ) - 1 );
7feec50967db 201003_02
hgs
parents:
diff changeset
   641
        for( TInt i = 0; i < aIdEntryCount; i++ )
7feec50967db 201003_02
hgs
parents:
diff changeset
   642
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   643
            aEntryIdList.Append( aColName );
7feec50967db 201003_02
hgs
parents:
diff changeset
   644
            aEntryIdList.AppendNum( i );
7feec50967db 201003_02
hgs
parents:
diff changeset
   645
            if( i != aIdEntryCount - 1 )
7feec50967db 201003_02
hgs
parents:
diff changeset
   646
                {
7feec50967db 201003_02
hgs
parents:
diff changeset
   647
                aEntryIdList.Append( KComma );
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
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   655
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   656
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   657
void CaSqlQueryCreator::CreateGetEntriesQueryByQueryL(
7feec50967db 201003_02
hgs
parents:
diff changeset
   658
        const CCaInnerQuery* aQuery, CCaSqlQuery* aSqlQuery )
7feec50967db 201003_02
hgs
parents:
diff changeset
   659
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   660
    DEBUG(("_CA_:CASqlQueryCreator::CreateGetEntriesQueryByQueryL"));
7feec50967db 201003_02
hgs
parents:
diff changeset
   661
    RBuf whereStatement;
7feec50967db 201003_02
hgs
parents:
diff changeset
   662
    whereStatement.CleanupClosePushL();
7feec50967db 201003_02
hgs
parents:
diff changeset
   663
7feec50967db 201003_02
hgs
parents:
diff changeset
   664
    TUint flagsOn = aQuery->GetFlagsOn();
7feec50967db 201003_02
hgs
parents:
diff changeset
   665
    if( flagsOn != 0 )
7feec50967db 201003_02
hgs
parents:
diff changeset
   666
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   667
        whereStatement.ReAllocL( KAnd().Length() + whereStatement.Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   668
                + KSQLGetEntryFlagsOn().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   669
        whereStatement.Append( KAnd );
7feec50967db 201003_02
hgs
parents:
diff changeset
   670
        whereStatement.Append( KSQLGetEntryFlagsOn );
7feec50967db 201003_02
hgs
parents:
diff changeset
   671
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   672
7feec50967db 201003_02
hgs
parents:
diff changeset
   673
    TUint flagsOff = aQuery->GetFlagsOff();
7feec50967db 201003_02
hgs
parents:
diff changeset
   674
    if( flagsOff != 0 )
7feec50967db 201003_02
hgs
parents:
diff changeset
   675
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   676
        whereStatement.ReAllocL( KAnd().Length() + whereStatement.Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   677
                + KSQLGetEntryFlagsOff().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   678
        whereStatement.Append( KAnd );
7feec50967db 201003_02
hgs
parents:
diff changeset
   679
        whereStatement.Append( KSQLGetEntryFlagsOff );
7feec50967db 201003_02
hgs
parents:
diff changeset
   680
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   681
7feec50967db 201003_02
hgs
parents:
diff changeset
   682
    TInt role = aQuery->GetRole();
7feec50967db 201003_02
hgs
parents:
diff changeset
   683
    if( role != 0 )
7feec50967db 201003_02
hgs
parents:
diff changeset
   684
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   685
        whereStatement.ReAllocL( KAnd().Length() + whereStatement.Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   686
                + KSQLGetEntryRole().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   687
        whereStatement.Append( KAnd );
7feec50967db 201003_02
hgs
parents:
diff changeset
   688
        whereStatement.Append( KSQLGetEntryRole );
7feec50967db 201003_02
hgs
parents:
diff changeset
   689
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   690
7feec50967db 201003_02
hgs
parents:
diff changeset
   691
    TUint uid = aQuery->GetUid();
7feec50967db 201003_02
hgs
parents:
diff changeset
   692
    if( uid != 0 )
7feec50967db 201003_02
hgs
parents:
diff changeset
   693
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   694
        whereStatement.ReAllocL( KAnd().Length() + whereStatement.Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   695
                + KSQLGetEntryUid().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   696
        whereStatement.Append( KAnd );
7feec50967db 201003_02
hgs
parents:
diff changeset
   697
        whereStatement.Append( KSQLGetEntryUid );
7feec50967db 201003_02
hgs
parents:
diff changeset
   698
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   699
7feec50967db 201003_02
hgs
parents:
diff changeset
   700
    const CDesC16ArrayFlat* typeNames = aQuery->GetEntryTypeNames();
7feec50967db 201003_02
hgs
parents:
diff changeset
   701
7feec50967db 201003_02
hgs
parents:
diff changeset
   702
    if( typeNames && typeNames->MdcaCount() > 0 )
7feec50967db 201003_02
hgs
parents:
diff changeset
   703
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   704
        RBuf typeNameWhereStatement;
7feec50967db 201003_02
hgs
parents:
diff changeset
   705
        typeNameWhereStatement.CleanupClosePushL();
7feec50967db 201003_02
hgs
parents:
diff changeset
   706
        for( TInt i = 0; i < typeNames->MdcaCount(); i++ )
7feec50967db 201003_02
hgs
parents:
diff changeset
   707
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   708
            typeNameWhereStatement.ReAllocL(
7feec50967db 201003_02
hgs
parents:
diff changeset
   709
                    typeNameWhereStatement.Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   710
                    + typeNames->MdcaPoint( i ).Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   711
                    + KSingleQuotes().Length() * 2 + KComma().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   712
            typeNameWhereStatement.Append( KSingleQuotes );
7feec50967db 201003_02
hgs
parents:
diff changeset
   713
            typeNameWhereStatement.Append( typeNames->MdcaPoint( i ) );
7feec50967db 201003_02
hgs
parents:
diff changeset
   714
            typeNameWhereStatement.Append( KSingleQuotes );
7feec50967db 201003_02
hgs
parents:
diff changeset
   715
            if( i != typeNames->MdcaCount() - 1 )
7feec50967db 201003_02
hgs
parents:
diff changeset
   716
                {
7feec50967db 201003_02
hgs
parents:
diff changeset
   717
                typeNameWhereStatement.Append( KComma );
7feec50967db 201003_02
hgs
parents:
diff changeset
   718
                }
7feec50967db 201003_02
hgs
parents:
diff changeset
   719
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   720
        whereStatement.ReAllocL( KAnd().Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   721
                + KSQLGetEntryTypeNames().Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   722
                + typeNameWhereStatement.Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   723
                + whereStatement.Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   724
        whereStatement.Append( KAnd );
7feec50967db 201003_02
hgs
parents:
diff changeset
   725
        whereStatement.AppendFormat( KSQLGetEntryTypeNames,
7feec50967db 201003_02
hgs
parents:
diff changeset
   726
                &typeNameWhereStatement );
7feec50967db 201003_02
hgs
parents:
diff changeset
   727
        CleanupStack::PopAndDestroy( &typeNameWhereStatement );
7feec50967db 201003_02
hgs
parents:
diff changeset
   728
        }
89
hgs
parents: 88
diff changeset
   729
    
hgs
parents: 88
diff changeset
   730
    if( aQuery->GetAttributes().Count() )
hgs
parents: 88
diff changeset
   731
        {
hgs
parents: 88
diff changeset
   732
        RBuf whereAttributes;
hgs
parents: 88
diff changeset
   733
        whereAttributes.CleanupClosePushL();
hgs
parents: 88
diff changeset
   734
        whereAttributes.CreateL( KEmpty );
hgs
parents: 88
diff changeset
   735
        
hgs
parents: 88
diff changeset
   736
        for( TInt j=1; j <= aQuery->GetAttributes().Count(); j++ )
hgs
parents: 88
diff changeset
   737
            {
hgs
parents: 88
diff changeset
   738
            // at1.AT_NAME = 'Attribute_Name_1' AND at1.AT_VALUE = 'Attribute_VALUE_1'
hgs
parents: 88
diff changeset
   739
            TPtrC atrName( aQuery->GetAttributes().operator [](j-1)->Name() );
hgs
parents: 88
diff changeset
   740
            TPtrC atrValue( aQuery->GetAttributes().operator [](j-1)->Value() );
hgs
parents: 88
diff changeset
   741
hgs
parents: 88
diff changeset
   742
            whereAttributes.ReAllocL( whereAttributes.Length() + 2 * KAnd().Length() + 
hgs
parents: 88
diff changeset
   743
                    4 * KSingleQuotes().Length() +
hgs
parents: 88
diff changeset
   744
                    2 * KMaxIntNumLength + 
hgs
parents: 88
diff changeset
   745
                    2 * KAt().Length() + 2 * KDot().Length() + 2 * KEqual().Length() +
hgs
parents: 88
diff changeset
   746
                    KColumnAttrName().Length() + KColumnAttrValue().Length() +
hgs
parents: 88
diff changeset
   747
                    atrName.Length() + atrValue.Length() );
hgs
parents: 88
diff changeset
   748
            
hgs
parents: 88
diff changeset
   749
            whereAttributes.Append( KAnd );
hgs
parents: 88
diff changeset
   750
            
hgs
parents: 88
diff changeset
   751
            whereAttributes.Append( KAt );
hgs
parents: 88
diff changeset
   752
            whereAttributes.AppendNum( j );
hgs
parents: 88
diff changeset
   753
            whereAttributes.Append( KDot );
hgs
parents: 88
diff changeset
   754
            whereAttributes.Append( KColumnAttrName );
hgs
parents: 88
diff changeset
   755
            whereAttributes.Append( KEqual );
hgs
parents: 88
diff changeset
   756
            whereAttributes.Append( KSingleQuotes );
hgs
parents: 88
diff changeset
   757
            whereAttributes.Append( atrName );
hgs
parents: 88
diff changeset
   758
            whereAttributes.Append( KSingleQuotes );
hgs
parents: 88
diff changeset
   759
            
hgs
parents: 88
diff changeset
   760
            whereAttributes.Append( KAnd );
hgs
parents: 88
diff changeset
   761
            
hgs
parents: 88
diff changeset
   762
            whereAttributes.Append( KAt );
hgs
parents: 88
diff changeset
   763
            whereAttributes.AppendNum( j );
hgs
parents: 88
diff changeset
   764
            whereAttributes.Append( KDot );
hgs
parents: 88
diff changeset
   765
            whereAttributes.Append( KColumnAttrValue );
hgs
parents: 88
diff changeset
   766
            whereAttributes.Append( KEqual );
hgs
parents: 88
diff changeset
   767
            whereAttributes.Append( KSingleQuotes );
hgs
parents: 88
diff changeset
   768
            whereAttributes.Append( atrValue );
hgs
parents: 88
diff changeset
   769
            whereAttributes.Append( KSingleQuotes );
hgs
parents: 88
diff changeset
   770
            
hgs
parents: 88
diff changeset
   771
            }
hgs
parents: 88
diff changeset
   772
        
hgs
parents: 88
diff changeset
   773
        whereStatement.ReAllocL( whereStatement.Length() + whereAttributes.Length() );
hgs
parents: 88
diff changeset
   774
        whereStatement.Append( whereAttributes );
hgs
parents: 88
diff changeset
   775
        
hgs
parents: 88
diff changeset
   776
        CleanupStack::PopAndDestroy( &whereAttributes );
hgs
parents: 88
diff changeset
   777
        }
hgs
parents: 88
diff changeset
   778
hgs
parents: 88
diff changeset
   779
    RBuf leftJoins;
hgs
parents: 88
diff changeset
   780
    leftJoins.CleanupClosePushL();
hgs
parents: 88
diff changeset
   781
    leftJoins.CreateL( KEmpty );
hgs
parents: 88
diff changeset
   782
    if( aQuery->GetAttributes().Count() )
hgs
parents: 88
diff changeset
   783
        {
hgs
parents: 88
diff changeset
   784
        for( TInt j=1; j <= aQuery->GetAttributes().Count(); j++ )
hgs
parents: 88
diff changeset
   785
            {
hgs
parents: 88
diff changeset
   786
            // LEFT JOIN CA_ATTRIBUTE as at1 ON ENTRY_ID = at1.AT_ENTRY_ID
hgs
parents: 88
diff changeset
   787
            leftJoins.ReAllocL( leftJoins.Length() + 
hgs
parents: 88
diff changeset
   788
                    KLeftJoinCaAttrubute1().Length() + KMaxIntNumLength +
hgs
parents: 88
diff changeset
   789
                    KLeftJoinCaAttrubute2().Length() + KMaxIntNumLength +
hgs
parents: 88
diff changeset
   790
                    KLeftJoinCaAttrubute3().Length()
hgs
parents: 88
diff changeset
   791
                    );
hgs
parents: 88
diff changeset
   792
            
hgs
parents: 88
diff changeset
   793
            leftJoins.Append( KLeftJoinCaAttrubute1 );
hgs
parents: 88
diff changeset
   794
            leftJoins.AppendNum( j );
hgs
parents: 88
diff changeset
   795
            leftJoins.Append( KLeftJoinCaAttrubute2 );
hgs
parents: 88
diff changeset
   796
            leftJoins.AppendNum( j );
hgs
parents: 88
diff changeset
   797
            leftJoins.Append( KLeftJoinCaAttrubute3 );
hgs
parents: 88
diff changeset
   798
            }
hgs
parents: 88
diff changeset
   799
        }
hgs
parents: 88
diff changeset
   800
    
hgs
parents: 88
diff changeset
   801
    
hgs
parents: 88
diff changeset
   802
    whereStatement.ReAllocL( whereStatement.Length() + 
hgs
parents: 88
diff changeset
   803
            KGroupBy().Length() + KColumnEntryId().Length() );
hgs
parents: 88
diff changeset
   804
    whereStatement.Append( KGroupBy );
hgs
parents: 88
diff changeset
   805
    whereStatement.Append( KColumnEntryId );
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   806
7feec50967db 201003_02
hgs
parents:
diff changeset
   807
    TInt groupId = aQuery->GetParentId();
7feec50967db 201003_02
hgs
parents:
diff changeset
   808
    RBuf query;
7feec50967db 201003_02
hgs
parents:
diff changeset
   809
    query.CleanupClosePushL();
7feec50967db 201003_02
hgs
parents:
diff changeset
   810
    if( groupId > 0 )
7feec50967db 201003_02
hgs
parents:
diff changeset
   811
        {
89
hgs
parents: 88
diff changeset
   812
        RBuf getListByParentId2withWhere;
hgs
parents: 88
diff changeset
   813
        getListByParentId2withWhere.CleanupClosePushL();
hgs
parents: 88
diff changeset
   814
        getListByParentId2withWhere.CreateL( KSQLGetListByParentId2().Length() + whereStatement.Length() );
hgs
parents: 88
diff changeset
   815
        getListByParentId2withWhere.AppendFormat( KSQLGetListByParentId2, &whereStatement );
hgs
parents: 88
diff changeset
   816
        
hgs
parents: 88
diff changeset
   817
        query.ReAllocL( KSQLGetListByParentId1().Length() +  leftJoins.Length() +
hgs
parents: 88
diff changeset
   818
                getListByParentId2withWhere.Length() );
hgs
parents: 88
diff changeset
   819
        query.Append( KSQLGetListByParentId1 );
hgs
parents: 88
diff changeset
   820
        query.Append( leftJoins );
hgs
parents: 88
diff changeset
   821
        query.Append( getListByParentId2withWhere );
hgs
parents: 88
diff changeset
   822
        CleanupStack::PopAndDestroy( &getListByParentId2withWhere );
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   823
        }
99
hgs
parents: 94
diff changeset
   824
    else if ( aQuery->GetChildId() > 0 )
hgs
parents: 94
diff changeset
   825
        {
hgs
parents: 94
diff changeset
   826
        RBuf getListByCildIdwithWhere;
hgs
parents: 94
diff changeset
   827
        getListByCildIdwithWhere.CleanupClosePushL();
hgs
parents: 94
diff changeset
   828
        getListByCildIdwithWhere.CreateL( KSQLGetListByChildId().Length() + whereStatement.Length() );
hgs
parents: 94
diff changeset
   829
        getListByCildIdwithWhere.AppendFormat( KSQLGetListByChildId, &whereStatement );
hgs
parents: 94
diff changeset
   830
        
hgs
parents: 94
diff changeset
   831
        query.ReAllocL( KSQLGetListByParentId1().Length() +  leftJoins.Length() +
hgs
parents: 94
diff changeset
   832
                getListByCildIdwithWhere.Length() );
hgs
parents: 94
diff changeset
   833
        query.Append( KSQLGetListByParentId1 );
hgs
parents: 94
diff changeset
   834
        query.Append( leftJoins );
hgs
parents: 94
diff changeset
   835
        query.Append( getListByCildIdwithWhere );
hgs
parents: 94
diff changeset
   836
        CleanupStack::PopAndDestroy( &getListByCildIdwithWhere );
hgs
parents: 94
diff changeset
   837
        }
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   838
    else
7feec50967db 201003_02
hgs
parents:
diff changeset
   839
        {
89
hgs
parents: 88
diff changeset
   840
        query.CreateL( KSQLGetList1().Length() );
hgs
parents: 88
diff changeset
   841
        query.Append( KSQLGetList1 );
hgs
parents: 88
diff changeset
   842
        query.ReAllocL( query.Length() + leftJoins.Length() + KSQLGetList2().Length() );
hgs
parents: 88
diff changeset
   843
        query.Append( leftJoins );
hgs
parents: 88
diff changeset
   844
        query.Append( KSQLGetList2 );
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   845
        if( whereStatement.Length() >= KAnd().Length() )
7feec50967db 201003_02
hgs
parents:
diff changeset
   846
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   847
            TPtrC ptrWhereStatement( whereStatement.Right(
7feec50967db 201003_02
hgs
parents:
diff changeset
   848
                    whereStatement.Length() - KAnd().Length() ) );
89
hgs
parents: 88
diff changeset
   849
            query.ReAllocL( query.Length() +  KWhere().Length()
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   850
                    + ptrWhereStatement.Length() );
89
hgs
parents: 88
diff changeset
   851
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   852
            query.Append( KWhere );
7feec50967db 201003_02
hgs
parents:
diff changeset
   853
            query.Append( ptrWhereStatement );
7feec50967db 201003_02
hgs
parents:
diff changeset
   854
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   855
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   856
7feec50967db 201003_02
hgs
parents:
diff changeset
   857
    CCaInnerQuery::TSortAttribute sort = aQuery->GetSort();
7feec50967db 201003_02
hgs
parents:
diff changeset
   858
    ModifyQueryForSortOrderL( sort, query, groupId > 0 );
7feec50967db 201003_02
hgs
parents:
diff changeset
   859
7feec50967db 201003_02
hgs
parents:
diff changeset
   860
    if( aQuery->GetCount() > 0 )
7feec50967db 201003_02
hgs
parents:
diff changeset
   861
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   862
        query.ReAllocL( query.Length() + KLimit().Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   863
                + KMaxIntNumLength );
7feec50967db 201003_02
hgs
parents:
diff changeset
   864
        query.Append( KLimit );
7feec50967db 201003_02
hgs
parents:
diff changeset
   865
        TInt limitCount = aQuery->GetCount();
7feec50967db 201003_02
hgs
parents:
diff changeset
   866
        query.AppendNum( limitCount );
7feec50967db 201003_02
hgs
parents:
diff changeset
   867
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   868
7feec50967db 201003_02
hgs
parents:
diff changeset
   869
    aSqlQuery->SetQueryL( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   870
    CleanupStack::PopAndDestroy( &query );
89
hgs
parents: 88
diff changeset
   871
    CleanupStack::PopAndDestroy( &leftJoins );
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   872
    CleanupStack::PopAndDestroy( &whereStatement );
7feec50967db 201003_02
hgs
parents:
diff changeset
   873
    }
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
void CaSqlQueryCreator::CreateCustomSortQueryL(
7feec50967db 201003_02
hgs
parents:
diff changeset
   881
        const RArray<TInt>& aEntryIds,
7feec50967db 201003_02
hgs
parents:
diff changeset
   882
        RPointerArray<CCaSqlQuery>& aSqlQuery,
7feec50967db 201003_02
hgs
parents:
diff changeset
   883
        RSqlDatabase& aSqlDb )
7feec50967db 201003_02
hgs
parents:
diff changeset
   884
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   885
    for( TInt i = 0; i < aEntryIds.Count(); i++ )
7feec50967db 201003_02
hgs
parents:
diff changeset
   886
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   887
        CCaSqlQuery* query = CCaSqlQuery::NewLC( aSqlDb );
7feec50967db 201003_02
hgs
parents:
diff changeset
   888
        query->SetQueryL( KSQLUpdatePositionInGroup );
7feec50967db 201003_02
hgs
parents:
diff changeset
   889
        aSqlQuery.Append( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   890
        CleanupStack::Pop( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   891
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   892
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   893
7feec50967db 201003_02
hgs
parents:
diff changeset
   894
7feec50967db 201003_02
hgs
parents:
diff changeset
   895
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   896
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   897
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   898
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   899
void CaSqlQueryCreator::ModifyQueryForSortOrderL(
7feec50967db 201003_02
hgs
parents:
diff changeset
   900
        const CCaInnerQuery::TSortAttribute aSortType, RBuf& aQuery,
7feec50967db 201003_02
hgs
parents:
diff changeset
   901
        TBool aSortByGroup )
7feec50967db 201003_02
hgs
parents:
diff changeset
   902
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   903
    DEBUG(("_CA_:CASqlQueryCreator::ModifyQueryForSortOrderL"));
7feec50967db 201003_02
hgs
parents:
diff changeset
   904
    switch ( aSortType )
7feec50967db 201003_02
hgs
parents:
diff changeset
   905
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   906
        case CCaInnerQuery::Name:
7feec50967db 201003_02
hgs
parents:
diff changeset
   907
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   908
            aQuery.ReAllocL( aQuery.Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   909
                    + KSQLSortOrderNameAsc().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   910
            aQuery.Append( KSQLSortOrderNameAsc );
7feec50967db 201003_02
hgs
parents:
diff changeset
   911
            break;
7feec50967db 201003_02
hgs
parents:
diff changeset
   912
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   913
        case CCaInnerQuery::NameDesc:
7feec50967db 201003_02
hgs
parents:
diff changeset
   914
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   915
            aQuery.ReAllocL( aQuery.Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   916
                    + KSQLSortOrderNameDesc().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   917
            aQuery.Append( KSQLSortOrderNameDesc );
7feec50967db 201003_02
hgs
parents:
diff changeset
   918
            break;
7feec50967db 201003_02
hgs
parents:
diff changeset
   919
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   920
        case CCaInnerQuery::CreatedTimestamp:
7feec50967db 201003_02
hgs
parents:
diff changeset
   921
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   922
            aQuery.ReAllocL( aQuery.Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   923
                    + KSQLSortOrderCreatedTimestampAsc().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   924
            aQuery.Append( KSQLSortOrderCreatedTimestampAsc );
7feec50967db 201003_02
hgs
parents:
diff changeset
   925
            break;
7feec50967db 201003_02
hgs
parents:
diff changeset
   926
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   927
        case CCaInnerQuery::CreatedTimestampDesc:
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
                    + KSQLSortOrderCreatedTimestampDesc().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   931
            aQuery.Append( KSQLSortOrderCreatedTimestampDesc );
7feec50967db 201003_02
hgs
parents:
diff changeset
   932
            break;
7feec50967db 201003_02
hgs
parents:
diff changeset
   933
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   934
        case CCaInnerQuery::MostUsed:
7feec50967db 201003_02
hgs
parents:
diff changeset
   935
        case CCaInnerQuery::MostUsedDesc:
7feec50967db 201003_02
hgs
parents:
diff changeset
   936
        case CCaInnerQuery::LastUsed:
7feec50967db 201003_02
hgs
parents:
diff changeset
   937
        case CCaInnerQuery::LastUsedDesc:
7feec50967db 201003_02
hgs
parents:
diff changeset
   938
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   939
            ModifyQueryForSortOrderLastMostUsedL( aSortType, aQuery );
7feec50967db 201003_02
hgs
parents:
diff changeset
   940
            break;
7feec50967db 201003_02
hgs
parents:
diff changeset
   941
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   942
        case CCaInnerQuery::DefaultDesc:
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
                        + KSQLSortOrderDefaultDesc().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   948
                aQuery.Append( KSQLSortOrderDefaultDesc );
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
                        + KSQLSortOrderIdDesc().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   954
                aQuery.Append( KSQLSortOrderIdDesc );
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
        case CCaInnerQuery::Default:
7feec50967db 201003_02
hgs
parents:
diff changeset
   959
        default:
7feec50967db 201003_02
hgs
parents:
diff changeset
   960
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   961
            if( aSortByGroup )
7feec50967db 201003_02
hgs
parents:
diff changeset
   962
                {
7feec50967db 201003_02
hgs
parents:
diff changeset
   963
                aQuery.ReAllocL( aQuery.Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   964
                        + KSQLSortOrderDefault().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   965
                aQuery.Append( KSQLSortOrderDefault );
7feec50967db 201003_02
hgs
parents:
diff changeset
   966
                }
7feec50967db 201003_02
hgs
parents:
diff changeset
   967
            else
7feec50967db 201003_02
hgs
parents:
diff changeset
   968
                {
7feec50967db 201003_02
hgs
parents:
diff changeset
   969
                aQuery.ReAllocL( aQuery.Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   970
                        + KSQLSortOrderIdAsc().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   971
                aQuery.Append( KSQLSortOrderIdAsc );
7feec50967db 201003_02
hgs
parents:
diff changeset
   972
                }
7feec50967db 201003_02
hgs
parents:
diff changeset
   973
            break;
7feec50967db 201003_02
hgs
parents:
diff changeset
   974
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   975
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   976
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   977
7feec50967db 201003_02
hgs
parents:
diff changeset
   978
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   979
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   980
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   981
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   982
void CaSqlQueryCreator::ModifyQueryForSortOrderLastMostUsedL(
7feec50967db 201003_02
hgs
parents:
diff changeset
   983
        const CCaInnerQuery::TSortAttribute aSortType, RBuf& aQuery )
7feec50967db 201003_02
hgs
parents:
diff changeset
   984
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   985
    DEBUG(("_CA_:CASqlQueryCreator::ModifyQueryForSortOrderLastMostUsedL"));
7feec50967db 201003_02
hgs
parents:
diff changeset
   986
7feec50967db 201003_02
hgs
parents:
diff changeset
   987
    RBuf descPart;
7feec50967db 201003_02
hgs
parents:
diff changeset
   988
    descPart.CleanupClosePushL();
7feec50967db 201003_02
hgs
parents:
diff changeset
   989
    if( aSortType == CCaInnerQuery::MostUsedDesc || 
7feec50967db 201003_02
hgs
parents:
diff changeset
   990
         aSortType == CCaInnerQuery::LastUsedDesc )
7feec50967db 201003_02
hgs
parents:
diff changeset
   991
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   992
        descPart.CreateL( KDesc );
7feec50967db 201003_02
hgs
parents:
diff changeset
   993
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   994
    else
7feec50967db 201003_02
hgs
parents:
diff changeset
   995
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   996
        descPart.CreateL( KNullDesC );
7feec50967db 201003_02
hgs
parents:
diff changeset
   997
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   998
7feec50967db 201003_02
hgs
parents:
diff changeset
   999
    RBuf usageDataQuery;
7feec50967db 201003_02
hgs
parents:
diff changeset
  1000
    usageDataQuery.CleanupClosePushL();
7feec50967db 201003_02
hgs
parents:
diff changeset
  1001
    if( aSortType == CCaInnerQuery::MostUsed || 
7feec50967db 201003_02
hgs
parents:
diff changeset
  1002
         aSortType == CCaInnerQuery::MostUsedDesc )
7feec50967db 201003_02
hgs
parents:
diff changeset
  1003
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
  1004
        usageDataQuery.CreateL( KSQLGetMostUsed );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1005
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
  1006
    else
7feec50967db 201003_02
hgs
parents:
diff changeset
  1007
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
  1008
        usageDataQuery.CreateL( KSQLGetLastUsed );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1009
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
  1010
7feec50967db 201003_02
hgs
parents:
diff changeset
  1011
    RBuf newQuery;
7feec50967db 201003_02
hgs
parents:
diff changeset
  1012
    newQuery.CleanupClosePushL();
7feec50967db 201003_02
hgs
parents:
diff changeset
  1013
    newQuery.CreateL( KSQLGetListByLaunchDataPart1().Length() +
7feec50967db 201003_02
hgs
parents:
diff changeset
  1014
            KSQLGetListByLaunchDataPart1().Length() +
7feec50967db 201003_02
hgs
parents:
diff changeset
  1015
            KSQLGetListByLaunchDataPart3().Length() +
7feec50967db 201003_02
hgs
parents:
diff changeset
  1016
            usageDataQuery.Length() +
7feec50967db 201003_02
hgs
parents:
diff changeset
  1017
            descPart.Length() +
7feec50967db 201003_02
hgs
parents:
diff changeset
  1018
            aQuery.Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1019
    newQuery.Append( KSQLGetListByLaunchDataPart1 );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1020
    newQuery.Append( aQuery );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1021
    newQuery.Append( KSQLGetListByLaunchDataPart2 );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1022
    newQuery.Append( usageDataQuery );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1023
    newQuery.Append( KSQLGetListByLaunchDataPart3 );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1024
    newQuery.Append( descPart );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1025
    aQuery.Close();
7feec50967db 201003_02
hgs
parents:
diff changeset
  1026
    aQuery.CreateL( newQuery );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1027
7feec50967db 201003_02
hgs
parents:
diff changeset
  1028
    CleanupStack::PopAndDestroy( &newQuery );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1029
    CleanupStack::PopAndDestroy( &usageDataQuery );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1030
    CleanupStack::PopAndDestroy( &descPart );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1031
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
  1032
7feec50967db 201003_02
hgs
parents:
diff changeset
  1033
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
  1034
//
7feec50967db 201003_02
hgs
parents:
diff changeset
  1035
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
  1036
//
7feec50967db 201003_02
hgs
parents:
diff changeset
  1037
TBool CaSqlQueryCreator::CreateOrganizeQueryL(
7feec50967db 201003_02
hgs
parents:
diff changeset
  1038
        const RArray<TInt>& aEntryIds, TCaOperationParams aParams,
7feec50967db 201003_02
hgs
parents:
diff changeset
  1039
        RSqlDatabase& aSqlDb, RPointerArray<CCaSqlQuery>& aSqlQueries )
7feec50967db 201003_02
hgs
parents:
diff changeset
  1040
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
  1041
    DEBUG(("_CA_:CASqlQueryCreator::CreateOrganizeQueryL"));
7feec50967db 201003_02
hgs
parents:
diff changeset
  1042
    TBool revereseInsertOrder = false;
7feec50967db 201003_02
hgs
parents:
diff changeset
  1043
    TInt idCount( aEntryIds.Count() );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1044
7feec50967db 201003_02
hgs
parents:
diff changeset
  1045
    CCaSqlQuery * query = CCaSqlQuery::NewLC( aSqlDb );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1046
    PopulateQueryWithIdListL( idCount, query,
7feec50967db 201003_02
hgs
parents:
diff changeset
  1047
            KSQLOrganizeRemoveEntriesFromGroup );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1048
    query->SetTableType( CCaSqlQuery::EGroupTableRemove );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1049
    aSqlQueries.AppendL( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1050
    CleanupStack::Pop( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1051
7feec50967db 201003_02
hgs
parents:
diff changeset
  1052
    switch( aParams.iOperationType )
7feec50967db 201003_02
hgs
parents:
diff changeset
  1053
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
  1054
        case TCaOperationParams::EInsert:
7feec50967db 201003_02
hgs
parents:
diff changeset
  1055
7feec50967db 201003_02
hgs
parents:
diff changeset
  1056
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
  1057
            if( aParams.iBeforeEntryId <= 0 )
7feec50967db 201003_02
hgs
parents:
diff changeset
  1058
                {
7feec50967db 201003_02
hgs
parents:
diff changeset
  1059
                User::Leave( KErrNotSupported );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1060
                }
7feec50967db 201003_02
hgs
parents:
diff changeset
  1061
7feec50967db 201003_02
hgs
parents:
diff changeset
  1062
            query = CCaSqlQuery::NewLC( aSqlDb );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1063
            query->SetQueryL( KSQLOrganizeInsertToGroupBasic );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1064
            query->SetTableType( CCaSqlQuery::EGroupTableInsert );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1065
            aSqlQueries.AppendL( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1066
            CleanupStack::Pop( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1067
            break;
7feec50967db 201003_02
hgs
parents:
diff changeset
  1068
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
  1069
        case TCaOperationParams::EAppend:
7feec50967db 201003_02
hgs
parents:
diff changeset
  1070
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
  1071
            CCaSqlQuery * query = CCaSqlQuery::NewLC( aSqlDb );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1072
            query->SetQueryL( KSQLOrganizeAppendToGroup );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1073
            query->SetTableType( CCaSqlQuery::EGroupTableInsert );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1074
            aSqlQueries.AppendL( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1075
            CleanupStack::Pop( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1076
            break;
7feec50967db 201003_02
hgs
parents:
diff changeset
  1077
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
  1078
        case TCaOperationParams::EPrepend:
7feec50967db 201003_02
hgs
parents:
diff changeset
  1079
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
  1080
            query = CCaSqlQuery::NewLC( aSqlDb );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1081
            query->SetQueryL( KSQLOrganizeInsertToGroupPrepend );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1082
            query->SetTableType( CCaSqlQuery::EGroupTableInsert );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1083
            aSqlQueries.AppendL( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1084
            CleanupStack::Pop( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1085
7feec50967db 201003_02
hgs
parents:
diff changeset
  1086
            revereseInsertOrder = true;
7feec50967db 201003_02
hgs
parents:
diff changeset
  1087
7feec50967db 201003_02
hgs
parents:
diff changeset
  1088
            break;
7feec50967db 201003_02
hgs
parents:
diff changeset
  1089
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
  1090
        case TCaOperationParams::ERemove:
7feec50967db 201003_02
hgs
parents:
diff changeset
  1091
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
  1092
            break;
7feec50967db 201003_02
hgs
parents:
diff changeset
  1093
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
  1094
        default:
7feec50967db 201003_02
hgs
parents:
diff changeset
  1095
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
  1096
            User::Leave( KErrNotSupported );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1097
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
  1098
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
  1099
    return revereseInsertOrder;
7feec50967db 201003_02
hgs
parents:
diff changeset
  1100
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
  1101
7feec50967db 201003_02
hgs
parents:
diff changeset
  1102
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
  1103
//
7feec50967db 201003_02
hgs
parents:
diff changeset
  1104
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
  1105
//
7feec50967db 201003_02
hgs
parents:
diff changeset
  1106
CaSqlQueryCreator::TIconType CaSqlQueryCreator::CheckIconType( const CCaInnerEntry* aEntry )
7feec50967db 201003_02
hgs
parents:
diff changeset
  1107
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
  1108
    CaSqlQueryCreator::TIconType iconType;
88
hgs
parents: 85
diff changeset
  1109
    if( 
92
hgs
parents: 89
diff changeset
  1110
        aEntry->Icon()->ApplicationId().Length() == 0 &&
hgs
parents: 89
diff changeset
  1111
        aEntry->Icon()->SkinId().Length() == 0 &&
hgs
parents: 89
diff changeset
  1112
        aEntry->Icon()->FileName().Length() == 0 )
85
7feec50967db 201003_02
hgs
parents:
diff changeset
  1113
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
  1114
        if( aEntry->GetIconId() > 0 )
7feec50967db 201003_02
hgs
parents:
diff changeset
  1115
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
  1116
            iconType = ENullIconToRemove;
7feec50967db 201003_02
hgs
parents:
diff changeset
  1117
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
  1118
        else
7feec50967db 201003_02
hgs
parents:
diff changeset
  1119
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
  1120
            iconType = ENullIcon;
7feec50967db 201003_02
hgs
parents:
diff changeset
  1121
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
  1122
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
  1123
    else
7feec50967db 201003_02
hgs
parents:
diff changeset
  1124
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
  1125
        iconType = EProperIcon;
7feec50967db 201003_02
hgs
parents:
diff changeset
  1126
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
  1127
    return iconType;
7feec50967db 201003_02
hgs
parents:
diff changeset
  1128
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
  1129
7feec50967db 201003_02
hgs
parents:
diff changeset
  1130