contentstorage/castorage/src/casqlitestorage.cpp
changeset 88 7f0462e8c3da
parent 86 e492551a0d54
child 89 1e87eb3b400f
--- a/contentstorage/castorage/src/casqlitestorage.cpp	Tue Mar 23 23:42:03 2010 +0200
+++ b/contentstorage/castorage/src/casqlitestorage.cpp	Tue Mar 23 23:55:55 2010 +0200
@@ -23,6 +23,7 @@
 #include "cainnerquery.h"
 #include "caarraycleanup.inl"
 #include "calocalizationentry.h"
+#include "cainternaltypes.h"
 
 // ---------------------------------------------------------------------------
 // CCASqLiteStorage::CCpStorageEngine()
@@ -184,6 +185,30 @@
                 CCaSqlQuery::EAttribute );
         CleanupStack::PopAndDestroy( sqlGetAttributesQuery );
         }
+    
+    if( aQuery->GetAttributes().Count() )
+        {
+        for( int i=aResultContainer.Count()-1; i>=0; i--)
+            {
+            for( int j=0; j<aQuery->GetAttributes().Count(); j++ )
+                {
+                const TPtrC attrNameFromQuery( aQuery->GetAttributes()[j]->Name() );
+                const TPtrC attrValueFromQuery( aQuery->GetAttributes()[j]->Value() );
+                
+                TBuf16<KCaMaxAttrValueLen> value;
+                aResultContainer[i]->FindAttribute( attrNameFromQuery, value );
+                                
+                if( value.CompareC( attrValueFromQuery ) )
+                    {
+                    // remove from results
+                    delete aResultContainer[i];
+                    aResultContainer.Remove( i );
+                    break;
+                    }
+                }
+            }
+        }
+    
     //  set entries if proper order if they were fetched by ids
     if( aQuery->GetIds().Count() > 0 )
         {
@@ -221,6 +246,7 @@
 void CCaSqLiteStorage::GetEntriesIdsL( const CCaInnerQuery* aQuery,
         RArray<TInt>& aResultIdArray )
     {
+    /*
     CCaSqlQuery* sqlGetEntriesIdsQuery = CCaSqlQuery::NewLC( iSqlDb );
     CaSqlQueryCreator::CreateGetEntriesQueryL( aQuery,
             sqlGetEntriesIdsQuery );
@@ -229,6 +255,17 @@
     sqlGetEntriesIdsQuery->ExecuteL( aResultIdArray,
             CCaSqlQuery::EEntryTable );
     CleanupStack::PopAndDestroy( sqlGetEntriesIdsQuery );
+    */
+    RPointerArray<CCaInnerEntry> resultContainer;
+    CleanupResetAndDestroyPushL( resultContainer );
+    GetEntriesL( aQuery, resultContainer );
+    for( TInt i=0; i<resultContainer.Count(); i++ )
+        {
+        int id = resultContainer[i]->GetId();
+        aResultIdArray.AppendL( id );
+        }
+    
+    CleanupStack::PopAndDestroy( &resultContainer );
     }
 
 // ---------------------------------------------------------------------------