@Override public List<DeletedWorklog> getWorklogsDeletedSince(final Long sinceInMilliseconds, final int maxResults) { final QChangeItem ci = QChangeItem.CHANGE_ITEM; final QChangeGroup cg = QChangeGroup.CHANGE_GROUP; final QWorklog w = WORKLOG; NumberExpression<Long> oldValueExpression = isOracle() ? convertToNumber(ci.oldvalue) : ci.oldvalue.castToNum(Long.class); List<Tuple> removedWorklogs = getRemovedWorklogs(sinceInMilliseconds, maxResults, ci, cg, w, oldValueExpression); return removedWorklogs .stream() .map(t -> new DeletedWorklog(t.get(oldValueExpression), new Date(t.get(cg.created.max()).getTime()))) .collect(Collectors.toList()); }
@Override public List<Project> findProjects(String organization, Optional<String> query, Optional<String> language) { DateTimeSubQuery<Date> lastSnapshot = new JPASubQuery().from(project) .where(project.organizationName.eq(organization)) .unique(project.snapshotDate.max()); BooleanBuilder q = new BooleanBuilder() .and(project.organizationName.eq(organization)) .and(project.snapshotDate.eq(lastSnapshot)); if (query.isPresent()) { q.and(project.name.startsWith(query.get())); } if (language.isPresent()) { q.and(project.primaryLanguage.eq(language.get())); } return queryProject().where(q).list(project); }
private List<Tuple> getRemovedWorklogs(final Long sinceInMilliseconds, final int maxResults, final QChangeItem ci, final QChangeGroup cg, final QWorklog w, final NumberExpression<Long> oldValueExpression) { return dbConnectionManager.executeQuery(dbConnection -> dbConnection.newSqlQuery() .from(ci) .leftJoin(cg) .on(ci.group.eq(cg.id)) .where(ci.field.eq(IssueFieldConstants.WORKLOG_ID) .and(cg.created.goe(new Timestamp(sinceInMilliseconds)) .and(cg.created.loe(new Timestamp(minuteAgo())))) .and(oldValueExpression.notIn(new SQLSubQuery() .from(w) .list(w.id)) ) ) .groupBy(oldValueExpression) .orderBy(cg.created.max().asc()) .limit(maxResults) .list(oldValueExpression, cg.created.max())); }
@Test @Ignore // FIXME public void test() { QCat cat = QCat.cat; SubQueryExpression<?> subQuery = subQuery().from(cat) .where(subQuery() .from(cat) .groupBy(cat.mate) .list(new QTuple(cat.mate, cat.birthdate.max())) .contains(new QTuple(cat.mate, cat.birthdate))) .list(new QTuple(cat.birthdate, cat.name, cat.mate)); assertToString( "(select cat.birthdate, cat.name, cat.mate from Cat cat " + "where (cat.mate, cat.birthdate) in " + "(select cat.mate, max(cat.birthdate) from Cat cat group by cat.mate))", subQuery); }