rewrite query using subqueries

This commit is contained in:
Athou
2015-06-25 11:20:50 +02:00
parent ddfd170ea8
commit fed7a1ac84

View File

@@ -15,7 +15,6 @@ import com.commafeed.backend.model.QFeed;
import com.commafeed.backend.model.QFeedSubscription; import com.commafeed.backend.model.QFeedSubscription;
import com.commafeed.backend.model.QUser; import com.commafeed.backend.model.QUser;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
import com.mysema.query.BooleanBuilder;
import com.mysema.query.jpa.hibernate.HibernateQuery; import com.mysema.query.jpa.hibernate.HibernateQuery;
import com.mysema.query.jpa.hibernate.HibernateSubQuery; import com.mysema.query.jpa.hibernate.HibernateSubQuery;
@@ -30,19 +29,16 @@ public class FeedDAO extends GenericDAO<Feed> {
} }
public List<Feed> findNextUpdatable(int count, Date lastLoginThreshold) { public List<Feed> findNextUpdatable(int count, Date lastLoginThreshold) {
BooleanBuilder disabledDatePredicate = new BooleanBuilder(); HibernateQuery query = newQuery().from(feed);
disabledDatePredicate.or(feed.disabledUntil.isNull()); query.where(feed.disabledUntil.isNull().or(feed.disabledUntil.lt(new Date())));
disabledDatePredicate.or(feed.disabledUntil.lt(new Date()));
HibernateQuery query = null;
if (lastLoginThreshold != null) { if (lastLoginThreshold != null) {
QFeedSubscription subs = QFeedSubscription.feedSubscription; QFeedSubscription subs = QFeedSubscription.feedSubscription;
QUser user = QUser.user; QUser user = QUser.user;
query = newQuery().from(subs);
query.join(subs.feed, feed).join(subs.user, user).where(disabledDatePredicate, user.lastLogin.gt(lastLoginThreshold)); HibernateSubQuery subQuery = new HibernateSubQuery().from(subs);
} else { subQuery.join(subs.user, user).where(user.lastLogin.gt(lastLoginThreshold));
query = newQuery().from(feed); query.where(subQuery.exists());
query.where(disabledDatePredicate);
} }
return query.orderBy(feed.disabledUntil.asc()).limit(count).distinct().list(feed); return query.orderBy(feed.disabledUntil.asc()).limit(count).distinct().list(feed);