/*
* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description: Base class for all table classes.
*
*/
// INCLUDE FILES
#include <mpxlog.h>
#include <mpxmedia.h>
#include <mpxmediaarray.h>
#include "mpxdbcommonstd.h"
#include "mpxdbcommonutil.h"
#include "mpxdbmanager.h"
#include "mpxdbtable.h"
// ============================ MEMBER FUNCTIONS ==============================
// ----------------------------------------------------------------------------
// Constructor
// ----------------------------------------------------------------------------
//
EXPORT_C CMPXDbTable::CMPXDbTable(
CMPXDbManager& aDbManager) :
iDbManager(aDbManager)
{
MPX_FUNC("CMPXDbTable::CMPXDbTable");
}
// ----------------------------------------------------------------------------
// Second phase constructor.
// ----------------------------------------------------------------------------
//
EXPORT_C void CMPXDbTable::BaseConstructL()
{
MPX_FUNC("CMPXDbTable::BaseConstructL");
iDbManager.RegisterTableL(*this);
}
// ----------------------------------------------------------------------------
// Destructor
// ----------------------------------------------------------------------------
//
EXPORT_C CMPXDbTable::~CMPXDbTable()
{
MPX_FUNC("CMPXDbTable::~CMPXDbTable");
}
// ----------------------------------------------------------------------------
// CMPXDbTable::UpdateMediaL default implementation
// ----------------------------------------------------------------------------
//
EXPORT_C void CMPXDbTable::UpdateMediaL(
RSqlStatement& /* aRecord */,
const TArray<TMPXAttribute>& /* aAttrs */,
CMPXMedia& /* aMedia */)
{
// do nothing
}
// ----------------------------------------------------------------------------
// CMPXDbTable::ExecuteMediaQueryL
// ----------------------------------------------------------------------------
//
EXPORT_C void CMPXDbTable::ExecuteMediaQueryL(
const TArray<TMPXAttribute>& aAttrs,
CMPXMediaArray& aMediaArray,
const TDesC& aQuery,
TInt aValue)
{
MPX_FUNC("CMPXDbTable::ExecuteMediaQueryL");
HBufC* query = HBufC::NewLC(aQuery.Length() + KMCIntegerLen);
query->Des().Format(aQuery, aValue);
ExecuteMediaQueryL(aAttrs, aMediaArray, *query);
CleanupStack::PopAndDestroy(query);
}
// ----------------------------------------------------------------------------
// CMPXDbTable::ExecuteMediaQueryL
// ----------------------------------------------------------------------------
//
EXPORT_C void CMPXDbTable::ExecuteMediaQueryL(
const TArray<TMPXAttribute>& aAttrs,
CMPXMediaArray& aMediaArray,
const TDesC& aQuery,
const TDesC& aValue)
{
MPX_FUNC("CMPXDbTable::ExecuteMediaQueryL");
HBufC* query = HBufC::NewLC(aQuery.Length() + aValue.Length());
query->Des().Format(aQuery, &aValue);
ExecuteMediaQueryL(aAttrs, aMediaArray, *query);
CleanupStack::PopAndDestroy(query);
}
// ----------------------------------------------------------------------------
// CMPXDbTable::ExecuteMediaQueryL
// ----------------------------------------------------------------------------
//
EXPORT_C void CMPXDbTable::ExecuteMediaQueryL(
const TArray<TMPXAttribute>& aAttrs,
CMPXMediaArray& aMediaArray,
const TDesC& aQuery,
TInt aValue1,
TInt aValue2)
{
MPX_FUNC("CMPXDbTable::ExecuteMediaQueryL");
HBufC* query = HBufC::NewLC(aQuery.Length() + 2 * KMCIntegerLen);
query->Des().Format(aQuery, aValue1, aValue2);
ExecuteMediaQueryL(aAttrs, aMediaArray, *query);
CleanupStack::PopAndDestroy(query);
}
// ----------------------------------------------------------------------------
// CMPXDbTable::ExecuteMediaQueryL
// ----------------------------------------------------------------------------
//
EXPORT_C void CMPXDbTable::ExecuteMediaQueryL(
const TArray<TMPXAttribute>& aAttrs,
CMPXMediaArray& aMediaArray,
const TDesC& aQuery,
const TDesC& aValue1,
TInt aValue2)
{
MPX_FUNC("CMPXDbTable::ExecuteMediaQueryL");
HBufC* query = HBufC::NewLC(aQuery.Length() + aValue1.Length() + KMCIntegerLen);
query->Des().Format(aQuery, &aValue1, aValue2);
ExecuteMediaQueryL(aAttrs, aMediaArray, *query);
CleanupStack::PopAndDestroy(query);
}
// ----------------------------------------------------------------------------
// CMPXDbTable::ExecuteMediaQueryL
// ----------------------------------------------------------------------------
//
EXPORT_C void CMPXDbTable::ExecuteMediaQueryL(
const TArray<TMPXAttribute>& aAttrs,
CMPXMediaArray& aMediaArray,
const TDesC& aQuery,
const TDesC& aValue1,
TInt aValue2,
const TDesC& aValue3,
TInt aValue4)
{
MPX_FUNC("CMPXDbTable::ExecuteMediaQueryL");
HBufC* query = HBufC::NewLC(aQuery.Length() +
aValue1.Length() +
aValue3.Length() +
2*KMCIntegerLen);
query->Des().Format(aQuery, &aValue1, aValue2, &aValue3, aValue4);
ExecuteMediaQueryL(aAttrs, aMediaArray, *query);
CleanupStack::PopAndDestroy(query);
}
// ----------------------------------------------------------------------------
// CMPXDbTable::ExecuteMediaQueryL
// ----------------------------------------------------------------------------
//
EXPORT_C void CMPXDbTable::ExecuteMediaQueryL(
const TArray<TMPXAttribute>& aAttrs,
CMPXMediaArray& aMediaArray,
const TDesC& aQuery)
{
MPX_FUNC("CMPXDbTable::ExecuteMediaQueryL");
RSqlStatement recordset(iDbManager.ExecuteSelectQueryL(aQuery));
CleanupClosePushL(recordset);
TInt pPath(0);
if (aMediaArray.Count())
{
CMPXMedia* pMedia = aMediaArray[0];
if (pMedia->IsSupported(KMPXMediaGeneralValue))
{ // Query excuted by OpenL
pPath = pMedia->ValueTObjectL<TInt>(KMPXMediaGeneralValue);
MPX_ASSERT(pPath);
}
}
TInt err(KErrNone);
RArray<TMPXItemId> ids;
CleanupClosePushL(ids);
while ((err = recordset.Next()) == KSqlAtRow)
{
CMPXMedia* media = CMPXMedia::NewL();
CleanupStack::PushL(media);
UpdateMediaL(recordset, aAttrs, *media);
if (media->IsSupported(KMPXMediaGeneralId) && pPath)
{
ids.AppendL(media->ValueTObjectL<TMPXItemId>(KMPXMediaGeneralId));
}
aMediaArray.AppendL(*media);
CleanupStack::PopAndDestroy(media);
}
// Append ids to the returned path
if (pPath)
{
((CMPXCollectionPath*)pPath)->AppendL(ids.Array());
}
CleanupStack::PopAndDestroy(&ids);
CleanupStack::PopAndDestroy(&recordset);
if (err!= KSqlAtEnd)
{
User::Leave(KErrCorrupt);
}
}
// ----------------------------------------------------------------------------
// CMPXDbTable::ExecuteMediaQueryL
// ----------------------------------------------------------------------------
//
EXPORT_C void CMPXDbTable::ExecuteMediaQueryL(
TInt aDrive,
const TArray<TMPXAttribute>& aAttrs,
CMPXMediaArray& aMediaArray,
const TDesC& aQuery,
TInt aPlaylistId)
{
MPX_FUNC("CMPXDbTable::ExecuteMediaQueryL");
HBufC* query = HBufC::NewLC(aQuery.Length() + KMCIntegerLen);
query->Des().Format(aQuery, aPlaylistId);
ExecuteMediaQueryOnDriveL(aDrive, aAttrs, aMediaArray, *query);
CleanupStack::PopAndDestroy(query);
}
// ----------------------------------------------------------------------------
// CMPXDbTable::ExecuteMediaQueryOnDriveL
// ----------------------------------------------------------------------------
//
EXPORT_C void CMPXDbTable::ExecuteMediaQueryOnDriveL(
TInt aDrive,
const TArray<TMPXAttribute>& aAttrs,
CMPXMediaArray& aMediaArray,
const TDesC& aQuery)
{
MPX_FUNC("CMPXDbTable::ExecuteMediaQueryL");
RSqlStatement recordset(iDbManager.ExecuteSelectQueryOnAllDrivesL(aDrive,aQuery));
CleanupClosePushL(recordset);
TInt pPath(0);
if (aMediaArray.Count())
{
CMPXMedia* pMedia = aMediaArray[0];
if (pMedia->IsSupported(KMPXMediaGeneralValue))
{ // Query excuted by OpenL
pPath = pMedia->ValueTObjectL<TInt>(KMPXMediaGeneralValue);
MPX_ASSERT(pPath);
}
}
TInt err(KErrNone);
RArray<TMPXItemId> ids;
CleanupClosePushL(ids);
while ((err = recordset.Next()) == KSqlAtRow)
{
CMPXMedia* media = CMPXMedia::NewL();
CleanupStack::PushL(media);
UpdateMediaL(recordset, aAttrs, *media);
if (media->IsSupported(KMPXMediaGeneralId) && pPath)
{
ids.AppendL(media->ValueTObjectL<TMPXItemId>(KMPXMediaGeneralId));
}
aMediaArray.AppendL(*media);
CleanupStack::PopAndDestroy(media);
}
// Append ids to the returned path
if (pPath)
{
((CMPXCollectionPath*)pPath)->AppendL(ids.Array());
}
CleanupStack::PopAndDestroy(&ids);
CleanupStack::PopAndDestroy(&recordset);
if (err!= KSqlAtEnd)
{
User::Leave(KErrCorrupt);
}
}
// ----------------------------------------------------------------------------
// CMPXDbTable::ExecuteMediaQueryL
// ----------------------------------------------------------------------------
//
EXPORT_C void CMPXDbTable::ExecuteMediaQueryL(
const TArray<TMPXAttribute>& aAttrs,
CMPXMediaArray& aMediaArray,
const TBool aAsc,
const TDesC& aQuery)
{
MPX_FUNC("CMPXDbTable::ExecuteMediaQueryL");
RSqlStatement recordset(iDbManager.ExecuteSelectQueryL(aQuery));
CleanupClosePushL(recordset);
TInt err(KErrNone);
while ((err = recordset.Next()) == KSqlAtRow)
{
CMPXMedia* media = CMPXMedia::NewL();
CleanupStack::PushL(media);
UpdateMediaL(recordset, aAttrs, *media);
if (aAsc != EFalse)
{
aMediaArray.AppendL(*media);
}
else
{
aMediaArray.InsertL(*media, 0);
}
CleanupStack::PopAndDestroy(media);
}
CleanupStack::PopAndDestroy(&recordset);
if (err!= KSqlAtEnd)
{
User::Leave(KErrCorrupt);
}
}
// ----------------------------------------------------------------------------
// CMPXDbTable::ExecuteMediaQueryL
// ----------------------------------------------------------------------------
//
EXPORT_C void CMPXDbTable::ExecuteMediaQueryL(
const TArray<TMPXAttribute>& aAttrs,
CMPXMedia& aMedia,
const TDesC& aQuery)
{
MPX_FUNC("CMPXDbTable::ExecuteMediaQueryL");
RSqlStatement recordset(iDbManager.ExecuteSelectQueryL(aQuery));
CleanupClosePushL(recordset);
if (recordset.Next() != KSqlAtRow)
{
User::Leave(KErrNotFound);
}
UpdateMediaL(recordset, aAttrs, aMedia);
CleanupStack::PopAndDestroy(&recordset);
}
// ----------------------------------------------------------------------------
// CMPXDbTable::ExecuteMediaQueryL
// ----------------------------------------------------------------------------
//
EXPORT_C void CMPXDbTable::ExecuteMediaQueryL(
const TArray<TMPXAttribute>& aAttrs,
CMPXMedia& aMedia,
const TDesC& aQuery,
TInt aValue)
{
MPX_FUNC("CMPXDbTable::ExecuteMediaQueryL");
HBufC* query = HBufC::NewLC(aQuery.Length() + KMCIntegerLen);
query->Des().Format(aQuery, aValue);
ExecuteMediaQueryL(aAttrs, aMedia, *query);
CleanupStack::PopAndDestroy(query);
}
// ----------------------------------------------------------------------------
// CMPXDbTable::ExecuteMediaQueryL
// ----------------------------------------------------------------------------
//
EXPORT_C void CMPXDbTable::ExecuteMediaQueryL(
const TArray<TMPXAttribute>& aAttrs,
CMPXMediaArray& aMediaArray,
const TDesC& aQuery,
const TDesC& aValue1,
const TDesC& aValue2)
{
MPX_FUNC("CMPXDbTable::ExecuteMediaQueryL");
HBufC* query = HBufC::NewLC(aQuery.Length() + aValue1.Length() + aValue2.Length());
query->Des().Format(aQuery, &aValue1, &aValue2);
ExecuteMediaQueryL(aAttrs, aMediaArray, *query);
CleanupStack::PopAndDestroy(query);
}
// ----------------------------------------------------------------------------
// CMPXDbTable::ExecuteIntQueryL
// ----------------------------------------------------------------------------
//
EXPORT_C TUint32 CMPXDbTable::ExecuteIntQueryL(
const TDesC& aQuery)
{
RSqlStatement recordset(iDbManager.ExecuteSelectQueryL(aQuery));
CleanupClosePushL(recordset);
if (recordset.Next() != KSqlAtRow)
{
User::Leave(KErrNotFound);
}
TUint32 value(recordset.ColumnInt64(KMPXTableDefaultIndex));
CleanupStack::PopAndDestroy(&recordset);
return value;
}
// ----------------------------------------------------------------------------
// CMPXDbTable::ExecuteIntQueryL
// ----------------------------------------------------------------------------
//
EXPORT_C TUint32 CMPXDbTable::ExecuteIntQueryL(
const TDesC& aQuery,
TUint32 aValue)
{
MPX_FUNC("CMPXDbTable::ExecuteIntQueryL");
HBufC* query = HBufC::NewLC(aQuery.Length() + KMCIntegerLen);
query->Des().Format(aQuery, aValue);
TUint32 ret(ExecuteIntQueryL(*query));
CleanupStack::PopAndDestroy(query);
return ret;
}
// ----------------------------------------------------------------------------
// CMPXDbTable::ExecuteIntQueryL
// ----------------------------------------------------------------------------
//
EXPORT_C TUint32 CMPXDbTable::ExecuteIntQueryL(
const TDesC& aQuery,
const TDesC& aValue1,
TUint32 aValue2)
{
MPX_FUNC("CMPXDbTable::ExecuteIntQueryL");
// replace single quotes
// reserve double the value length for single quote duplicates
HBufC* value1 = HBufC::NewLC(aValue1.Length() * 2);
TPtr value1Ptr(value1->Des());
MPXDbCommonUtil::FindAndReplaceSingleQuote(aValue1, value1Ptr);
// construct the query
HBufC* query = HBufC::NewLC(aQuery.Length() + value1Ptr.Length() + KMCIntegerLen);
query->Des().Format(aQuery, value1, aValue2);
// execute the query
TUint32 ret(ExecuteIntQueryL(*query));
CleanupStack::PopAndDestroy(query);
CleanupStack::PopAndDestroy(value1);
return ret;
}
// ----------------------------------------------------------------------------
// CMPXDbTable::ExecuteIntQueryL
// ----------------------------------------------------------------------------
//
EXPORT_C TUint32 CMPXDbTable::ExecuteIntQueryL(
const TDesC& aQuery,
const TDesC& aValue)
{
MPX_FUNC("CMPXDbTable::ExecuteIntQueryL");
// replace single quotes
HBufC* value = HBufC::NewLC(aValue.Length() * 2);
TPtr valuePtr(value->Des());
MPXDbCommonUtil::FindAndReplaceSingleQuote(aValue, valuePtr);
// construct the query
HBufC* query = HBufC::NewLC(aQuery.Length() + valuePtr.Length());
query->Des().Format(aQuery, value);
// execute the query
TUint32 ret(ExecuteIntQueryL(*query));
CleanupStack::PopAndDestroy(query);
CleanupStack::PopAndDestroy(value);
return ret;
}
// ----------------------------------------------------------------------------
// CMPXDbTable::ExecuteIntQueryL
// ----------------------------------------------------------------------------
//
EXPORT_C TUint32 CMPXDbTable::ExecuteIntQueryL(
const TDesC& aQuery,
TUint32 aValue1,
TUint32 aValue2)
{
MPX_FUNC("CMPXDbTable::ExecuteIntQueryL");
HBufC* query = HBufC::NewLC(aQuery.Length() + 2 * KMCIntegerLen);
query->Des().Format(aQuery, aValue1, aValue2);
TUint32 ret(ExecuteIntQueryL(*query));
CleanupStack::PopAndDestroy(query);
return ret;
}
// ----------------------------------------------------------------------------
// CMPXDbTable::ExecuteIntQueryL
// ----------------------------------------------------------------------------
//
EXPORT_C TUint32 CMPXDbTable::ExecuteIntQueryL(TInt aDriveID,const TDesC& aQuery)
{
MPX_FUNC("CMPXDbTable::ExecuteIntQueryL");
RSqlStatement recordset(iDbManager.ExecuteSelectQueryL(aDriveID,aQuery));
CleanupClosePushL(recordset);
if (recordset.Next() != KSqlAtRow)
{
User::Leave(KErrNotFound);
}
TUint32 value(recordset.ColumnInt64(KMPXTableDefaultIndex));
CleanupStack::PopAndDestroy(&recordset);
return value;
}
// ----------------------------------------------------------------------------
// CMPXDbTable::ExecuteSumQueryL
// ----------------------------------------------------------------------------
//
EXPORT_C TInt CMPXDbTable::ExecuteSumQueryL(
const TDesC& aQuery)
{
MPX_FUNC("CMPXDbTable::ExecuteSumQueryL");
RSqlStatement recordset(iDbManager.ExecuteSelectQueryL(aQuery));
CleanupClosePushL(recordset);
TInt sum(0);
TInt err(KErrNone);
while ((err = recordset.Next()) == KSqlAtRow)
{
sum += recordset.ColumnInt64(KMPXTableDefaultIndex);
}
CleanupStack::PopAndDestroy(&recordset);
if (err != KSqlAtEnd)
{
User::Leave(KErrCorrupt);
}
return sum;
}
// ----------------------------------------------------------------------------
// CMPXDbTable::ExecuteSumQueryL
// ----------------------------------------------------------------------------
//
EXPORT_C TInt CMPXDbTable::ExecuteSumQueryL(
const TDesC& aQuery,
TUint32 aValue)
{
MPX_FUNC("CMPXDbTable::ExecuteSumQueryL");
HBufC* query = HBufC::NewLC(aQuery.Length() + KMCIntegerLen);
query->Des().Format(aQuery, aValue);
TUint32 ret(ExecuteSumQueryL(*query));
CleanupStack::PopAndDestroy(query);
return ret;
}
// ----------------------------------------------------------------------------
// CMPXDbTable::ExecuteSumQueryL
// ----------------------------------------------------------------------------
//
EXPORT_C TInt CMPXDbTable::ExecuteSumQueryL(
const TDesC& aQuery,
TUint32 aValue1,
TUint32 aValue2)
{
MPX_FUNC("CMPXDbTable::ExecuteSumQueryL");
HBufC* query = HBufC::NewLC(aQuery.Length() + 2 * KMCIntegerLen);
query->Des().Format(aQuery, aValue1, aValue2);
TUint32 ret(ExecuteSumQueryL(*query));
CleanupStack::PopAndDestroy(query);
return ret;
}
// ----------------------------------------------------------------------------
// CMPXDbTable::ExecuteSumQueryL
// ----------------------------------------------------------------------------
//
EXPORT_C TInt CMPXDbTable::ExecuteSumQueryL(
const TDesC& aQuery,
TUint32 aValue1,
TUint32 aValue2,
TUint32 aValue3)
{
MPX_FUNC("CMPXDbTable::ExecuteSumQueryL");
HBufC* query = HBufC::NewLC(aQuery.Length() + 3 * KMCIntegerLen);
query->Des().Format(aQuery, aValue1, aValue2, aValue3);
TUint32 ret(ExecuteSumQueryL(*query));
CleanupStack::PopAndDestroy(query);
return ret;
}
// ----------------------------------------------------------------------------
// CMPXDbTable::ExecuteSumQueryL
// ----------------------------------------------------------------------------
//
EXPORT_C TUint32 CMPXDbTable::ExecuteSumQueryL(
const TDesC& aQuery,
const TDesC& aValue1,
TUint32 aValue2)
{
MPX_FUNC("CMPXDbTable::ExecuteSumQueryL");
// replace single quotes
// reserve double the value length for single quote duplicates
HBufC* value1 = HBufC::NewLC(aValue1.Length() * 2);
TPtr value1Ptr(value1->Des());
MPXDbCommonUtil::FindAndReplaceSingleQuote(aValue1, value1Ptr);
// construct the query
HBufC* query = HBufC::NewLC(aQuery.Length() + value1Ptr.Length() + KMCIntegerLen);
query->Des().Format(aQuery, value1, aValue2);
// execute the query
TUint32 ret(ExecuteSumQueryL(*query));
CleanupStack::PopAndDestroy(query);
CleanupStack::PopAndDestroy(value1);
return ret;
}
// ----------------------------------------------------------------------------
// CMPXDbTable::ExecuteSumQueryL
// ----------------------------------------------------------------------------
//
EXPORT_C TInt CMPXDbTable::ExecuteSumQueryL(
const TDesC& aQuery,
const TDesC& aValue1,
const TDesC& aValue2)
{
MPX_FUNC("CMPXDbTable::ExecuteSumQueryL");
// replace single quotes
// reserve double the value length for single quote duplicates
HBufC* value1 = HBufC::NewLC(aValue1.Length() * 2);
TPtr value1Ptr(value1->Des());
MPXDbCommonUtil::FindAndReplaceSingleQuote(aValue1, value1Ptr);
HBufC* value2 = HBufC::NewLC(aValue2.Length() * 2);
TPtr value2Ptr(value2->Des());
MPXDbCommonUtil::FindAndReplaceSingleQuote(aValue2, value2Ptr);
// construct the query
HBufC* query = HBufC::NewLC(aQuery.Length() + value1Ptr.Length() + value2Ptr.Length());
query->Des().Format(aQuery, value1, value2);
// execute the query
TUint32 ret(ExecuteSumQueryL(*query));
CleanupStack::PopAndDestroy(query);
CleanupStack::PopAndDestroy(value2);
CleanupStack::PopAndDestroy(value1);
return ret;
}
// ----------------------------------------------------------------------------
// CMPXDbTable::ExecuteSumQueryL
// ----------------------------------------------------------------------------
//
EXPORT_C TInt CMPXDbTable::ExecuteSumQueryL(
const TDesC& aQuery,
const TDesC& aValue)
{
MPX_FUNC("CMPXDbTable::ExecuteSumQueryL");
// replace single quotes
// reserve double the value length for single quote duplicates
HBufC* value = HBufC::NewLC(aValue.Length() * 2);
TPtr valuePtr(value->Des());
MPXDbCommonUtil::FindAndReplaceSingleQuote(aValue, valuePtr);
// construct the query
HBufC* query = HBufC::NewLC(aQuery.Length() + valuePtr.Length());
query->Des().Format(aQuery, value);
// execute the query
TUint32 ret(ExecuteSumQueryL(*query));
CleanupStack::PopAndDestroy(query);
CleanupStack::PopAndDestroy(value);
return ret;
}
// ----------------------------------------------------------------------------
// CMPXDbTable::ExecuteSumQueryL
// ----------------------------------------------------------------------------
//
EXPORT_C TInt CMPXDbTable::ExecuteSumQueryL(
const TDesC& aQuery,
const TDesC& aValue1,
TUint32 aValue2,
const TDesC& aValue3,
TUint32 aValue4)
{
MPX_FUNC("CMPXDbTable::ExecuteSumQueryL");
// replace single quotes
// reserve double the value length for single quote duplicates
HBufC* value1 = HBufC::NewLC(aValue1.Length() * 2);
TPtr value1Ptr(value1->Des());
MPXDbCommonUtil::FindAndReplaceSingleQuote(aValue1, value1Ptr);
// replace single quotes
// reserve double the value length for single quote duplicates
HBufC* value3 = HBufC::NewLC(aValue3.Length() * 2);
TPtr value3Ptr(value3->Des());
MPXDbCommonUtil::FindAndReplaceSingleQuote(aValue3, value3Ptr);
// construct the query
HBufC* query = HBufC::NewLC( aQuery.Length() +
value1Ptr.Length() +
2 * KMCIntegerLen +
value3Ptr.Length() );
query->Des().Format(aQuery, value1, aValue2, value3, aValue4);
// execute the query
TUint32 ret(ExecuteSumQueryL(*query));
CleanupStack::PopAndDestroy(query);
CleanupStack::PopAndDestroy(value3);
CleanupStack::PopAndDestroy(value1);
return ret;
}
// ----------------------------------------------------------------------------
// CMPXDbTable::ExecuteSumExQueryL
// ----------------------------------------------------------------------------
//
EXPORT_C TInt CMPXDbTable::ExecuteSumExQueryL(
const TDesC& aQuery,
TUint32 aPlaylistId,
TInt aDrive)
{
MPX_FUNC("CMPXDbTable::ExecuteSumExQueryL");
HBufC* query = HBufC::NewLC(aQuery.Length() + KMCIntegerLen);
query->Des().Format(aQuery, aPlaylistId);
RSqlStatement recordset(iDbManager.ExecuteSelectQueryOnAllDrivesL(aDrive, *query));
CleanupClosePushL(recordset);
TInt sum(0);
TInt err(KErrNone);
while ((err = recordset.Next()) == KSqlAtRow)
{
sum += recordset.ColumnInt64(KMPXTableDefaultIndex);
}
CleanupStack::PopAndDestroy(&recordset);
CleanupStack::PopAndDestroy(query);
if (err != KSqlAtEnd)
{
User::Leave(KErrCorrupt);
}
return sum;
}
// ----------------------------------------------------------------------------
// CMPXDbTable::ExecuteMediaQueryL
// ----------------------------------------------------------------------------
//
EXPORT_C void CMPXDbTable::ExecuteMediaQueryL(
const TArray<TMPXAttribute>& aAttrs,
CMPXMediaArray& aMediaArray,
const TDesC& aQuery,
TInt aValue1,
TInt aValue2,
TUint aQueryId )
{
MPX_FUNC("CMPXDbTable::ExecuteMediaOffsetQueryL");
RSqlStatement& recordset(iDbManager.ExecuteSelectQueryL(aQueryId,
aValue1,
aValue2,
aQuery));
CleanupClosePushL(recordset);
TInt err(KErrNone);
while ((err = recordset.Next()) == KSqlAtRow)
{
CMPXMedia* media = CMPXMedia::NewL();
CleanupStack::PushL(media);
UpdateMediaL(recordset, aAttrs, *media);
aMediaArray.AppendL(*media);
CleanupStack::PopAndDestroy(media);
}
CleanupStack::Pop(&recordset);
if (err!= KSqlAtEnd)
{
User::Leave(KErrCorrupt);
}
}
// ----------------------------------------------------------------------------
// CMPXDbTable::ExecuteMediaQueryL
// ----------------------------------------------------------------------------
//
EXPORT_C void CMPXDbTable::ExecuteMediaQueryL( const TArray<TMPXAttribute>& aAttrs,
CMPXMediaArray& aMediaArray,
const TDesC& aQuery,
const TDesC& aValue1,
TInt aValue2,
TBool aAsc,
TUint aQueryId )
{
MPX_DEBUG1("CMPXDbTable::ExecuteMediaAscQueryL <--");
RSqlStatement& recordset(iDbManager.ExecuteSelectQueryL(aQueryId,
aValue1,
aValue2,
aQuery));
CleanupClosePushL(recordset);
TInt err(KErrNone);
while ((err = recordset.Next()) == KSqlAtRow)
{
CMPXMedia* media = CMPXMedia::NewL();
CleanupStack::PushL(media);
UpdateMediaL(recordset, aAttrs, *media);
if( aAsc )
{
aMediaArray.AppendL(*media);
}
else
{
aMediaArray.InsertL(*media, 0);
}
CleanupStack::PopAndDestroy(media);
}
CleanupStack::Pop(&recordset);
if (err!= KSqlAtEnd)
{
User::Leave(KErrCorrupt);
}
MPX_DEBUG1("CMPXDbTable::ExecuteMediaAscQueryL -->");
}
// ----------------------------------------------------------------------------
// CMPXDbTable::DoCheckTable
// ----------------------------------------------------------------------------
//
EXPORT_C TBool CMPXDbTable::DoCheckTable(
RSqlDatabase& aDatabase,
const TDesC& aQuery)
{
MPX_FUNC("CMPXDbTable::DoCheckTable");
RSqlStatement statement;
TInt err(statement.Prepare(aDatabase, aQuery));
statement.Close();
return (err == KErrNone);
}
// End of File