~ubuntu-branches/ubuntu/quantal/akonadi/quantal

« back to all changes in this revision

Viewing changes to server/src/storage/datastore.cpp

  • Committer: Package Import Robot
  • Author(s): Jonathan Riddell
  • Date: 2012-01-24 23:43:13 UTC
  • mto: (3.1.12 sid)
  • mto: This revision was merged to the branch mainline in revision 69.
  • Revision ID: package-import@ubuntu.com-20120124234313-ooald4uh9w8jilyw
Tags: upstream-1.7.0
ImportĀ upstreamĀ versionĀ 1.7.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
257
257
bool Akonadi::DataStore::cleanupCollection(Collection &collection)
258
258
{
259
259
  // delete the content
260
 
  PimItem::List items = collection.items();
261
 
  foreach ( PimItem item, items )
262
 
    cleanupPimItem( item );
 
260
  const PimItem::List items = collection.items();
 
261
  const QByteArray resource = collection.resource().name().toLatin1();
 
262
  foreach ( const PimItem &item, items ) {
 
263
 
 
264
    // generate the notification before actually removing the data
 
265
    mNotificationCollector->itemRemoved( item, collection, QString(), resource ); // TODO: make mimetype available as part as an item bulk query
 
266
 
 
267
    if ( !item.clearFlags() ) // TODO: move out of loop and use only a single query
 
268
      return false;
 
269
    if ( !PartHelper::remove( Part::pimItemIdColumn(), item.id() ) ) // TODO: reduce to single query
 
270
      return false;
 
271
    if ( !PimItem::remove( PimItem::idColumn(), item.id() ) ) // TODO: move into single query
 
272
      return false;
 
273
 
 
274
    if ( !Entity::clearRelation<CollectionPimItemRelation>( item.id(), Entity::Right ) ) // TODO: move into single query
 
275
      return false;
 
276
  }
263
277
 
264
278
  // delete collection mimetypes
265
279
  collection.clearMimeTypes();
362
376
  if ( !col.cachePolicyInherit() )
363
377
    return;
364
378
 
365
 
  Collection parent = col.parent();
366
 
  while ( parent.isValid() ) {
 
379
  Collection parent = col;
 
380
  while ( parent.parentId() != 0 ) {
 
381
    parent = parent.parent();
367
382
    if ( !parent.cachePolicyInherit() ) {
368
383
      col.setCachePolicyCheckInterval( parent.cachePolicyCheckInterval() );
369
384
      col.setCachePolicyCacheTimeout( parent.cachePolicyCacheTimeout() );
371
386
      col.setCachePolicyLocalParts( parent.cachePolicyLocalParts() );
372
387
      return;
373
388
    }
374
 
    parent = parent.parent();
375
389
  }
376
390
 
377
391
  // ### system default
489
503
  return true;
490
504
}
491
505
 
492
 
bool DataStore::cleanupPimItems( const Collection &collection )
493
 
{
494
 
  if ( !m_dbOpened || !collection.isValid() )
495
 
    return false;
496
 
 
497
 
  QueryBuilder qb( Flag::tableName(), QueryBuilder::Select );
498
 
  qb.addJoin( QueryBuilder::InnerJoin, PimItemFlagRelation::tableName(),
499
 
              PimItemFlagRelation::rightFullColumnName(), Flag::idFullColumnName() );
500
 
  qb.addJoin( QueryBuilder::InnerJoin, PimItem::tableName(),
501
 
              PimItem::idFullColumnName(), PimItemFlagRelation::leftFullColumnName() );
502
 
 
503
 
  qb.addColumn( PimItemFlagRelation::leftFullColumnName() );
504
 
 
505
 
  qb.addValueCondition( Flag::nameFullColumnName(), Query::Equals, QLatin1String("\\DELETED") );
506
 
  qb.addValueCondition( PimItem::collectionIdFullColumnName(), Query::Equals, collection.id() );
507
 
 
508
 
  if ( !qb.exec() )
509
 
    return false;
510
 
 
511
 
  QVector<PimItem> pimItems;
512
 
  while ( qb.query().next() ) {
513
 
    PimItem item;
514
 
    item.setId( qb.query().value( 0 ).toLongLong() );
515
 
 
516
 
    pimItems.append( item );
517
 
  }
518
 
 
519
 
  bool ok = true;
520
 
  for ( int i = 0; i < pimItems.count(); ++i )
521
 
    ok = ok && cleanupPimItem( pimItems[ i ] );
522
 
 
523
 
  return ok;
524
 
}
525
 
 
526
506
bool DataStore::addCollectionAttribute(const Collection & col, const QByteArray & key, const QByteArray & value)
527
507
{
528
508
  SelectQueryBuilder<CollectionAttribute> qb;