From 223c2f464e3d9351922ac5d409bae0becb390404 Mon Sep 17 00:00:00 2001 From: Athou Date: Sat, 27 Jul 2013 17:22:31 +0200 Subject: [PATCH] index for entry lookup --- .../com/commafeed/backend/dao/FeedEntryDAO.java | 14 ++++++++------ .../backend/services/FeedUpdateService.java | 2 +- src/main/resources/changelogs/db.changelog-1.2.xml | 9 +++++++++ 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/commafeed/backend/dao/FeedEntryDAO.java b/src/main/java/com/commafeed/backend/dao/FeedEntryDAO.java index 8b50dd2e..5fd25bbe 100644 --- a/src/main/java/com/commafeed/backend/dao/FeedEntryDAO.java +++ b/src/main/java/com/commafeed/backend/dao/FeedEntryDAO.java @@ -23,18 +23,20 @@ public class FeedEntryDAO extends GenericDAO { protected static final Logger log = LoggerFactory.getLogger(FeedEntryDAO.class); - public FeedEntry findExisting(String guid, String url, Long feedId) { + public Long findExisting(String guid, Long feedId) { - CriteriaQuery query = builder.createQuery(getType()); + CriteriaQuery query = builder.createQuery(Long.class); Root root = query.from(getType()); + query.select(root.get(FeedEntry_.id)); Predicate p1 = builder.equal(root.get(FeedEntry_.guidHash), DigestUtils.sha1Hex(guid)); - Predicate p2 = builder.equal(root.get(FeedEntry_.url), url); - Predicate p3 = builder.equal(root.get(FeedEntry_.feed).get(Feed_.id), feedId); + Predicate p2 = builder.equal(root.get(FeedEntry_.feed).get(Feed_.id), feedId); - query.where(p1, p2, p3); + query.where(p1, p2); - List list = em.createQuery(query).getResultList(); + TypedQuery q = em.createQuery(query); + limit(q, 0, 1); + List list = q.getResultList(); return Iterables.getFirst(list, null); } diff --git a/src/main/java/com/commafeed/backend/services/FeedUpdateService.java b/src/main/java/com/commafeed/backend/services/FeedUpdateService.java index d27449fb..c07b869d 100644 --- a/src/main/java/com/commafeed/backend/services/FeedUpdateService.java +++ b/src/main/java/com/commafeed/backend/services/FeedUpdateService.java @@ -51,7 +51,7 @@ public class FeedUpdateService { */ public void updateEntry(Feed feed, FeedEntry entry, List subscriptions) { - FeedEntry existing = feedEntryDAO.findExisting(entry.getGuid(), entry.getUrl(), feed.getId()); + Long existing = feedEntryDAO.findExisting(entry.getGuid(), feed.getId()); if (existing != null) { return; } diff --git a/src/main/resources/changelogs/db.changelog-1.2.xml b/src/main/resources/changelogs/db.changelog-1.2.xml index eb009324..9da0843b 100644 --- a/src/main/resources/changelogs/db.changelog-1.2.xml +++ b/src/main/resources/changelogs/db.changelog-1.2.xml @@ -111,5 +111,14 @@ + + + + + + + + +