--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/upnpharvester/common/cmsqlwrapper/src/cmsqldbclause.cpp Thu Dec 17 08:52:00 2009 +0200
@@ -0,0 +1,944 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: SQL database sql clause class
+*
+*/
+
+
+
+
+
+
+#include <utf.h>
+#include "cmfillrule.h"
+#include "cmsqlpropertycollector.h"
+#include "cmsqlpropertycontainer.h"
+#include "cmsqlpropertyitem.h"
+#include "cmsqldbclause.h"
+#include "cmsqlclausedef.h"
+#include "msdebug.h"
+
+// CONSTANTS
+// The size of buf that need to allot for store the rule amount
+const TUint KCmRuleAmountSize = 5;
+
+// ---------------------------------------------------------------------------
+// CCmSqlDbClause::NewL
+// ---------------------------------------------------------------------------
+//
+CCmSqlDbClause* CCmSqlDbClause::NewL()
+ {
+ LOG(_L("[SQL Wrapper]\t CCmSqlDbClause::NewL"));
+ CCmSqlDbClause* self = CCmSqlDbClause::NewLC();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CCmSqlDbClause::NewLC
+// ---------------------------------------------------------------------------
+//
+CCmSqlDbClause* CCmSqlDbClause::NewLC()
+ {
+ LOG(_L("[SQL Wrapper]\t CCmSqlDbClause::NewLC"));
+ CCmSqlDbClause* self = new ( ELeave ) CCmSqlDbClause();
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CCmSqlDbClause::~CCmSqlDbClause
+// ---------------------------------------------------------------------------
+//
+CCmSqlDbClause::~CCmSqlDbClause()
+ {
+ LOG(_L("[SQL Wrapper]\t CCmSqlDbClause::~CCmSqlDbClause"));
+
+ delete iClause;
+ delete iFreeText;
+ iProfileFilters.Reset();
+ }
+
+// ---------------------------------------------------------------------------
+// CCmSqlDbClause::FormatClauseL
+// ---------------------------------------------------------------------------
+//
+void CCmSqlDbClause::FormatClauseL( CCmFillRule& aRule,
+ TCmMetadataField aField, TCmMediaType aMedia )
+ {
+ LOG(_L("[SQL Wrapper]\t CCmSqlDbClause::FormatClauseL"));
+
+ delete iClause;
+ iClause = NULL;
+ if( aField == ECmNone && &aRule )
+ {
+ if( ECmAudio != aRule.MediaType() )
+ {
+ iClause = KCmSqlBaseSelect().AllocL();
+ }
+ else
+ {
+ iClause = KCmSqlMusicSelect().AllocL();
+ }
+ TRACE(Print(_L("[SQL wrapper]\t Formating media type...")));
+ FormatMediatypeL( aRule );
+ TRACE(Print(_L("[SQL wrapper]\t Formating params...")));
+ FormatParamsL( aRule );
+ TRACE(Print(_L("[SQL wrapper]\t Formating devices...")));
+ FormatDevicesL( aRule );
+ TRACE(Print(_L("[SQL wrapper]\t Formating profile filters...")));
+ FormatProfileFiltersL();
+ TRACE(Print(_L("[SQL wrapper]\t Formating ordering...")));
+ FormatOrderingL( aRule.Method() );
+ TRACE(Print(_L("[SQL wrapper]\t Formating amount...")));
+ FormatAmountL( aRule );
+ // Finish clause
+ iClause = iClause->ReAllocL( iClause->Length() +
+ KCmSqlSemicolon().Length() );
+ iClause->Des().Append( KCmSqlSemicolon() );
+ }
+ else
+ {
+ FormatProperyQueryL( aField, aMedia );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CCmSqlDbClause::FormatFilteringClauseL
+// ---------------------------------------------------------------------------
+//
+void CCmSqlDbClause::FormatFilteringClauseL(
+ CCmSqlPropertyCollector& aPropertys )
+ {
+ LOG(_L("[SQL Wrapper]\t CCmSqlDbClause::FormatFilteringClauseL"));
+
+ delete iClause;
+ iClause = NULL;
+
+ TInt count = aPropertys.PropertyContainerCount();
+
+ if( count == 1 && aPropertys.PropertyContainer( 0 )->Type() == ECmTitle)
+ {
+ //video
+ iClause = KCmSqlFilteredPropertySelectVideo().AllocL();
+ }
+ else
+ {
+ iClause = KCmSqlFilteredPropertySelect().AllocL();
+ }
+
+ FormatPropertyFilterL( aPropertys );
+ }
+
+// ---------------------------------------------------------------------------
+// CCmSqlDbClause::ClauseL
+// ---------------------------------------------------------------------------
+//
+TDesC8& CCmSqlDbClause::ClauseL() const
+ {
+ LOG(_L("[SQL Wrapper]\t CCmSqlDbClause::ClauseL"));
+
+#ifdef _DEBUG
+ HBufC* data16bitBuf = HBufC::NewLC(iClause->Length());
+ TPtr data16bitPtr = data16bitBuf->Des();
+
+ TInt conversionError =
+ CnvUtfConverter::ConvertToUnicodeFromUtf8(data16bitPtr,
+ *iClause );
+ TPtrC temp;
+ for( TInt i = 0; i < (data16bitPtr.Length())/100 + 1 ; i++ )
+ {
+ if( i == (data16bitPtr.Length())/100 )
+ {
+ temp.Set( data16bitPtr.Mid(100*i ) );
+ TRACE( Print(_L("SQL clause %S"), &temp ) );
+ }
+ else
+ {
+ temp.Set( data16bitPtr.Mid(100*i, 100 ) );
+ TRACE( Print(_L("SQL clause %S"), &temp ) );
+ }
+ }
+ CleanupStack::PopAndDestroy( data16bitBuf );
+#endif
+ return *iClause;
+ }
+
+// ---------------------------------------------------------------------------
+// CCmSqlDbClause::SetDlnaProfileFilters
+// ---------------------------------------------------------------------------
+//
+void CCmSqlDbClause::SetDlnaProfileFilters(
+ const RArray<TInt64>& aProfileIds )
+ {
+ LOG(_L("[SQL Wrapper]\t CCmSqlDbClause::SetDlnaProfileFilters"));
+
+ iProfileFilters.Reset();
+ for( TInt i = 0; i < aProfileIds.Count() ; i++ )
+ {
+ iProfileFilters.InsertInSignedKeyOrder( aProfileIds[i] );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CCmSqlDbClause::FormatMediatypeL
+// ---------------------------------------------------------------------------
+//
+void CCmSqlDbClause::FormatMediatypeL( CCmFillRule& aRule )
+ {
+ LOG(_L("[SQL Wrapper]\t CCmSqlDbClause::FormatMediatypeL"));
+
+ TBuf8<20>mediatype;
+ mediatype.Format( KCmSqlSelectMediatype, aRule.MediaType() );
+ iClause = iClause->ReAllocL( iClause->Length() + mediatype.Length() );
+ iClause->Des().Append( mediatype );
+ }
+
+// ---------------------------------------------------------------------------
+// CCmSqlDbClause::FormatParamsL
+// ---------------------------------------------------------------------------
+//
+void CCmSqlDbClause::FormatParamsL( CCmFillRule& aRule )
+ {
+ LOG(_L("[SQL Wrapper]\t CCmSqlDbClause::FormatParamsL"));
+
+ TCmMetadataField metadataColum;
+ TPtrC8 dataField;
+ TInt dataFieldIndex;
+ TCmOperatorType oper;
+ TInt paramCount;
+ TBool operatorAdded( EFalse );
+ for( TInt i = 0; i < aRule.RuleCount(); i++ )
+ {
+ aRule.RuleL( i, &metadataColum, &oper, ¶mCount );
+ if( paramCount )
+ {
+ iClause = iClause->ReAllocL( iClause->Length() +
+ KCmSqlAnd().Length() + KCmSqlLeftBracket().Length() );
+ iClause->Des().Append( KCmSqlAnd );
+ iClause->Des().Append( KCmSqlLeftBracket() );
+ for( TInt j = 0; j < paramCount; j++ )
+ {
+ iClause = iClause->ReAllocL( iClause->Length() +
+ KCmSqlLeftBracket().Length() );
+ iClause->Des().Append( KCmSqlLeftBracket() );
+
+ FormatMetadataColumnL( metadataColum, aRule.MediaType() );
+ // Data field may change to integer value ( index to table )
+ aRule.RuleParamL( i, j, &dataField );
+ aRule.RuleParamL( i, j, dataFieldIndex );
+
+ // If rule is free text rule, operator is already appended
+ // into Sql clause
+ operatorAdded = EFalse;
+ if( ECmFreeText != metadataColum &&
+ ECmArtist != metadataColum &&
+ ECmAlbum != metadataColum &&
+ ECmResolution != metadataColum &&
+ ECmGenre != metadataColum &&
+ ECmUpnpClass != metadataColum &&
+ ECmTitle != metadataColum )
+ {
+ FormatOperatorL( metadataColum, oper );
+ operatorAdded = ETrue;
+ }
+
+ if( dataField.Size() &&
+ ( iFreeText || ECmDate == metadataColum ||
+ ECmFileSize == metadataColum ||
+ ECmDuration == metadataColum ) )
+ {
+ if( ECmDate != metadataColum &&
+ ECmFileSize != metadataColum &&
+ ECmDuration != metadataColum )
+ {
+ TInt multiplier( 1 );
+ if( aRule.MediaType() == ECmAudio &&
+ metadataColum == ECmFreeText )
+ {
+ // Three fields are used in audio free text search
+ multiplier = 3;
+ }
+ iFreeText = iFreeText->ReAllocL( iFreeText->Length() +
+ ( dataField.Length() * multiplier ) );
+ HBufC8* temp = HBufC8::NewMaxL( iFreeText->Length() +
+ ( dataField.Length() * multiplier ) );
+ // Format dataField into clause
+ if( multiplier == 1 )
+ {
+ temp->Des().Format( *iFreeText, &dataField );
+ }
+ else
+ {
+ temp->Des().Format( *iFreeText, &dataField,
+ &dataField, &dataField );
+ }
+ if( iFreeText )
+ {
+ delete iFreeText;
+ iFreeText = NULL;
+ }
+ iClause = iClause->ReAllocL( iClause->Length() +
+ temp->Length() );
+ iClause->Des().Append( *temp );
+ delete temp;
+ }
+ else
+ {
+ // Date is appended in TInt64 format
+ TLex8 lex( dataField );
+ TInt64 num;
+ lex.Val( num );
+ iClause = iClause->ReAllocL( iClause->Length() +
+ dataField.Length() );
+ iClause->Des().AppendNum( num );
+ }
+ }
+ else
+ {
+ if( operatorAdded )
+ {
+ iClause = iClause->ReAllocL( iClause->Length() +
+ sizeof( dataFieldIndex ) );
+
+ HBufC8* temp = HBufC8::NewMaxLC( iClause->Length() );
+ temp->Des().Format( *iClause, dataFieldIndex );
+ delete iClause;
+ iClause = NULL;
+ iClause = temp->AllocL();
+ CleanupStack::PopAndDestroy( temp );
+ }
+ else
+ {
+ iClause = iClause->ReAllocL( iClause->Length() +
+ sizeof( dataFieldIndex ) );
+ iClause->Des().AppendNum( dataFieldIndex );
+ }
+ }
+
+ iClause = iClause->ReAllocL( iClause->Length() +
+ KCmSqlRightBracket().Length() );
+ iClause->Des().Append( KCmSqlRightBracket() );
+
+ if( j < paramCount - 1 )
+ {
+ iClause = iClause->ReAllocL( iClause->Length() +
+ KCmSqlOr().Length() );
+ iClause->Des().Append( KCmSqlOr() );
+ }
+ }
+ iClause = iClause->ReAllocL( iClause->Length() +
+ KCmSqlRightBracket().Length() );
+ iClause->Des().Append( KCmSqlRightBracket() );
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CCmSqlDbClause::FormatDevicesL
+// ---------------------------------------------------------------------------
+//
+void CCmSqlDbClause::FormatDevicesL( CCmFillRule& aRule )
+ {
+ LOG(_L("[SQL Wrapper]\t CCmSqlDbClause::FormatDevicesL"));
+
+ TPtrC8 mediaServer;
+ TInt msId(0);
+ if( aRule.MediaServerCount() )
+ {
+ iClause = iClause->ReAllocL( iClause->Length() +
+ KCmSqlAnd().Length() );
+ iClause->Des().Append( KCmSqlAnd() );
+ iClause = iClause->ReAllocL( iClause->Length() +
+ KCmSqlLeftBracket().Length() );
+ iClause->Des().Append( KCmSqlLeftBracket() );
+ }
+ for( TInt k = 0; k < aRule.MediaServerCount(); k++ )
+ {
+ iClause = iClause->ReAllocL( iClause->Length() +
+ KCmSqlLeftBracket().Length() );
+ iClause->Des().Append( KCmSqlLeftBracket() );
+ aRule.MediaServerL( k, msId );
+ iClause = iClause->ReAllocL( iClause->Length() +
+ KCmSqlSelectDeviceId().Length() + sizeof( msId ) );
+ iClause->Des().Append( KCmSqlSelectDeviceId );
+ iClause->Des().AppendNum( msId );
+ iClause = iClause->ReAllocL( iClause->Length() +
+ KCmSqlRightBracket().Length() );
+ iClause->Des().Append( KCmSqlRightBracket() );
+ if( k < aRule.MediaServerCount() - 1 )
+ {
+ iClause = iClause->ReAllocL( iClause->Length() +
+ KCmSqlOr().Length() );
+ iClause->Des().Append( KCmSqlOr() );
+ }
+ }
+ if( aRule.MediaServerCount() )
+ {
+ iClause = iClause->ReAllocL( iClause->Length() +
+ KCmSqlRightBracket().Length() );
+ iClause->Des().Append( KCmSqlRightBracket() );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CCmSqlDbClause::FormatOrderingL
+// ---------------------------------------------------------------------------
+//
+void CCmSqlDbClause::FormatOrderingL( TCmFillMethod aMethod )
+ {
+ LOG(_L("[SQL Wrapper]\t CCmSqlDbClause::FormatOrderingL"));
+
+ switch( aMethod )
+ {
+ case ECmRandom:
+ {
+ iClause = iClause->ReAllocL( iClause->Length() +
+ KCmSqlOrderByRandom().Length() );
+ iClause->Des().Append( KCmSqlOrderByRandom() );
+ break;
+ }
+ case ECmLatest:
+ {
+ iClause = iClause->ReAllocL( iClause->Length() +
+ KCmSqlOrderByDate().Length() + KCmSqlDesc().Length() );
+ iClause->Des().Append( KCmSqlOrderByDate() );
+ iClause->Des().Append( KCmSqlDesc() );
+ break;
+ }
+ case ECmOldest:
+ {
+ iClause = iClause->ReAllocL( iClause->Length() +
+ KCmSqlOrderByDate().Length() + KCmSqlAsc().Length() );
+ iClause->Des().Append( KCmSqlOrderByDate() );
+ iClause->Des().Append( KCmSqlAsc() );
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CCmSqlDbClause::FormatAmountL
+// ---------------------------------------------------------------------------
+//
+void CCmSqlDbClause::FormatAmountL( CCmFillRule& aRule )
+ {
+ LOG(_L("[SQL Wrapper]\t CCmSqlDbClause::FormatAmountL"));
+
+ if( aRule.LimitType() == EPieces )
+ {
+ iClause = iClause->ReAllocL( iClause->Length() +
+ KCmSqlLimit().Length() + KCmRuleAmountSize );
+ iClause->Des().Append( KCmSqlLimit() );
+ iClause->Des().AppendNum( aRule.Amount() );
+ }
+ else if( aRule.LimitType() == EMbits )
+ {
+ // If amount is wanted in MBytes, no possibility to
+ // LIMIT result set in this phase
+ }
+ else
+ {
+ // Unlimited rule
+ // Fill quota is used as a maximun amount
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CCmSqlDbClause::FormatMetadataColumnL
+// ---------------------------------------------------------------------------
+//
+void CCmSqlDbClause::FormatMetadataColumnL( TCmMetadataField aField,
+ TCmMediaType aMediaType )
+ {
+ LOG(_L("[SQL Wrapper]\t CCmSqlDbClause::FormatMetadataColumnL"));
+
+ if( iFreeText )
+ {
+ delete iFreeText; iFreeText = NULL;
+ }
+ TRACE(Print(_L("[SQL wrapper]\t Formating data field = %d"),
+ (TInt) aField ));
+
+ switch( aField )
+ {
+ case ECmArtist:
+ {
+ iClause = iClause->ReAllocL( iClause->Length() +
+ KCmSqlSelectArtistById().Length() );
+ iClause->Des().Append( KCmSqlSelectArtistById() );
+ break;
+ }
+ case ECmAlbum:
+ {
+ iClause = iClause->ReAllocL( iClause->Length() +
+ KCmSqlSelectAlbumById().Length() );
+ iClause->Des().Append( KCmSqlSelectAlbumById() );
+ break;
+ }
+ case ECmGenre:
+ {
+ iClause = iClause->ReAllocL( iClause->Length() +
+ KCmSqlSelectGenreById().Length() );
+ iClause->Des().Append( KCmSqlSelectGenreById() );
+ break;
+ }
+ case ECmDuration:
+ {
+ iClause = iClause->ReAllocL( iClause->Length() +
+ KCmSqlSelectDuration().Length() );
+ iClause->Des().Append( KCmSqlSelectDuration() );
+ break;
+ }
+ case ECmTitle:
+ {
+ iClause = iClause->ReAllocL( iClause->Length() +
+ KCmSqlSelectTitle().Length() );
+ iClause->Des().Append( KCmSqlSelectTitle() );
+ break;
+ }
+ case ECmUpnpClass:
+ {
+ iClause = iClause->ReAllocL( iClause->Length() +
+ KCmSqlSelectUpnpclassById().Length() );
+ iClause->Des().Append( KCmSqlSelectUpnpclassById );
+ break;
+ }
+ case ECmContentURI:
+ {
+ LOG(_L("[SQL Wrapper]\t CCmSqlDbClause::FormatMetadataColumnL \
+ aField = ECmContentURI"));
+ break;
+ }
+ case ECmFileSize:
+ {
+ iClause = iClause->ReAllocL( iClause->Length() +
+ KCmSqlSelectSize().Length() );
+ iClause->Des().Append( KCmSqlSelectSize() );
+ break;
+ }
+ case ECmBitrate:
+ {
+ iClause = iClause->ReAllocL( iClause->Length() +
+ KCmSqlSelectBitrate().Length() );
+ iClause->Des().Append( KCmSqlSelectBitrate );
+ break;
+ }
+ case ECmResolution:
+ {
+ iClause = iClause->ReAllocL( iClause->Length() +
+ KCmSqlSelectResolutionById().Length() );
+ iClause->Des().Append( KCmSqlSelectResolutionById );
+ break;
+ }
+ case ECmDate:
+ {
+ iClause = iClause->ReAllocL( iClause->Length() +
+ KCmSqlSelectDate().Length() );
+ iClause->Des().Append( KCmSqlSelectDate );
+ break;
+ }
+ case ECmFreeText:
+ {
+ switch( aMediaType )
+ {
+ case ECmAudio:
+ {
+ // Title, Artist or album field contains specified field
+ iFreeText = KCmSqlFreeTextSelectAudio().AllocL();
+ break;
+ }
+ case ECmImage:
+ case ECmVideo:
+ {
+ // Title contains specified field
+ iFreeText = KCmSqlFreeTextSelectImageOrVideo().AllocL();
+ break;
+ }
+ default:
+ {
+ LOG(_L("[SQL Wrapper]\t CCmSqlDbClause::\
+ FormatMetadataColumnL mediatype not found"));
+ break;
+ }
+ }
+ break;
+ }
+ default:
+ {
+ LOG(_L("[SQL Wrapper]\t CCmSqlDbClause::FormatMetadataColumnL \
+ field not found"));
+ break;
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CCmSqlDbClause::FormatOperatorL
+// ---------------------------------------------------------------------------
+//
+void CCmSqlDbClause::FormatOperatorL( TCmMetadataField aMetadataColum,
+ TCmOperatorType aOper )
+ {
+ LOG(_L("[SQL Wrapper]\t CCmSqlDbClause::FormatOperatorL"));
+
+ switch( aOper )
+ {
+ case ECmEquals:
+ {
+ iClause = iClause->ReAllocL( iClause->Length() +
+ KCmSqlEqual().Length() + KCmSqlAppendString().Length() );
+ iClause->Des().Append( KCmSqlEqual() );
+ iClause->Des().Append( KCmSqlAppendInteger() );
+ break;
+ }
+ // Greater and smaller operator are always integer operators
+ case ECmGreater:
+ {
+ if( aMetadataColum != ECmDate && aMetadataColum != ECmFileSize &&
+ aMetadataColum != ECmDuration )
+ {
+ iClause = iClause->ReAllocL( iClause->Length() +
+ KCmSqlGreater().Length() +
+ KCmSqlAppendInteger().Length() );
+ iClause->Des().Append( KCmSqlGreater() );
+ iClause->Des().Append( KCmSqlAppendInteger() );
+ }
+ else
+ {
+ iClause = iClause->ReAllocL( iClause->Length() +
+ KCmSqlGreater().Length() + KCmSqlAppendLong().Length() );
+ iClause->Des().Append( KCmSqlGreater() );
+ }
+ break;
+ }
+ case ECmSmaller:
+ {
+ if( aMetadataColum != ECmDate && aMetadataColum != ECmFileSize &&
+ aMetadataColum != ECmDuration )
+ {
+ iClause = iClause->ReAllocL( iClause->Length() +
+ KCmSqlSmaller().Length() +
+ KCmSqlAppendInteger().Length() );
+ iClause->Des().Append( KCmSqlSmaller() );
+ iClause->Des().Append( KCmSqlAppendInteger() );
+ }
+ else
+ {
+ iClause = iClause->ReAllocL( iClause->Length() +
+ KCmSqlSmaller().Length() + KCmSqlAppendLong().Length() );
+ iClause->Des().Append( KCmSqlSmaller() );
+ }
+ break;
+ }
+ case ECmConsistOf:
+ {
+ iClause = iClause->ReAllocL( iClause->Length() +
+ KCmSqlLike().Length() + KCmSqlConsistOf().Length() );
+ iClause->Des().Append( KCmSqlLike() );
+ iClause->Des().Append( KCmSqlConsistOf() );
+ break;
+ }
+ case ECmBeginsWith:
+ {
+ iClause = iClause->ReAllocL( iClause->Length() +
+ KCmSqlLike().Length() + KCmSqlBeginsWith().Length() );
+ iClause->Des().Append( KCmSqlLike() );
+ iClause->Des().Append( KCmSqlBeginsWith() );
+ break;
+ }
+ case ECmEndsWith:
+ {
+ iClause = iClause->ReAllocL( iClause->Length() +
+ KCmSqlLike().Length() + KCmSqlEndsWith().Length() );
+ iClause->Des().Append( KCmSqlLike() );
+ iClause->Des().Append( KCmSqlEndsWith() );
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CCmSqlDbClause::FormatProperyQueryL
+// ---------------------------------------------------------------------------
+//
+void CCmSqlDbClause::FormatProperyQueryL( TCmMetadataField aField,
+ TCmMediaType aMedia )
+ {
+ LOG(_L("[SQL Wrapper]\t CCmSqlDbClause::FormatProperyQueryL"));
+
+ if( iClause )
+ {
+ delete iClause;
+ iClause = NULL;
+ }
+
+ switch( aField )
+ {
+ case ECmArtist:
+ {
+ iClause = HBufC8::NewL( KCmSqlSelectPropertyValues().Length() +
+ KCmSqlArtist().Length() );
+ TPtr8 ptr( iClause->Des() );
+ ptr.Format( KCmSqlSelectPropertyValues, &KCmSqlArtist );
+ break;
+ }
+ case ECmAlbum:
+ {
+ iClause = HBufC8::NewL( KCmSqlSelectPropertyValues().Length() +
+ KCmSqlAlbum().Length() );
+ TPtr8 ptr( iClause->Des() );
+ ptr.Format( KCmSqlSelectPropertyValues, &KCmSqlAlbum );
+ break;
+ }
+ case ECmGenre:
+ {
+ iClause = HBufC8::NewL( KCmSqlSelectPropertyValues().Length() +
+ KCmSqlGenre().Length() );
+ TPtr8 ptr( iClause->Des() );
+ ptr.Format( KCmSqlSelectPropertyValues, &KCmSqlGenre );
+ break;
+ }
+ case ECmUpnpClass:
+ {
+ iClause = HBufC8::NewL( KCmSqlSelectPropertyValues().Length() +
+ KCmSqlUpnpclass().Length() );
+ TPtr8 ptr( iClause->Des() );
+ ptr.Format( KCmSqlSelectPropertyValues, &KCmSqlUpnpclass );
+ break;
+ }
+ case ECmTitle:
+ {
+ iClause = HBufC8::NewL( KCmSqlSelectTitleAndId().Length() +
+ sizeof( aMedia ) );
+ TPtr8 ptr( iClause->Des() );
+ ptr.Format( KCmSqlSelectTitleAndId, aMedia );
+ break;
+ }
+ case ECmResolution:
+ {
+ iClause = HBufC8::NewL( KCmSqlSelectPropertyValues().Length() +
+ KCmSqlResolutions().Length() );
+ TPtr8 ptr( iClause->Des() );
+ ptr.Format( KCmSqlSelectPropertyValues, &KCmSqlResolutions );
+ break;
+ }
+ case ECmProfileId:
+ {
+ iClause = HBufC8::NewL( KCmSqlSelectPropertyValues().Length() +
+ KCmSqlResolutions().Length() );
+ TPtr8 ptr( iClause->Des() );
+ ptr.Format( KCmSqlSelectPropertyValues, &KCmSqlUpnpProfiles );
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CCmSqlDbClause::FormatProfileFiltersL
+// ---------------------------------------------------------------------------
+//
+void CCmSqlDbClause::FormatProfileFiltersL( )
+ {
+ LOG(_L("[SQL Wrapper]\t CCmSqlDbClause::FormatProfileFiltersL"));
+
+ if( iProfileFilters.Count() )
+ {
+ iClause = iClause->ReAllocL( iClause->Length() +
+ KCmSqlAnd().Length() );
+ iClause->Des().Append( KCmSqlAnd() );
+ iClause = iClause->ReAllocL( iClause->Length() +
+ KCmSqlLeftBracket().Length() );
+ iClause->Des().Append( KCmSqlLeftBracket() );
+ }
+ for( TInt k = 0; k < iProfileFilters.Count(); k++ )
+ {
+ iClause = iClause->ReAllocL( iClause->Length() +
+ KCmSqlLeftBracket().Length() );
+ iClause->Des().Append( KCmSqlLeftBracket() );
+
+ iClause = iClause->ReAllocL( iClause->Length() +
+ KCmSqlFilterUpnpProfileId().Length() +
+ sizeof( iProfileFilters[k] ) );
+ iClause->Des().Append( KCmSqlFilterUpnpProfileId );
+ iClause->Des().AppendNum( iProfileFilters[k] );
+
+ iClause = iClause->ReAllocL( iClause->Length() +
+ KCmSqlRightBracket().Length() );
+ iClause->Des().Append( KCmSqlRightBracket() );
+ if( k < iProfileFilters.Count() - 1 )
+ {
+ iClause = iClause->ReAllocL( iClause->Length() +
+ KCmSqlAnd().Length() );
+ iClause->Des().Append( KCmSqlAnd() );
+ }
+ }
+ if( iProfileFilters.Count() )
+ {
+ iClause = iClause->ReAllocL( iClause->Length() +
+ KCmSqlRightBracket().Length() );
+ iClause->Des().Append( KCmSqlRightBracket() );
+ }
+ iClause = iClause->ReAllocL( iClause->Length() +
+ KCmSqlRightBracket().Length() );
+ iClause->Des().Append( KCmSqlRightBracket() );
+ }
+
+// ---------------------------------------------------------------------------
+// CCmSqlDbClause::FormatPropertyFilterL
+// ---------------------------------------------------------------------------
+//
+void CCmSqlDbClause::FormatPropertyFilterL(
+ CCmSqlPropertyCollector& aPropertys )
+ {
+ LOG(_L("[SQL Wrapper]\t CCmSqlDbClause::FormatPropertyFilterL"));
+
+ CCmSqlPropertyContainer* container = NULL;
+ HBufC8* temp = NULL;
+ for( TInt i = 0; i < aPropertys.PropertyContainerCount(); i++ )
+ {
+ container = aPropertys.PropertyContainer( i );
+ switch( container->Type() )
+ {
+ case ECmTitle:
+ {
+ AddPropertyFilterL( *container,
+ KCmSqlSelectTitle(), temp );
+ break;
+ }
+ case ECmArtist:
+ {
+ AddPropertyFilterL( *container,
+ KCmSqlSelectArtistById(), temp );
+ break;
+ }
+ case ECmAlbum:
+ {
+ AddPropertyFilterL( *container,
+ KCmSqlSelectAlbumById(), temp );
+ break;
+ }
+ case ECmGenre:
+ {
+ AddPropertyFilterL( *container,
+ KCmSqlSelectGenreById(), temp );
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ container = NULL;
+ }
+
+ if( temp )
+ {
+ iClause = iClause->ReAllocL( iClause->Length() + temp->Length() );
+ iClause->Des().Append( *temp );
+ delete temp;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CCmSqlDbClause::AddPropertyFilterL
+// ---------------------------------------------------------------------------
+//
+void CCmSqlDbClause::AddPropertyFilterL(
+ CCmSqlPropertyContainer& aContainer, const TDesC8& aField,
+ HBufC8*& aClause )
+ {
+ LOG(_L("[SQL Wrapper]\t CCmSqlDbClause::AddPropertyFilterL"));
+
+ if( aClause && aContainer.PropertyItemCount() )
+ {
+ aClause = aClause->ReAllocL( aClause->Length() +
+ KCmSqlAnd().Length() + ( 2 * KCmSqlSpace().Length() ) );
+ aClause->Des().Append( KCmSqlSpace() );
+ aClause->Des().Append( KCmSqlAnd() );
+ aClause->Des().Append( KCmSqlSpace() );
+ }
+ if( aContainer.PropertyItemCount() && !aClause )
+ {
+ aClause = KCmSqlAnd().AllocL();
+ }
+ if( aContainer.PropertyItemCount() && aClause )
+ {
+ aClause = aClause->ReAllocL( aClause->Length() +
+ KCmSqlLeftBracket().Length() );
+ aClause->Des().Append( KCmSqlLeftBracket );
+
+ for( TInt j = 0; j < aContainer.PropertyItemCount() ; j++ )
+ {
+ aClause = aClause->ReAllocL( aClause->Length() +
+ KCmSqlSelectTitle().Length() +
+ sizeof( aContainer.PropertyItem( j )->Id() ) );
+ aClause->Des().Append( aField );
+ aClause->Des().AppendNum(
+ aContainer.PropertyItem( j )->Id() );
+ if( j < aContainer.PropertyItemCount() - 1 )
+ {
+ aClause = aClause->ReAllocL( aClause->Length() +
+ KCmSqlOr().Length() + ( 2 * KCmSqlSpace().Length() ) );
+ aClause->Des().Append( KCmSqlSpace() );
+ aClause->Des().Append( KCmSqlOr() );
+ aClause->Des().Append( KCmSqlSpace() );
+ }
+ }
+
+ aClause = aClause->ReAllocL( aClause->Length() +
+ KCmSqlRightBracket().Length() );
+ aClause->Des().Append( KCmSqlRightBracket );
+
+ for( TInt k = 0; k < aContainer.PropertyItemCount() ; k++ )
+ {
+ aContainer.DeletePropertyItem( k );
+ k--;
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Default constructor
+// ---------------------------------------------------------------------------
+//
+CCmSqlDbClause::CCmSqlDbClause()
+ {
+ LOG(_L("[SQL Wrapper]\t CCmSqlDbClause::CCmSqlDbClause"));
+ }
+
+// ---------------------------------------------------------------------------
+// ConstructL
+// ---------------------------------------------------------------------------
+//
+void CCmSqlDbClause::ConstructL()
+ {
+ LOG(_L("[SQL Wrapper]\t CCmSqlDbClause::ConstructL"));
+ }
+
+// End of file
+