189 { |
189 { |
190 } |
190 } |
191 |
191 |
192 void CMdSSqlObjectManipulate::ConstructL( ) |
192 void CMdSSqlObjectManipulate::ConstructL( ) |
193 { |
193 { |
194 |
|
195 iGenerator = CMdSIdentifierGenerator::NewL(); |
194 iGenerator = CMdSIdentifierGenerator::NewL(); |
196 |
195 |
197 iNamespaceDef = NULL; |
196 iNamespaceDef = NULL; |
198 |
197 |
199 TLockBuffer lockBuffer; |
|
200 lockBuffer.iLock = EFalse; |
|
201 for (TInt i = 0; i < KMaxBuffers; ++i) |
198 for (TInt i = 0; i < KMaxBuffers; ++i) |
202 { |
199 { |
203 CMdsClauseBuffer* buffer = CMdsClauseBuffer::NewLC( 1024 ); |
200 TLockBuffer lockBuffer; |
204 lockBuffer.iBuffer = buffer; |
201 lockBuffer.iLock = EFalse; |
|
202 lockBuffer.iBuffer = CMdsClauseBuffer::NewLC( 1024 ); |
205 iBuffers.AppendL( lockBuffer ); |
203 iBuffers.AppendL( lockBuffer ); |
206 CleanupStack::Pop(); // buffer |
204 CleanupStack::Pop(); // buffer |
207 } |
205 } |
208 |
|
209 } |
206 } |
210 |
207 |
211 TBool CMdSSqlObjectManipulate::GarbageCollectionL() |
208 TBool CMdSSqlObjectManipulate::GarbageCollectionL() |
212 { |
209 { |
213 return DoGarbageCollectionL(); |
210 return DoGarbageCollectionL(); |
2090 } |
2091 } |
2091 buffer.AppendL( KCollectEnd ); |
2092 buffer.AppendL( KCollectEnd ); |
2092 |
2093 |
2093 __LOGQUERY_16( _L("Remove objects:"), buffer.ConstBufferL(), dataRow); |
2094 __LOGQUERY_16( _L("Remove objects:"), buffer.ConstBufferL(), dataRow); |
2094 connection.ExecuteL( buffer.ConstBufferL(), dataRow ); |
2095 connection.ExecuteL( buffer.ConstBufferL(), dataRow ); |
|
2096 |
|
2097 #ifdef MDS_PLAYLIST_HARVESTING_ENABLED |
|
2098 _LIT( KSetPlaylistItemsRemoved, "UPDATE Object%u SET Flags=Flags|? WHERE ObjectId IN (SELECT ObjectId FROM AudioPlaylistItem%u WHERE AudioObjectID IN(?" ); |
|
2099 _LIT( KPlaylistCollectEnd, "));" ); |
|
2100 |
|
2101 buffer.ReserveSpaceL( KSetPlaylistItemsRemoved().Length() + KMaxUintValueLength + |
|
2102 (removeObjectCount-1) * KCollectMiddle().Length() + |
|
2103 KPlaylistCollectEnd().Length() ); |
|
2104 |
|
2105 TDefId nameSpaceDefID = iNamespaceDef->GetId(); |
|
2106 buffer.BufferL().Format( KSetPlaylistItemsRemoved, nameSpaceDefID, nameSpaceDefID ); |
|
2107 |
|
2108 dataRow.Free(); |
|
2109 dataRow.Reset(); |
|
2110 dataRow.AppendL( TColumn( EMdEObjectFlagRemoved ) ); |
|
2111 |
|
2112 for (TInt i = 0; i < removeObjectCount; ++i) |
|
2113 { |
|
2114 if(i>0) |
|
2115 { |
|
2116 buffer.AppendL( KCollectMiddle ); |
|
2117 } |
|
2118 dataRow.AppendL( TColumn( aObjectIds[i] ) ); |
|
2119 } |
|
2120 buffer.AppendL( KPlaylistCollectEnd ); |
|
2121 |
|
2122 __LOGQUERY_16( _L("Remove playlist items:"), buffer.ConstBufferL(), dataRow); |
|
2123 connection.ExecuteL( buffer.ConstBufferL(), dataRow ); |
|
2124 #endif |
2095 } |
2125 } |
2096 |
2126 |
2097 // mark relations as removed |
2127 // mark relations as removed |
2098 // remove only item that are OK to remove (not removed earlier) |
2128 // remove only item that are OK to remove (not removed earlier) |
2099 const TInt removeRelationCount = aRelationIds.Count(); |
2129 const TInt removeRelationCount = aRelationIds.Count(); |
3252 |
3282 |
3253 // empryRow, rowDataDelContext, rowDataUpdRel, rowDataDelRel, rowDataUpd, |
3283 // empryRow, rowDataDelContext, rowDataUpdRel, rowDataDelRel, rowDataUpd, |
3254 // rowDataDel, commonClauseOne |
3284 // rowDataDel, commonClauseOne |
3255 CleanupStack::PopAndDestroy( 7, &commonClauseOne ); |
3285 CleanupStack::PopAndDestroy( 7, &commonClauseOne ); |
3256 |
3286 |
|
3287 #ifdef MDS_PLAYLIST_HARVESTING_ENABLED |
|
3288 if( updateResult == 0 ) |
|
3289 { |
|
3290 updateResult = CleanPlaylistsL(); |
|
3291 } |
|
3292 #endif |
|
3293 |
3257 return updateResult != 0; |
3294 return updateResult != 0; |
3258 } |
3295 } |
|
3296 |
|
3297 #ifdef MDS_PLAYLIST_HARVESTING_ENABLED |
|
3298 TInt CMdSSqlObjectManipulate::CleanPlaylistsL() |
|
3299 { |
|
3300 _LIT( KDeleteWholePlaylists, "DELETE FROM Object%u WHERE ObjectId IN (SELECT ObjectId FROM AudioPlaylistItem%u WHERE PlaylistID NOT IN (SELECT ObjectId FROM Object%u));" ); |
|
3301 |
|
3302 RClauseBuffer commonClauseOne(*this, KDeleteWholePlaylists().Length()); |
|
3303 CleanupClosePushL( commonClauseOne ); |
|
3304 CMdsClauseBuffer& buffer = commonClauseOne.BufferL(); |
|
3305 |
|
3306 RRowData rowDataDel; |
|
3307 CleanupClosePushL( rowDataDel ); |
|
3308 |
|
3309 const RPointerArray<CMdsNamespaceDef>& namespaceDefs = |
|
3310 iSchema.NamespaceDefs(); |
|
3311 |
|
3312 CMdSSqLiteConnection& connection = MMdSDbConnectionPool::GetDefaultDBL(); |
|
3313 const TInt updateResult = 0; // once all files to be cleaned are handled, no need to continue |
|
3314 |
|
3315 const TInt count = namespaceDefs.Count(); |
|
3316 |
|
3317 for( TInt i = 0; i < count; ++i ) |
|
3318 { |
|
3319 const TDefId nmspId = namespaceDefs[i]->GetId(); |
|
3320 |
|
3321 buffer.BufferL().Format( KDeleteWholePlaylists, nmspId, nmspId, nmspId ); |
|
3322 User::LeaveIfError( connection.ExecuteL( |
|
3323 buffer.ConstBufferL(), rowDataDel ) ); |
|
3324 } |
|
3325 |
|
3326 // rowDataDel, commonClauseOne |
|
3327 CleanupStack::PopAndDestroy( 2, &commonClauseOne ); |
|
3328 |
|
3329 return updateResult; |
|
3330 } |
|
3331 #endif |
3259 |
3332 |
3260 CMdSSqlObjectManipulate::RClauseBuffer::RClauseBuffer( CMdSSqlObjectManipulate& aSOM, TInt aSize ) |
3333 CMdSSqlObjectManipulate::RClauseBuffer::RClauseBuffer( CMdSSqlObjectManipulate& aSOM, TInt aSize ) |
3261 : iBuffers( aSOM.iBuffers ), iBuffer( NULL ), iNr( -1 ), iSize( aSize ) |
3334 : iBuffers( aSOM.iBuffers ), iBuffer( NULL ), iNr( -1 ), iSize( aSize ) |
3262 { |
3335 { |
3263 // search for available buffer |
3336 // search for available buffer |
3264 // or create new one |
3337 // or create new one |
3265 for (TInt i = 0; i < iBuffers.Count(); ++i) |
3338 for (TInt i = 0; i < iBuffers.Count(); ++i) |
3266 { |
3339 { |
3267 if (!iBuffers[i].iLock) |
3340 if (!iBuffers[i].iLock) |
3268 { |
3341 { |
3269 iBuffers[i].iLock = ETrue; |
3342 iBuffers[i].iLock = ETrue; |
3270 iBuffer = iBuffers[i].iBuffer; |
3343 CMdsClauseBuffer* oldBuffer( iBuffer ); |
|
3344 iBuffer = iBuffers[i].iBuffer; |
|
3345 TRAPD( error, iBuffer->ReserveSpaceL(aSize) ); |
|
3346 if( error != KErrNone ) |
|
3347 { |
|
3348 iBuffer = oldBuffer; |
|
3349 iBuffers[i].iLock = EFalse; |
|
3350 continue; |
|
3351 } |
|
3352 TRAP_IGNORE( iBuffer->BufferL().Zero() ); |
3271 iNr = i; |
3353 iNr = i; |
3272 TRAP_IGNORE( iBuffer->ReserveSpaceL(aSize) ); |
|
3273 TRAP_IGNORE( iBuffer->BufferL().Zero() ); |
|
3274 return; |
3354 return; |
3275 } |
3355 } |
3276 } |
3356 } |
3277 } |
3357 } |
3278 |
3358 |