contentstorage/castorage/src/casqlquerycreator.cpp
author hgs
Mon, 18 Oct 2010 10:44:15 +0300
changeset 127 7b66bc3c6dc9
parent 107 b34d53f6acdf
permissions -rw-r--r--
201041
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( KSQLDeleteEntryFromGroup );
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( KSQLDeleteGroupFromGroup );
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( KSQLDeleteAttribute );
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( KSQLDeleteEntry );
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( KSQLDeleteIcon );
7feec50967db 201003_02
hgs
parents:
diff changeset
   543
    query->SetTableType( CCaSqlQuery::EIconTable );
7feec50967db 201003_02
hgs
parents:
diff changeset
   544
    aSqlQuery.Append( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   545
    CleanupStack::Pop( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   546
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   547
7feec50967db 201003_02
hgs
parents:
diff changeset
   548
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   549
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   550
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   551
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   552
void CaSqlQueryCreator::CreateTouchQueryL(
107
hgs
parents: 99
diff changeset
   553
        RPointerArray<CCaSqlQuery>& aSqlQuery, RSqlDatabase& aSqlDb, 
hgs
parents: 99
diff changeset
   554
        TBool aRemovable )
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   555
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   556
    DEBUG(("_CA_:CASqlQueryCreator::CreateTouchQueryL"));
127
hgs
parents: 107
diff changeset
   557
    
107
hgs
parents: 99
diff changeset
   558
    if( aRemovable )
hgs
parents: 99
diff changeset
   559
        {
127
hgs
parents: 107
diff changeset
   560
        CCaSqlQuery* query = CCaSqlQuery::NewLC( aSqlDb );
107
hgs
parents: 99
diff changeset
   561
        query->SetQueryL( KSQLUpdateEntryUsedFlag );
hgs
parents: 99
diff changeset
   562
        aSqlQuery.Append( query );
hgs
parents: 99
diff changeset
   563
        CleanupStack::Pop( query );
hgs
parents: 99
diff changeset
   564
        }
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   565
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   566
7feec50967db 201003_02
hgs
parents:
diff changeset
   567
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   568
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   569
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   570
//
94
hgs
parents: 92
diff changeset
   571
void CaSqlQueryCreator::CreateLocalizationTableQueryL( CCaSqlQuery* aSqlQuery,
hgs
parents: 92
diff changeset
   572
        const TDesC& aStatement)
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   573
    {
94
hgs
parents: 92
diff changeset
   574
    DEBUG(("_CA_:CASqlQueryCreator::CreateLocalizationTableQueryL"));
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   575
    RBuf query;
7feec50967db 201003_02
hgs
parents:
diff changeset
   576
    query.CleanupClosePushL();
94
hgs
parents: 92
diff changeset
   577
    query.CreateL( aStatement.Length() );
hgs
parents: 92
diff changeset
   578
    query.Append( aStatement );
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   579
    aSqlQuery->SetQueryL( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   580
    CleanupStack::PopAndDestroy( &query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   581
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   582
7feec50967db 201003_02
hgs
parents:
diff changeset
   583
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   584
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   585
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   586
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   587
void CaSqlQueryCreator::CreateGetEntriesQueryByIdL(
7feec50967db 201003_02
hgs
parents:
diff changeset
   588
        const TInt aIdEntryCount, CCaSqlQuery* aSqlQuery )
7feec50967db 201003_02
hgs
parents:
diff changeset
   589
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   590
    DEBUG(("_CA_:CASqlQueryCreator::CreateGetEntriesQueryByIdL"));
7feec50967db 201003_02
hgs
parents:
diff changeset
   591
    PopulateQueryWithIdListL( aIdEntryCount, aSqlQuery,
7feec50967db 201003_02
hgs
parents:
diff changeset
   592
            KSQLGetListByEntryIds );
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
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   597
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   598
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   599
void CaSqlQueryCreator::PopulateQueryWithIdListL( const TInt aIdEntryCount,
7feec50967db 201003_02
hgs
parents:
diff changeset
   600
        CCaSqlQuery* aQuery, const TDesC& aSqlQueryText )
7feec50967db 201003_02
hgs
parents:
diff changeset
   601
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   602
    DEBUG(("_CA_:CASqlQueryCreator::PopulateQueryWithIdListL"));
7feec50967db 201003_02
hgs
parents:
diff changeset
   603
    RBuf entryIdList;
7feec50967db 201003_02
hgs
parents:
diff changeset
   604
    entryIdList.CleanupClosePushL();
7feec50967db 201003_02
hgs
parents:
diff changeset
   605
7feec50967db 201003_02
hgs
parents:
diff changeset
   606
    CreateIdListL( aIdEntryCount, entryIdList, KSQLEntryId );
7feec50967db 201003_02
hgs
parents:
diff changeset
   607
7feec50967db 201003_02
hgs
parents:
diff changeset
   608
    RBuf query;
7feec50967db 201003_02
hgs
parents:
diff changeset
   609
    query.CleanupClosePushL();
7feec50967db 201003_02
hgs
parents:
diff changeset
   610
    query.CreateL( aSqlQueryText.Length() + entryIdList.Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   611
    query.AppendFormat( aSqlQueryText, &entryIdList );
7feec50967db 201003_02
hgs
parents:
diff changeset
   612
7feec50967db 201003_02
hgs
parents:
diff changeset
   613
    aQuery->SetQueryL( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   614
7feec50967db 201003_02
hgs
parents:
diff changeset
   615
    CleanupStack::PopAndDestroy( &query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   616
    CleanupStack::PopAndDestroy( &entryIdList );
7feec50967db 201003_02
hgs
parents:
diff changeset
   617
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   618
7feec50967db 201003_02
hgs
parents:
diff changeset
   619
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   620
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   621
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   622
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   623
void CaSqlQueryCreator::CreateIdListL( const TInt aIdEntryCount,
7feec50967db 201003_02
hgs
parents:
diff changeset
   624
        RBuf& aEntryIdList, const TDesC& aColName )
7feec50967db 201003_02
hgs
parents:
diff changeset
   625
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   626
    DEBUG(("_CA_:CASqlQueryCreator::CreateIdListL"));
7feec50967db 201003_02
hgs
parents:
diff changeset
   627
    //    Create an list of ids seperated by commas
7feec50967db 201003_02
hgs
parents:
diff changeset
   628
    if( aIdEntryCount > 0 )
7feec50967db 201003_02
hgs
parents:
diff changeset
   629
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   630
        aEntryIdList.CreateL( aIdEntryCount * ( aColName.Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   631
                + KMaxIntNumLength ) - 1 );
7feec50967db 201003_02
hgs
parents:
diff changeset
   632
        for( TInt i = 0; i < aIdEntryCount; i++ )
7feec50967db 201003_02
hgs
parents:
diff changeset
   633
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   634
            aEntryIdList.Append( aColName );
7feec50967db 201003_02
hgs
parents:
diff changeset
   635
            aEntryIdList.AppendNum( i );
7feec50967db 201003_02
hgs
parents:
diff changeset
   636
            if( i != aIdEntryCount - 1 )
7feec50967db 201003_02
hgs
parents:
diff changeset
   637
                {
7feec50967db 201003_02
hgs
parents:
diff changeset
   638
                aEntryIdList.Append( KComma );
7feec50967db 201003_02
hgs
parents:
diff changeset
   639
                }
7feec50967db 201003_02
hgs
parents:
diff changeset
   640
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   641
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   642
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   643
7feec50967db 201003_02
hgs
parents:
diff changeset
   644
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   645
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   646
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   647
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   648
void CaSqlQueryCreator::CreateGetEntriesQueryByQueryL(
7feec50967db 201003_02
hgs
parents:
diff changeset
   649
        const CCaInnerQuery* aQuery, CCaSqlQuery* aSqlQuery )
7feec50967db 201003_02
hgs
parents:
diff changeset
   650
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   651
    DEBUG(("_CA_:CASqlQueryCreator::CreateGetEntriesQueryByQueryL"));
7feec50967db 201003_02
hgs
parents:
diff changeset
   652
    RBuf whereStatement;
7feec50967db 201003_02
hgs
parents:
diff changeset
   653
    whereStatement.CleanupClosePushL();
7feec50967db 201003_02
hgs
parents:
diff changeset
   654
7feec50967db 201003_02
hgs
parents:
diff changeset
   655
    TUint flagsOn = aQuery->GetFlagsOn();
7feec50967db 201003_02
hgs
parents:
diff changeset
   656
    if( flagsOn != 0 )
7feec50967db 201003_02
hgs
parents:
diff changeset
   657
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   658
        whereStatement.ReAllocL( KAnd().Length() + whereStatement.Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   659
                + KSQLGetEntryFlagsOn().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   660
        whereStatement.Append( KAnd );
7feec50967db 201003_02
hgs
parents:
diff changeset
   661
        whereStatement.Append( KSQLGetEntryFlagsOn );
7feec50967db 201003_02
hgs
parents:
diff changeset
   662
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   663
7feec50967db 201003_02
hgs
parents:
diff changeset
   664
    TUint flagsOff = aQuery->GetFlagsOff();
7feec50967db 201003_02
hgs
parents:
diff changeset
   665
    if( flagsOff != 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
                + KSQLGetEntryFlagsOff().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   669
        whereStatement.Append( KAnd );
7feec50967db 201003_02
hgs
parents:
diff changeset
   670
        whereStatement.Append( KSQLGetEntryFlagsOff );
7feec50967db 201003_02
hgs
parents:
diff changeset
   671
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   672
7feec50967db 201003_02
hgs
parents:
diff changeset
   673
    TInt role = aQuery->GetRole();
7feec50967db 201003_02
hgs
parents:
diff changeset
   674
    if( role != 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
                + KSQLGetEntryRole().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   678
        whereStatement.Append( KAnd );
7feec50967db 201003_02
hgs
parents:
diff changeset
   679
        whereStatement.Append( KSQLGetEntryRole );
7feec50967db 201003_02
hgs
parents:
diff changeset
   680
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   681
7feec50967db 201003_02
hgs
parents:
diff changeset
   682
    TUint uid = aQuery->GetUid();
7feec50967db 201003_02
hgs
parents:
diff changeset
   683
    if( uid != 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
                + KSQLGetEntryUid().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   687
        whereStatement.Append( KAnd );
7feec50967db 201003_02
hgs
parents:
diff changeset
   688
        whereStatement.Append( KSQLGetEntryUid );
7feec50967db 201003_02
hgs
parents:
diff changeset
   689
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   690
7feec50967db 201003_02
hgs
parents:
diff changeset
   691
    const CDesC16ArrayFlat* typeNames = aQuery->GetEntryTypeNames();
7feec50967db 201003_02
hgs
parents:
diff changeset
   692
7feec50967db 201003_02
hgs
parents:
diff changeset
   693
    if( typeNames && typeNames->MdcaCount() > 0 )
7feec50967db 201003_02
hgs
parents:
diff changeset
   694
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   695
        RBuf typeNameWhereStatement;
7feec50967db 201003_02
hgs
parents:
diff changeset
   696
        typeNameWhereStatement.CleanupClosePushL();
7feec50967db 201003_02
hgs
parents:
diff changeset
   697
        for( TInt i = 0; i < typeNames->MdcaCount(); i++ )
7feec50967db 201003_02
hgs
parents:
diff changeset
   698
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   699
            typeNameWhereStatement.ReAllocL(
7feec50967db 201003_02
hgs
parents:
diff changeset
   700
                    typeNameWhereStatement.Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   701
                    + typeNames->MdcaPoint( i ).Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   702
                    + KSingleQuotes().Length() * 2 + KComma().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   703
            typeNameWhereStatement.Append( KSingleQuotes );
7feec50967db 201003_02
hgs
parents:
diff changeset
   704
            typeNameWhereStatement.Append( typeNames->MdcaPoint( i ) );
7feec50967db 201003_02
hgs
parents:
diff changeset
   705
            typeNameWhereStatement.Append( KSingleQuotes );
7feec50967db 201003_02
hgs
parents:
diff changeset
   706
            if( i != typeNames->MdcaCount() - 1 )
7feec50967db 201003_02
hgs
parents:
diff changeset
   707
                {
7feec50967db 201003_02
hgs
parents:
diff changeset
   708
                typeNameWhereStatement.Append( KComma );
7feec50967db 201003_02
hgs
parents:
diff changeset
   709
                }
7feec50967db 201003_02
hgs
parents:
diff changeset
   710
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   711
        whereStatement.ReAllocL( KAnd().Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   712
                + KSQLGetEntryTypeNames().Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   713
                + typeNameWhereStatement.Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   714
                + whereStatement.Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   715
        whereStatement.Append( KAnd );
7feec50967db 201003_02
hgs
parents:
diff changeset
   716
        whereStatement.AppendFormat( KSQLGetEntryTypeNames,
7feec50967db 201003_02
hgs
parents:
diff changeset
   717
                &typeNameWhereStatement );
7feec50967db 201003_02
hgs
parents:
diff changeset
   718
        CleanupStack::PopAndDestroy( &typeNameWhereStatement );
7feec50967db 201003_02
hgs
parents:
diff changeset
   719
        }
89
hgs
parents: 88
diff changeset
   720
    
hgs
parents: 88
diff changeset
   721
    if( aQuery->GetAttributes().Count() )
hgs
parents: 88
diff changeset
   722
        {
hgs
parents: 88
diff changeset
   723
        RBuf whereAttributes;
hgs
parents: 88
diff changeset
   724
        whereAttributes.CleanupClosePushL();
hgs
parents: 88
diff changeset
   725
        whereAttributes.CreateL( KEmpty );
hgs
parents: 88
diff changeset
   726
        
hgs
parents: 88
diff changeset
   727
        for( TInt j=1; j <= aQuery->GetAttributes().Count(); j++ )
hgs
parents: 88
diff changeset
   728
            {
hgs
parents: 88
diff changeset
   729
            // at1.AT_NAME = 'Attribute_Name_1' AND at1.AT_VALUE = 'Attribute_VALUE_1'
hgs
parents: 88
diff changeset
   730
            TPtrC atrName( aQuery->GetAttributes().operator [](j-1)->Name() );
hgs
parents: 88
diff changeset
   731
            TPtrC atrValue( aQuery->GetAttributes().operator [](j-1)->Value() );
hgs
parents: 88
diff changeset
   732
hgs
parents: 88
diff changeset
   733
            whereAttributes.ReAllocL( whereAttributes.Length() + 2 * KAnd().Length() + 
hgs
parents: 88
diff changeset
   734
                    4 * KSingleQuotes().Length() +
hgs
parents: 88
diff changeset
   735
                    2 * KMaxIntNumLength + 
hgs
parents: 88
diff changeset
   736
                    2 * KAt().Length() + 2 * KDot().Length() + 2 * KEqual().Length() +
hgs
parents: 88
diff changeset
   737
                    KColumnAttrName().Length() + KColumnAttrValue().Length() +
hgs
parents: 88
diff changeset
   738
                    atrName.Length() + atrValue.Length() );
hgs
parents: 88
diff changeset
   739
            
hgs
parents: 88
diff changeset
   740
            whereAttributes.Append( KAnd );
hgs
parents: 88
diff changeset
   741
            
hgs
parents: 88
diff changeset
   742
            whereAttributes.Append( KAt );
hgs
parents: 88
diff changeset
   743
            whereAttributes.AppendNum( j );
hgs
parents: 88
diff changeset
   744
            whereAttributes.Append( KDot );
hgs
parents: 88
diff changeset
   745
            whereAttributes.Append( KColumnAttrName );
hgs
parents: 88
diff changeset
   746
            whereAttributes.Append( KEqual );
hgs
parents: 88
diff changeset
   747
            whereAttributes.Append( KSingleQuotes );
hgs
parents: 88
diff changeset
   748
            whereAttributes.Append( atrName );
hgs
parents: 88
diff changeset
   749
            whereAttributes.Append( KSingleQuotes );
hgs
parents: 88
diff changeset
   750
            
hgs
parents: 88
diff changeset
   751
            whereAttributes.Append( KAnd );
hgs
parents: 88
diff changeset
   752
            
hgs
parents: 88
diff changeset
   753
            whereAttributes.Append( KAt );
hgs
parents: 88
diff changeset
   754
            whereAttributes.AppendNum( j );
hgs
parents: 88
diff changeset
   755
            whereAttributes.Append( KDot );
hgs
parents: 88
diff changeset
   756
            whereAttributes.Append( KColumnAttrValue );
hgs
parents: 88
diff changeset
   757
            whereAttributes.Append( KEqual );
hgs
parents: 88
diff changeset
   758
            whereAttributes.Append( KSingleQuotes );
hgs
parents: 88
diff changeset
   759
            whereAttributes.Append( atrValue );
hgs
parents: 88
diff changeset
   760
            whereAttributes.Append( KSingleQuotes );
hgs
parents: 88
diff changeset
   761
            
hgs
parents: 88
diff changeset
   762
            }
hgs
parents: 88
diff changeset
   763
        
hgs
parents: 88
diff changeset
   764
        whereStatement.ReAllocL( whereStatement.Length() + whereAttributes.Length() );
hgs
parents: 88
diff changeset
   765
        whereStatement.Append( whereAttributes );
hgs
parents: 88
diff changeset
   766
        
hgs
parents: 88
diff changeset
   767
        CleanupStack::PopAndDestroy( &whereAttributes );
hgs
parents: 88
diff changeset
   768
        }
hgs
parents: 88
diff changeset
   769
hgs
parents: 88
diff changeset
   770
    RBuf leftJoins;
hgs
parents: 88
diff changeset
   771
    leftJoins.CleanupClosePushL();
hgs
parents: 88
diff changeset
   772
    leftJoins.CreateL( KEmpty );
hgs
parents: 88
diff changeset
   773
    if( aQuery->GetAttributes().Count() )
hgs
parents: 88
diff changeset
   774
        {
hgs
parents: 88
diff changeset
   775
        for( TInt j=1; j <= aQuery->GetAttributes().Count(); j++ )
hgs
parents: 88
diff changeset
   776
            {
hgs
parents: 88
diff changeset
   777
            // LEFT JOIN CA_ATTRIBUTE as at1 ON ENTRY_ID = at1.AT_ENTRY_ID
hgs
parents: 88
diff changeset
   778
            leftJoins.ReAllocL( leftJoins.Length() + 
hgs
parents: 88
diff changeset
   779
                    KLeftJoinCaAttrubute1().Length() + KMaxIntNumLength +
hgs
parents: 88
diff changeset
   780
                    KLeftJoinCaAttrubute2().Length() + KMaxIntNumLength +
hgs
parents: 88
diff changeset
   781
                    KLeftJoinCaAttrubute3().Length()
hgs
parents: 88
diff changeset
   782
                    );
hgs
parents: 88
diff changeset
   783
            
hgs
parents: 88
diff changeset
   784
            leftJoins.Append( KLeftJoinCaAttrubute1 );
hgs
parents: 88
diff changeset
   785
            leftJoins.AppendNum( j );
hgs
parents: 88
diff changeset
   786
            leftJoins.Append( KLeftJoinCaAttrubute2 );
hgs
parents: 88
diff changeset
   787
            leftJoins.AppendNum( j );
hgs
parents: 88
diff changeset
   788
            leftJoins.Append( KLeftJoinCaAttrubute3 );
hgs
parents: 88
diff changeset
   789
            }
hgs
parents: 88
diff changeset
   790
        }
hgs
parents: 88
diff changeset
   791
    
hgs
parents: 88
diff changeset
   792
    
hgs
parents: 88
diff changeset
   793
    whereStatement.ReAllocL( whereStatement.Length() + 
hgs
parents: 88
diff changeset
   794
            KGroupBy().Length() + KColumnEntryId().Length() );
hgs
parents: 88
diff changeset
   795
    whereStatement.Append( KGroupBy );
hgs
parents: 88
diff changeset
   796
    whereStatement.Append( KColumnEntryId );
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   797
7feec50967db 201003_02
hgs
parents:
diff changeset
   798
    TInt groupId = aQuery->GetParentId();
7feec50967db 201003_02
hgs
parents:
diff changeset
   799
    RBuf query;
7feec50967db 201003_02
hgs
parents:
diff changeset
   800
    query.CleanupClosePushL();
7feec50967db 201003_02
hgs
parents:
diff changeset
   801
    if( groupId > 0 )
7feec50967db 201003_02
hgs
parents:
diff changeset
   802
        {
89
hgs
parents: 88
diff changeset
   803
        RBuf getListByParentId2withWhere;
hgs
parents: 88
diff changeset
   804
        getListByParentId2withWhere.CleanupClosePushL();
hgs
parents: 88
diff changeset
   805
        getListByParentId2withWhere.CreateL( KSQLGetListByParentId2().Length() + whereStatement.Length() );
hgs
parents: 88
diff changeset
   806
        getListByParentId2withWhere.AppendFormat( KSQLGetListByParentId2, &whereStatement );
hgs
parents: 88
diff changeset
   807
        
hgs
parents: 88
diff changeset
   808
        query.ReAllocL( KSQLGetListByParentId1().Length() +  leftJoins.Length() +
hgs
parents: 88
diff changeset
   809
                getListByParentId2withWhere.Length() );
hgs
parents: 88
diff changeset
   810
        query.Append( KSQLGetListByParentId1 );
hgs
parents: 88
diff changeset
   811
        query.Append( leftJoins );
hgs
parents: 88
diff changeset
   812
        query.Append( getListByParentId2withWhere );
hgs
parents: 88
diff changeset
   813
        CleanupStack::PopAndDestroy( &getListByParentId2withWhere );
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   814
        }
99
hgs
parents: 94
diff changeset
   815
    else if ( aQuery->GetChildId() > 0 )
hgs
parents: 94
diff changeset
   816
        {
hgs
parents: 94
diff changeset
   817
        RBuf getListByCildIdwithWhere;
hgs
parents: 94
diff changeset
   818
        getListByCildIdwithWhere.CleanupClosePushL();
hgs
parents: 94
diff changeset
   819
        getListByCildIdwithWhere.CreateL( KSQLGetListByChildId().Length() + whereStatement.Length() );
hgs
parents: 94
diff changeset
   820
        getListByCildIdwithWhere.AppendFormat( KSQLGetListByChildId, &whereStatement );
hgs
parents: 94
diff changeset
   821
        
hgs
parents: 94
diff changeset
   822
        query.ReAllocL( KSQLGetListByParentId1().Length() +  leftJoins.Length() +
hgs
parents: 94
diff changeset
   823
                getListByCildIdwithWhere.Length() );
hgs
parents: 94
diff changeset
   824
        query.Append( KSQLGetListByParentId1 );
hgs
parents: 94
diff changeset
   825
        query.Append( leftJoins );
hgs
parents: 94
diff changeset
   826
        query.Append( getListByCildIdwithWhere );
hgs
parents: 94
diff changeset
   827
        CleanupStack::PopAndDestroy( &getListByCildIdwithWhere );
hgs
parents: 94
diff changeset
   828
        }
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   829
    else
7feec50967db 201003_02
hgs
parents:
diff changeset
   830
        {
89
hgs
parents: 88
diff changeset
   831
        query.CreateL( KSQLGetList1().Length() );
hgs
parents: 88
diff changeset
   832
        query.Append( KSQLGetList1 );
hgs
parents: 88
diff changeset
   833
        query.ReAllocL( query.Length() + leftJoins.Length() + KSQLGetList2().Length() );
hgs
parents: 88
diff changeset
   834
        query.Append( leftJoins );
hgs
parents: 88
diff changeset
   835
        query.Append( KSQLGetList2 );
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   836
        if( whereStatement.Length() >= KAnd().Length() )
7feec50967db 201003_02
hgs
parents:
diff changeset
   837
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   838
            TPtrC ptrWhereStatement( whereStatement.Right(
7feec50967db 201003_02
hgs
parents:
diff changeset
   839
                    whereStatement.Length() - KAnd().Length() ) );
89
hgs
parents: 88
diff changeset
   840
            query.ReAllocL( query.Length() +  KWhere().Length()
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   841
                    + ptrWhereStatement.Length() );
89
hgs
parents: 88
diff changeset
   842
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   843
            query.Append( KWhere );
7feec50967db 201003_02
hgs
parents:
diff changeset
   844
            query.Append( ptrWhereStatement );
7feec50967db 201003_02
hgs
parents:
diff changeset
   845
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   846
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   847
7feec50967db 201003_02
hgs
parents:
diff changeset
   848
    CCaInnerQuery::TSortAttribute sort = aQuery->GetSort();
7feec50967db 201003_02
hgs
parents:
diff changeset
   849
    ModifyQueryForSortOrderL( sort, query, groupId > 0 );
7feec50967db 201003_02
hgs
parents:
diff changeset
   850
7feec50967db 201003_02
hgs
parents:
diff changeset
   851
    if( aQuery->GetCount() > 0 )
7feec50967db 201003_02
hgs
parents:
diff changeset
   852
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   853
        query.ReAllocL( query.Length() + KLimit().Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   854
                + KMaxIntNumLength );
7feec50967db 201003_02
hgs
parents:
diff changeset
   855
        query.Append( KLimit );
7feec50967db 201003_02
hgs
parents:
diff changeset
   856
        TInt limitCount = aQuery->GetCount();
7feec50967db 201003_02
hgs
parents:
diff changeset
   857
        query.AppendNum( limitCount );
7feec50967db 201003_02
hgs
parents:
diff changeset
   858
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   859
7feec50967db 201003_02
hgs
parents:
diff changeset
   860
    aSqlQuery->SetQueryL( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   861
    CleanupStack::PopAndDestroy( &query );
89
hgs
parents: 88
diff changeset
   862
    CleanupStack::PopAndDestroy( &leftJoins );
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   863
    CleanupStack::PopAndDestroy( &whereStatement );
7feec50967db 201003_02
hgs
parents:
diff changeset
   864
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   865
7feec50967db 201003_02
hgs
parents:
diff changeset
   866
7feec50967db 201003_02
hgs
parents:
diff changeset
   867
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   868
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   869
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   870
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   871
void CaSqlQueryCreator::CreateCustomSortQueryL(
7feec50967db 201003_02
hgs
parents:
diff changeset
   872
        const RArray<TInt>& aEntryIds,
7feec50967db 201003_02
hgs
parents:
diff changeset
   873
        RPointerArray<CCaSqlQuery>& aSqlQuery,
7feec50967db 201003_02
hgs
parents:
diff changeset
   874
        RSqlDatabase& aSqlDb )
7feec50967db 201003_02
hgs
parents:
diff changeset
   875
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   876
    for( TInt i = 0; i < aEntryIds.Count(); i++ )
7feec50967db 201003_02
hgs
parents:
diff changeset
   877
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   878
        CCaSqlQuery* query = CCaSqlQuery::NewLC( aSqlDb );
7feec50967db 201003_02
hgs
parents:
diff changeset
   879
        query->SetQueryL( KSQLUpdatePositionInGroup );
7feec50967db 201003_02
hgs
parents:
diff changeset
   880
        aSqlQuery.Append( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   881
        CleanupStack::Pop( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   882
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   883
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   884
7feec50967db 201003_02
hgs
parents:
diff changeset
   885
7feec50967db 201003_02
hgs
parents:
diff changeset
   886
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   887
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   888
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   889
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   890
void CaSqlQueryCreator::ModifyQueryForSortOrderL(
7feec50967db 201003_02
hgs
parents:
diff changeset
   891
        const CCaInnerQuery::TSortAttribute aSortType, RBuf& aQuery,
7feec50967db 201003_02
hgs
parents:
diff changeset
   892
        TBool aSortByGroup )
7feec50967db 201003_02
hgs
parents:
diff changeset
   893
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   894
    DEBUG(("_CA_:CASqlQueryCreator::ModifyQueryForSortOrderL"));
7feec50967db 201003_02
hgs
parents:
diff changeset
   895
    switch ( aSortType )
7feec50967db 201003_02
hgs
parents:
diff changeset
   896
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   897
        case CCaInnerQuery::Name:
7feec50967db 201003_02
hgs
parents:
diff changeset
   898
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   899
            aQuery.ReAllocL( aQuery.Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   900
                    + KSQLSortOrderNameAsc().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   901
            aQuery.Append( KSQLSortOrderNameAsc );
7feec50967db 201003_02
hgs
parents:
diff changeset
   902
            break;
7feec50967db 201003_02
hgs
parents:
diff changeset
   903
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   904
        case CCaInnerQuery::NameDesc:
7feec50967db 201003_02
hgs
parents:
diff changeset
   905
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   906
            aQuery.ReAllocL( aQuery.Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   907
                    + KSQLSortOrderNameDesc().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   908
            aQuery.Append( KSQLSortOrderNameDesc );
7feec50967db 201003_02
hgs
parents:
diff changeset
   909
            break;
7feec50967db 201003_02
hgs
parents:
diff changeset
   910
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   911
        case CCaInnerQuery::CreatedTimestamp:
7feec50967db 201003_02
hgs
parents:
diff changeset
   912
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   913
            aQuery.ReAllocL( aQuery.Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   914
                    + KSQLSortOrderCreatedTimestampAsc().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   915
            aQuery.Append( KSQLSortOrderCreatedTimestampAsc );
7feec50967db 201003_02
hgs
parents:
diff changeset
   916
            break;
7feec50967db 201003_02
hgs
parents:
diff changeset
   917
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   918
        case CCaInnerQuery::CreatedTimestampDesc:
7feec50967db 201003_02
hgs
parents:
diff changeset
   919
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   920
            aQuery.ReAllocL( aQuery.Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   921
                    + KSQLSortOrderCreatedTimestampDesc().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   922
            aQuery.Append( KSQLSortOrderCreatedTimestampDesc );
7feec50967db 201003_02
hgs
parents:
diff changeset
   923
            break;
7feec50967db 201003_02
hgs
parents:
diff changeset
   924
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   925
        case CCaInnerQuery::DefaultDesc:
7feec50967db 201003_02
hgs
parents:
diff changeset
   926
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   927
            if( aSortByGroup )
7feec50967db 201003_02
hgs
parents:
diff changeset
   928
                {
7feec50967db 201003_02
hgs
parents:
diff changeset
   929
                aQuery.ReAllocL( aQuery.Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   930
                        + KSQLSortOrderDefaultDesc().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   931
                aQuery.Append( KSQLSortOrderDefaultDesc );
7feec50967db 201003_02
hgs
parents:
diff changeset
   932
                }
7feec50967db 201003_02
hgs
parents:
diff changeset
   933
            else
7feec50967db 201003_02
hgs
parents:
diff changeset
   934
                {
7feec50967db 201003_02
hgs
parents:
diff changeset
   935
                aQuery.ReAllocL( aQuery.Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   936
                        + KSQLSortOrderIdDesc().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   937
                aQuery.Append( KSQLSortOrderIdDesc );
7feec50967db 201003_02
hgs
parents:
diff changeset
   938
                }
7feec50967db 201003_02
hgs
parents:
diff changeset
   939
            break;
7feec50967db 201003_02
hgs
parents:
diff changeset
   940
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   941
        case CCaInnerQuery::Default:
7feec50967db 201003_02
hgs
parents:
diff changeset
   942
        default:
7feec50967db 201003_02
hgs
parents:
diff changeset
   943
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   944
            if( aSortByGroup )
7feec50967db 201003_02
hgs
parents:
diff changeset
   945
                {
7feec50967db 201003_02
hgs
parents:
diff changeset
   946
                aQuery.ReAllocL( aQuery.Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   947
                        + KSQLSortOrderDefault().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   948
                aQuery.Append( KSQLSortOrderDefault );
7feec50967db 201003_02
hgs
parents:
diff changeset
   949
                }
7feec50967db 201003_02
hgs
parents:
diff changeset
   950
            else
7feec50967db 201003_02
hgs
parents:
diff changeset
   951
                {
7feec50967db 201003_02
hgs
parents:
diff changeset
   952
                aQuery.ReAllocL( aQuery.Length()
7feec50967db 201003_02
hgs
parents:
diff changeset
   953
                        + KSQLSortOrderIdAsc().Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   954
                aQuery.Append( KSQLSortOrderIdAsc );
7feec50967db 201003_02
hgs
parents:
diff changeset
   955
                }
7feec50967db 201003_02
hgs
parents:
diff changeset
   956
            break;
7feec50967db 201003_02
hgs
parents:
diff changeset
   957
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   958
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   959
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   960
7feec50967db 201003_02
hgs
parents:
diff changeset
   961
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   962
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   963
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   964
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   965
TBool CaSqlQueryCreator::CreateOrganizeQueryL(
7feec50967db 201003_02
hgs
parents:
diff changeset
   966
        const RArray<TInt>& aEntryIds, TCaOperationParams aParams,
7feec50967db 201003_02
hgs
parents:
diff changeset
   967
        RSqlDatabase& aSqlDb, RPointerArray<CCaSqlQuery>& aSqlQueries )
7feec50967db 201003_02
hgs
parents:
diff changeset
   968
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   969
    DEBUG(("_CA_:CASqlQueryCreator::CreateOrganizeQueryL"));
7feec50967db 201003_02
hgs
parents:
diff changeset
   970
    TBool revereseInsertOrder = false;
7feec50967db 201003_02
hgs
parents:
diff changeset
   971
    TInt idCount( aEntryIds.Count() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   972
7feec50967db 201003_02
hgs
parents:
diff changeset
   973
    CCaSqlQuery * query = CCaSqlQuery::NewLC( aSqlDb );
7feec50967db 201003_02
hgs
parents:
diff changeset
   974
    PopulateQueryWithIdListL( idCount, query,
7feec50967db 201003_02
hgs
parents:
diff changeset
   975
            KSQLOrganizeRemoveEntriesFromGroup );
7feec50967db 201003_02
hgs
parents:
diff changeset
   976
    query->SetTableType( CCaSqlQuery::EGroupTableRemove );
7feec50967db 201003_02
hgs
parents:
diff changeset
   977
    aSqlQueries.AppendL( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   978
    CleanupStack::Pop( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   979
7feec50967db 201003_02
hgs
parents:
diff changeset
   980
    switch( aParams.iOperationType )
7feec50967db 201003_02
hgs
parents:
diff changeset
   981
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   982
        case TCaOperationParams::EInsert:
7feec50967db 201003_02
hgs
parents:
diff changeset
   983
7feec50967db 201003_02
hgs
parents:
diff changeset
   984
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   985
            if( aParams.iBeforeEntryId <= 0 )
7feec50967db 201003_02
hgs
parents:
diff changeset
   986
                {
7feec50967db 201003_02
hgs
parents:
diff changeset
   987
                User::Leave( KErrNotSupported );
7feec50967db 201003_02
hgs
parents:
diff changeset
   988
                }
7feec50967db 201003_02
hgs
parents:
diff changeset
   989
7feec50967db 201003_02
hgs
parents:
diff changeset
   990
            query = CCaSqlQuery::NewLC( aSqlDb );
7feec50967db 201003_02
hgs
parents:
diff changeset
   991
            query->SetQueryL( KSQLOrganizeInsertToGroupBasic );
7feec50967db 201003_02
hgs
parents:
diff changeset
   992
            query->SetTableType( CCaSqlQuery::EGroupTableInsert );
7feec50967db 201003_02
hgs
parents:
diff changeset
   993
            aSqlQueries.AppendL( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   994
            CleanupStack::Pop( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   995
            break;
7feec50967db 201003_02
hgs
parents:
diff changeset
   996
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   997
        case TCaOperationParams::EAppend:
7feec50967db 201003_02
hgs
parents:
diff changeset
   998
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   999
            CCaSqlQuery * query = CCaSqlQuery::NewLC( aSqlDb );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1000
            query->SetQueryL( KSQLOrganizeAppendToGroup );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1001
            query->SetTableType( CCaSqlQuery::EGroupTableInsert );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1002
            aSqlQueries.AppendL( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1003
            CleanupStack::Pop( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1004
            break;
7feec50967db 201003_02
hgs
parents:
diff changeset
  1005
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
  1006
        case TCaOperationParams::EPrepend:
7feec50967db 201003_02
hgs
parents:
diff changeset
  1007
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
  1008
            query = CCaSqlQuery::NewLC( aSqlDb );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1009
            query->SetQueryL( KSQLOrganizeInsertToGroupPrepend );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1010
            query->SetTableType( CCaSqlQuery::EGroupTableInsert );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1011
            aSqlQueries.AppendL( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1012
            CleanupStack::Pop( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1013
7feec50967db 201003_02
hgs
parents:
diff changeset
  1014
            revereseInsertOrder = true;
7feec50967db 201003_02
hgs
parents:
diff changeset
  1015
7feec50967db 201003_02
hgs
parents:
diff changeset
  1016
            break;
7feec50967db 201003_02
hgs
parents:
diff changeset
  1017
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
  1018
        case TCaOperationParams::ERemove:
7feec50967db 201003_02
hgs
parents:
diff changeset
  1019
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
  1020
            break;
7feec50967db 201003_02
hgs
parents:
diff changeset
  1021
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
  1022
        default:
7feec50967db 201003_02
hgs
parents:
diff changeset
  1023
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
  1024
            User::Leave( KErrNotSupported );
7feec50967db 201003_02
hgs
parents:
diff changeset
  1025
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
  1026
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
  1027
    return revereseInsertOrder;
7feec50967db 201003_02
hgs
parents:
diff changeset
  1028
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
  1029
7feec50967db 201003_02
hgs
parents:
diff changeset
  1030
// ---------------------------------------------------------------------------
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
CaSqlQueryCreator::TIconType CaSqlQueryCreator::CheckIconType( const CCaInnerEntry* aEntry )
7feec50967db 201003_02
hgs
parents:
diff changeset
  1035
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
  1036
    CaSqlQueryCreator::TIconType iconType;
88
hgs
parents: 85
diff changeset
  1037
    if( 
92
hgs
parents: 89
diff changeset
  1038
        aEntry->Icon()->ApplicationId().Length() == 0 &&
hgs
parents: 89
diff changeset
  1039
        aEntry->Icon()->SkinId().Length() == 0 &&
hgs
parents: 89
diff changeset
  1040
        aEntry->Icon()->FileName().Length() == 0 )
85
7feec50967db 201003_02
hgs
parents:
diff changeset
  1041
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
  1042
        if( aEntry->GetIconId() > 0 )
7feec50967db 201003_02
hgs
parents:
diff changeset
  1043
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
  1044
            iconType = ENullIconToRemove;
7feec50967db 201003_02
hgs
parents:
diff changeset
  1045
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
  1046
        else
7feec50967db 201003_02
hgs
parents:
diff changeset
  1047
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
  1048
            iconType = ENullIcon;
7feec50967db 201003_02
hgs
parents:
diff changeset
  1049
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
  1050
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
  1051
    else
7feec50967db 201003_02
hgs
parents:
diff changeset
  1052
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
  1053
        iconType = EProperIcon;
7feec50967db 201003_02
hgs
parents:
diff changeset
  1054
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
  1055
    return iconType;
7feec50967db 201003_02
hgs
parents:
diff changeset
  1056
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
  1057
7feec50967db 201003_02
hgs
parents:
diff changeset
  1058