From 407481faa6339b621beb1cdfcfaddb9824d4dbf6 Mon Sep 17 00:00:00 2001 From: Athou Date: Wed, 18 Sep 2013 09:24:31 +0200 Subject: [PATCH] delete operation does not support limit. limit on select and delete afterwards --- .../backend/dao/FeedEntryStatusDAO.java | 16 +++++++++++----- .../services/DatabaseCleaningService.java | 15 ++++++++++----- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/commafeed/backend/dao/FeedEntryStatusDAO.java b/src/main/java/com/commafeed/backend/dao/FeedEntryStatusDAO.java index 13cd48df..8338077e 100644 --- a/src/main/java/com/commafeed/backend/dao/FeedEntryStatusDAO.java +++ b/src/main/java/com/commafeed/backend/dao/FeedEntryStatusDAO.java @@ -290,11 +290,17 @@ public class FeedEntryStatusDAO extends GenericDAO { setTimeout(query, applicationSettingsService.get().getQueryTimeout()); } - public int deleteOldStatuses(Date olderThan, int limit) { - Query query = em.createNamedQuery("Statuses.deleteOld"); - query.setParameter("date", olderThan); - query.setMaxResults(limit); - return query.executeUpdate(); + public List getOldStatuses(Date olderThan, int limit) { + CriteriaQuery query = builder.createQuery(getType()); + Root root = query.from(getType()); + + Predicate p1 = builder.lessThan(root.get(FeedEntryStatus_.entryInserted), olderThan); + Predicate p2 = builder.isFalse(root.get(FeedEntryStatus_.starred)); + + query.where(p1, p2); + TypedQuery q = em.createQuery(query); + q.setMaxResults(limit); + return q.getResultList(); } } diff --git a/src/main/java/com/commafeed/backend/services/DatabaseCleaningService.java b/src/main/java/com/commafeed/backend/services/DatabaseCleaningService.java index c09512e4..674df623 100644 --- a/src/main/java/com/commafeed/backend/services/DatabaseCleaningService.java +++ b/src/main/java/com/commafeed/backend/services/DatabaseCleaningService.java @@ -1,6 +1,7 @@ package com.commafeed.backend.services; import java.util.Calendar; +import java.util.Collections; import java.util.Date; import java.util.List; import java.util.concurrent.TimeUnit; @@ -15,6 +16,7 @@ import com.commafeed.backend.dao.FeedEntryDAO; import com.commafeed.backend.dao.FeedEntryStatusDAO; import com.commafeed.backend.dao.FeedSubscriptionDAO; import com.commafeed.backend.model.Feed; +import com.commafeed.backend.model.FeedEntryStatus; import com.commafeed.backend.model.FeedSubscription; /** @@ -101,12 +103,15 @@ public class DatabaseCleaningService { public long cleanStatusesOlderThan(Date olderThan) { log.info("cleaning old read statuses"); long total = 0; - int deleted = -1; + List list = Collections.emptyList(); do { - deleted = feedEntryStatusDAO.deleteOldStatuses(olderThan, 100); - total += deleted; - log.info("cleaned {} old read statuses", total); - } while (deleted != 0); + list = feedEntryStatusDAO.getOldStatuses(olderThan, 100); + if (!list.isEmpty()) { + feedEntryStatusDAO.delete(list); + total += list.size(); + log.info("cleaned {} old read statuses", total); + } + } while (!list.isEmpty()); log.info("cleanup done: {} old read statuses deleted", total); return total; }